1
0

amber-cli.js 2.7 MB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133401344013540136401374013840139401404014140142401434014440145401464014740148401494015040151401524015340154401554015640157401584015940160401614016240163401644016540166401674016840169401704017140172401734017440175401764017740178401794018040181401824018340184401854018640187401884018940190401914019240193401944019540196401974019840199402004020140202402034020440205402064020740208402094021040211402124021340214402154021640217402184021940220402214022240223402244022540226402274022840229402304023140232402334023440235402364023740238402394024040241402424024340244402454024640247402484024940250402514025240253402544025540256402574025840259402604026140262402634026440265402664026740268402694027040271402724027340274402754027640277402784027940280402814028240283402844028540286402874028840289402904029140292402934029440295402964029740298402994030040301403024030340304403054030640307403084030940310403114031240313403144031540316403174031840319403204032140322403234032440325403264032740328403294033040331403324033340334403354033640337403384033940340403414034240343403444034540346403474034840349403504035140352403534035440355403564035740358403594036040361403624036340364403654036640367403684036940370403714037240373403744037540376403774037840379403804038140382403834038440385403864038740388403894039040391403924039340394403954039640397403984039940400404014040240403404044040540406404074040840409404104041140412404134041440415404164041740418404194042040421404224042340424404254042640427404284042940430404314043240433404344043540436404374043840439404404044140442404434044440445404464044740448404494045040451404524045340454404554045640457404584045940460404614046240463404644046540466404674046840469404704047140472404734047440475404764047740478404794048040481404824048340484404854048640487404884048940490404914049240493404944049540496404974049840499405004050140502405034050440505405064050740508405094051040511405124051340514405154051640517405184051940520405214052240523405244052540526405274052840529405304053140532405334053440535405364053740538405394054040541405424054340544405454054640547405484054940550405514055240553405544055540556405574055840559405604056140562405634056440565405664056740568405694057040571405724057340574405754057640577405784057940580405814058240583405844058540586405874058840589405904059140592405934059440595405964059740598405994060040601406024060340604406054060640607406084060940610406114061240613406144061540616406174061840619406204062140622406234062440625406264062740628406294063040631406324063340634406354063640637406384063940640406414064240643406444064540646406474064840649406504065140652406534065440655406564065740658406594066040661406624066340664406654066640667406684066940670406714067240673406744067540676406774067840679406804068140682406834068440685406864068740688406894069040691406924069340694406954069640697406984069940700407014070240703407044070540706407074070840709407104071140712407134071440715407164071740718407194072040721407224072340724407254072640727407284072940730407314073240733407344073540736407374073840739407404074140742407434074440745407464074740748407494075040751407524075340754407554075640757407584075940760407614076240763407644076540766407674076840769407704077140772407734077440775407764077740778407794078040781407824078340784407854078640787407884078940790407914079240793407944079540796407974079840799408004080140802408034080440805408064080740808408094081040811408124081340814408154081640817408184081940820408214082240823408244082540826408274082840829408304083140832408334083440835408364083740838408394084040841408424084340844408454084640847408484084940850408514085240853408544085540856408574085840859408604086140862408634086440865408664086740868408694087040871408724087340874408754087640877408784087940880408814088240883408844088540886408874088840889408904089140892408934089440895408964089740898408994090040901409024090340904409054090640907409084090940910409114091240913409144091540916409174091840919409204092140922409234092440925409264092740928409294093040931409324093340934409354093640937409384093940940409414094240943409444094540946409474094840949409504095140952409534095440955409564095740958409594096040961409624096340964409654096640967409684096940970409714097240973409744097540976409774097840979409804098140982409834098440985409864098740988409894099040991409924099340994409954099640997409984099941000410014100241003410044100541006410074100841009410104101141012410134101441015410164101741018410194102041021410224102341024410254102641027410284102941030410314103241033410344103541036410374103841039410404104141042410434104441045410464104741048410494105041051410524105341054410554105641057410584105941060410614106241063410644106541066410674106841069410704107141072410734107441075410764107741078410794108041081410824108341084410854108641087410884108941090410914109241093410944109541096410974109841099411004110141102411034110441105411064110741108411094111041111411124111341114411154111641117411184111941120411214112241123411244112541126411274112841129411304113141132411334113441135411364113741138411394114041141411424114341144411454114641147411484114941150411514115241153411544115541156411574115841159411604116141162411634116441165411664116741168411694117041171411724117341174411754117641177411784117941180411814118241183411844118541186411874118841189411904119141192411934119441195411964119741198411994120041201412024120341204412054120641207412084120941210412114121241213412144121541216412174121841219412204122141222412234122441225412264122741228412294123041231412324123341234412354123641237412384123941240412414124241243412444124541246412474124841249412504125141252412534125441255412564125741258412594126041261412624126341264412654126641267412684126941270412714127241273412744127541276412774127841279412804128141282412834128441285412864128741288412894129041291412924129341294412954129641297412984129941300413014130241303413044130541306413074130841309413104131141312413134131441315413164131741318413194132041321413224132341324413254132641327413284132941330413314133241333413344133541336413374133841339413404134141342413434134441345413464134741348413494135041351413524135341354413554135641357413584135941360413614136241363413644136541366413674136841369413704137141372413734137441375413764137741378413794138041381413824138341384413854138641387413884138941390413914139241393413944139541396413974139841399414004140141402414034140441405414064140741408414094141041411414124141341414414154141641417414184141941420414214142241423414244142541426414274142841429414304143141432414334143441435414364143741438414394144041441414424144341444414454144641447414484144941450414514145241453414544145541456414574145841459414604146141462414634146441465414664146741468414694147041471414724147341474414754147641477414784147941480414814148241483414844148541486414874148841489414904149141492414934149441495414964149741498414994150041501415024150341504415054150641507415084150941510415114151241513415144151541516415174151841519415204152141522415234152441525415264152741528415294153041531415324153341534415354153641537415384153941540415414154241543415444154541546415474154841549415504155141552415534155441555415564155741558415594156041561415624156341564415654156641567415684156941570415714157241573415744157541576415774157841579415804158141582415834158441585415864158741588415894159041591415924159341594415954159641597415984159941600416014160241603416044160541606416074160841609416104161141612416134161441615416164161741618416194162041621416224162341624416254162641627416284162941630416314163241633416344163541636416374163841639416404164141642416434164441645416464164741648416494165041651416524165341654416554165641657416584165941660416614166241663416644166541666416674166841669416704167141672416734167441675416764167741678416794168041681416824168341684416854168641687416884168941690416914169241693416944169541696416974169841699417004170141702417034170441705417064170741708417094171041711417124171341714417154171641717417184171941720417214172241723417244172541726417274172841729417304173141732417334173441735417364173741738417394174041741417424174341744417454174641747417484174941750417514175241753417544175541756417574175841759417604176141762417634176441765417664176741768417694177041771417724177341774417754177641777417784177941780417814178241783417844178541786417874178841789417904179141792417934179441795417964179741798417994180041801418024180341804418054180641807418084180941810418114181241813418144181541816418174181841819418204182141822418234182441825418264182741828418294183041831418324183341834418354183641837418384183941840418414184241843418444184541846418474184841849418504185141852418534185441855418564185741858418594186041861418624186341864418654186641867418684186941870418714187241873418744187541876418774187841879418804188141882418834188441885418864188741888418894189041891418924189341894418954189641897418984189941900419014190241903419044190541906419074190841909419104191141912419134191441915419164191741918419194192041921419224192341924419254192641927419284192941930419314193241933419344193541936419374193841939419404194141942419434194441945419464194741948419494195041951419524195341954419554195641957419584195941960419614196241963419644196541966419674196841969419704197141972419734197441975419764197741978419794198041981419824198341984419854198641987419884198941990419914199241993419944199541996419974199841999420004200142002420034200442005420064200742008420094201042011420124201342014420154201642017420184201942020420214202242023420244202542026420274202842029420304203142032420334203442035420364203742038420394204042041420424204342044420454204642047420484204942050420514205242053420544205542056420574205842059420604206142062420634206442065420664206742068420694207042071420724207342074420754207642077420784207942080420814208242083420844208542086420874208842089420904209142092420934209442095420964209742098420994210042101421024210342104421054210642107421084210942110421114211242113421144211542116421174211842119421204212142122421234212442125421264212742128421294213042131421324213342134421354213642137421384213942140421414214242143421444214542146421474214842149421504215142152421534215442155421564215742158421594216042161421624216342164421654216642167421684216942170421714217242173421744217542176421774217842179421804218142182421834218442185421864218742188421894219042191421924219342194421954219642197421984219942200422014220242203422044220542206422074220842209422104221142212422134221442215422164221742218422194222042221422224222342224422254222642227422284222942230422314223242233422344223542236422374223842239422404224142242422434224442245422464224742248422494225042251422524225342254422554225642257422584225942260422614226242263422644226542266422674226842269422704227142272422734227442275422764227742278422794228042281422824228342284422854228642287422884228942290422914229242293422944229542296422974229842299423004230142302423034230442305423064230742308423094231042311423124231342314423154231642317423184231942320423214232242323423244232542326423274232842329423304233142332423334233442335423364233742338423394234042341423424234342344423454234642347423484234942350423514235242353423544235542356423574235842359423604236142362423634236442365423664236742368423694237042371423724237342374423754237642377423784237942380423814238242383423844238542386423874238842389423904239142392423934239442395423964239742398423994240042401424024240342404424054240642407424084240942410424114241242413424144241542416424174241842419424204242142422424234242442425424264242742428424294243042431424324243342434424354243642437424384243942440424414244242443424444244542446424474244842449424504245142452424534245442455424564245742458424594246042461424624246342464424654246642467424684246942470424714247242473424744247542476424774247842479424804248142482424834248442485424864248742488424894249042491424924249342494424954249642497424984249942500425014250242503425044250542506425074250842509425104251142512425134251442515425164251742518425194252042521425224252342524425254252642527425284252942530425314253242533425344253542536425374253842539425404254142542425434254442545425464254742548425494255042551425524255342554425554255642557425584255942560425614256242563425644256542566425674256842569425704257142572425734257442575425764257742578425794258042581425824258342584425854258642587425884258942590425914259242593425944259542596425974259842599426004260142602426034260442605426064260742608426094261042611426124261342614426154261642617426184261942620426214262242623426244262542626426274262842629426304263142632426334263442635426364263742638426394264042641426424264342644426454264642647426484264942650426514265242653426544265542656426574265842659426604266142662426634266442665426664266742668426694267042671426724267342674426754267642677426784267942680426814268242683426844268542686426874268842689426904269142692426934269442695426964269742698426994270042701427024270342704427054270642707427084270942710427114271242713427144271542716427174271842719427204272142722427234272442725427264272742728427294273042731427324273342734427354273642737427384273942740427414274242743427444274542746427474274842749427504275142752427534275442755427564275742758427594276042761427624276342764427654276642767427684276942770427714277242773427744277542776427774277842779427804278142782427834278442785427864278742788427894279042791427924279342794427954279642797427984279942800428014280242803428044280542806428074280842809428104281142812428134281442815428164281742818428194282042821428224282342824428254282642827428284282942830428314283242833428344283542836428374283842839428404284142842428434284442845428464284742848428494285042851428524285342854428554285642857428584285942860428614286242863428644286542866428674286842869428704287142872428734287442875428764287742878428794288042881428824288342884428854288642887428884288942890428914289242893428944289542896428974289842899429004290142902429034290442905429064290742908429094291042911429124291342914429154291642917429184291942920429214292242923429244292542926429274292842929429304293142932429334293442935429364293742938429394294042941429424294342944429454294642947429484294942950429514295242953429544295542956429574295842959429604296142962429634296442965429664296742968429694297042971429724297342974429754297642977429784297942980429814298242983429844298542986429874298842989429904299142992429934299442995429964299742998429994300043001430024300343004430054300643007430084300943010430114301243013430144301543016430174301843019430204302143022430234302443025430264302743028430294303043031430324303343034430354303643037430384303943040430414304243043430444304543046430474304843049430504305143052430534305443055430564305743058430594306043061430624306343064430654306643067430684306943070430714307243073430744307543076430774307843079430804308143082430834308443085430864308743088430894309043091430924309343094430954309643097430984309943100431014310243103431044310543106431074310843109431104311143112431134311443115431164311743118431194312043121431224312343124431254312643127431284312943130431314313243133431344313543136431374313843139431404314143142431434314443145431464314743148431494315043151431524315343154431554315643157431584315943160431614316243163431644316543166431674316843169431704317143172431734317443175431764317743178431794318043181431824318343184431854318643187431884318943190431914319243193431944319543196431974319843199432004320143202432034320443205432064320743208432094321043211432124321343214432154321643217432184321943220432214322243223432244322543226432274322843229432304323143232432334323443235432364323743238432394324043241432424324343244432454324643247432484324943250432514325243253432544325543256432574325843259432604326143262432634326443265432664326743268432694327043271432724327343274432754327643277432784327943280432814328243283432844328543286432874328843289432904329143292432934329443295432964329743298432994330043301433024330343304433054330643307433084330943310433114331243313433144331543316433174331843319433204332143322433234332443325433264332743328433294333043331433324333343334433354333643337433384333943340433414334243343433444334543346433474334843349433504335143352433534335443355433564335743358433594336043361433624336343364433654336643367433684336943370433714337243373433744337543376433774337843379433804338143382433834338443385433864338743388433894339043391433924339343394433954339643397433984339943400434014340243403434044340543406434074340843409434104341143412434134341443415434164341743418434194342043421434224342343424434254342643427434284342943430434314343243433434344343543436434374343843439434404344143442434434344443445434464344743448434494345043451434524345343454434554345643457434584345943460434614346243463434644346543466434674346843469434704347143472434734347443475434764347743478434794348043481434824348343484434854348643487434884348943490434914349243493434944349543496434974349843499435004350143502435034350443505435064350743508435094351043511435124351343514435154351643517435184351943520435214352243523435244352543526435274352843529435304353143532435334353443535435364353743538435394354043541435424354343544435454354643547435484354943550435514355243553435544355543556435574355843559435604356143562435634356443565435664356743568435694357043571435724357343574435754357643577435784357943580435814358243583435844358543586435874358843589435904359143592435934359443595435964359743598435994360043601436024360343604436054360643607436084360943610436114361243613436144361543616436174361843619436204362143622436234362443625436264362743628436294363043631436324363343634436354363643637436384363943640436414364243643436444364543646436474364843649436504365143652436534365443655436564365743658436594366043661436624366343664436654366643667436684366943670436714367243673436744367543676436774367843679436804368143682436834368443685436864368743688436894369043691436924369343694436954369643697436984369943700437014370243703437044370543706437074370843709437104371143712437134371443715437164371743718437194372043721437224372343724437254372643727437284372943730437314373243733437344373543736437374373843739437404374143742437434374443745437464374743748437494375043751437524375343754437554375643757437584375943760437614376243763437644376543766437674376843769437704377143772437734377443775437764377743778437794378043781437824378343784437854378643787437884378943790437914379243793437944379543796437974379843799438004380143802438034380443805438064380743808438094381043811438124381343814438154381643817438184381943820438214382243823438244382543826438274382843829438304383143832438334383443835438364383743838438394384043841438424384343844438454384643847438484384943850438514385243853438544385543856438574385843859438604386143862438634386443865438664386743868438694387043871438724387343874438754387643877438784387943880438814388243883438844388543886438874388843889438904389143892438934389443895438964389743898438994390043901439024390343904439054390643907439084390943910439114391243913439144391543916439174391843919439204392143922439234392443925439264392743928439294393043931439324393343934439354393643937439384393943940439414394243943439444394543946439474394843949439504395143952439534395443955439564395743958439594396043961439624396343964439654396643967439684396943970439714397243973439744397543976439774397843979439804398143982439834398443985439864398743988439894399043991439924399343994439954399643997439984399944000440014400244003440044400544006440074400844009440104401144012440134401444015440164401744018440194402044021440224402344024440254402644027440284402944030440314403244033440344403544036440374403844039440404404144042440434404444045440464404744048440494405044051440524405344054440554405644057440584405944060440614406244063440644406544066440674406844069440704407144072440734407444075440764407744078440794408044081440824408344084440854408644087440884408944090440914409244093440944409544096440974409844099441004410144102441034410444105441064410744108441094411044111441124411344114441154411644117441184411944120441214412244123441244412544126441274412844129441304413144132441334413444135441364413744138441394414044141441424414344144441454414644147441484414944150441514415244153441544415544156441574415844159441604416144162441634416444165441664416744168441694417044171441724417344174441754417644177441784417944180441814418244183441844418544186441874418844189441904419144192441934419444195441964419744198441994420044201442024420344204442054420644207442084420944210442114421244213442144421544216442174421844219442204422144222442234422444225442264422744228442294423044231442324423344234442354423644237442384423944240442414424244243442444424544246442474424844249442504425144252442534425444255442564425744258442594426044261442624426344264442654426644267442684426944270442714427244273442744427544276442774427844279442804428144282442834428444285442864428744288442894429044291442924429344294442954429644297442984429944300443014430244303443044430544306443074430844309443104431144312443134431444315443164431744318443194432044321443224432344324443254432644327443284432944330443314433244333443344433544336443374433844339443404434144342443434434444345443464434744348443494435044351443524435344354443554435644357443584435944360443614436244363443644436544366443674436844369443704437144372443734437444375443764437744378443794438044381443824438344384443854438644387443884438944390443914439244393443944439544396443974439844399444004440144402444034440444405444064440744408444094441044411444124441344414444154441644417444184441944420444214442244423444244442544426444274442844429444304443144432444334443444435444364443744438444394444044441444424444344444444454444644447444484444944450444514445244453444544445544456444574445844459444604446144462444634446444465444664446744468444694447044471444724447344474444754447644477444784447944480444814448244483444844448544486444874448844489444904449144492444934449444495444964449744498444994450044501445024450344504445054450644507445084450944510445114451244513445144451544516445174451844519445204452144522445234452444525445264452744528445294453044531445324453344534445354453644537445384453944540445414454244543445444454544546445474454844549445504455144552445534455444555445564455744558445594456044561445624456344564445654456644567445684456944570445714457244573445744457544576445774457844579445804458144582445834458444585445864458744588445894459044591445924459344594445954459644597445984459944600446014460244603446044460544606446074460844609446104461144612446134461444615446164461744618446194462044621446224462344624446254462644627446284462944630446314463244633446344463544636446374463844639446404464144642446434464444645446464464744648446494465044651446524465344654446554465644657446584465944660446614466244663446644466544666446674466844669446704467144672446734467444675446764467744678446794468044681446824468344684446854468644687446884468944690446914469244693446944469544696446974469844699447004470144702447034470444705447064470744708447094471044711447124471344714447154471644717447184471944720447214472244723447244472544726447274472844729447304473144732447334473444735447364473744738447394474044741447424474344744447454474644747447484474944750447514475244753447544475544756447574475844759447604476144762447634476444765447664476744768447694477044771447724477344774447754477644777447784477944780447814478244783447844478544786447874478844789447904479144792447934479444795447964479744798447994480044801448024480344804448054480644807448084480944810448114481244813448144481544816448174481844819448204482144822448234482444825448264482744828448294483044831448324483344834448354483644837448384483944840448414484244843448444484544846448474484844849448504485144852448534485444855448564485744858448594486044861448624486344864448654486644867448684486944870448714487244873448744487544876448774487844879448804488144882448834488444885448864488744888448894489044891448924489344894448954489644897448984489944900449014490244903449044490544906449074490844909449104491144912449134491444915449164491744918449194492044921449224492344924449254492644927449284492944930449314493244933449344493544936449374493844939449404494144942449434494444945449464494744948449494495044951449524495344954449554495644957449584495944960449614496244963449644496544966449674496844969449704497144972449734497444975449764497744978449794498044981449824498344984449854498644987449884498944990449914499244993449944499544996449974499844999450004500145002450034500445005450064500745008450094501045011450124501345014450154501645017450184501945020450214502245023450244502545026450274502845029450304503145032450334503445035450364503745038450394504045041450424504345044450454504645047450484504945050450514505245053450544505545056450574505845059450604506145062450634506445065450664506745068450694507045071450724507345074450754507645077450784507945080450814508245083450844508545086450874508845089450904509145092450934509445095450964509745098450994510045101451024510345104451054510645107451084510945110451114511245113451144511545116451174511845119451204512145122451234512445125451264512745128451294513045131451324513345134451354513645137451384513945140451414514245143451444514545146451474514845149451504515145152451534515445155451564515745158451594516045161451624516345164451654516645167451684516945170451714517245173451744517545176451774517845179451804518145182451834518445185451864518745188451894519045191451924519345194451954519645197451984519945200452014520245203452044520545206452074520845209452104521145212452134521445215452164521745218452194522045221452224522345224452254522645227452284522945230452314523245233452344523545236452374523845239452404524145242452434524445245452464524745248452494525045251452524525345254452554525645257452584525945260452614526245263452644526545266452674526845269452704527145272452734527445275452764527745278452794528045281452824528345284452854528645287452884528945290452914529245293452944529545296452974529845299453004530145302453034530445305453064530745308453094531045311453124531345314453154531645317453184531945320453214532245323453244532545326453274532845329453304533145332453334533445335453364533745338453394534045341453424534345344453454534645347453484534945350453514535245353453544535545356453574535845359453604536145362453634536445365453664536745368453694537045371453724537345374453754537645377453784537945380453814538245383453844538545386453874538845389453904539145392453934539445395453964539745398453994540045401454024540345404454054540645407454084540945410454114541245413454144541545416454174541845419454204542145422454234542445425454264542745428454294543045431454324543345434454354543645437454384543945440454414544245443454444544545446454474544845449454504545145452454534545445455454564545745458454594546045461454624546345464454654546645467454684546945470454714547245473454744547545476454774547845479454804548145482454834548445485454864548745488454894549045491454924549345494454954549645497454984549945500455014550245503455044550545506455074550845509455104551145512455134551445515455164551745518455194552045521455224552345524455254552645527455284552945530455314553245533455344553545536455374553845539455404554145542455434554445545455464554745548455494555045551455524555345554455554555645557455584555945560455614556245563455644556545566455674556845569455704557145572455734557445575455764557745578455794558045581455824558345584455854558645587455884558945590455914559245593455944559545596455974559845599456004560145602456034560445605456064560745608456094561045611456124561345614456154561645617456184561945620456214562245623456244562545626456274562845629456304563145632456334563445635456364563745638456394564045641456424564345644456454564645647456484564945650456514565245653456544565545656456574565845659456604566145662456634566445665456664566745668456694567045671456724567345674456754567645677456784567945680456814568245683456844568545686456874568845689456904569145692456934569445695456964569745698456994570045701457024570345704457054570645707457084570945710457114571245713457144571545716457174571845719457204572145722457234572445725457264572745728457294573045731457324573345734457354573645737457384573945740457414574245743457444574545746457474574845749457504575145752457534575445755457564575745758457594576045761457624576345764457654576645767457684576945770457714577245773457744577545776457774577845779457804578145782457834578445785457864578745788457894579045791457924579345794457954579645797457984579945800458014580245803458044580545806458074580845809458104581145812458134581445815458164581745818458194582045821458224582345824458254582645827458284582945830458314583245833458344583545836458374583845839458404584145842458434584445845458464584745848458494585045851458524585345854458554585645857458584585945860458614586245863458644586545866458674586845869458704587145872458734587445875458764587745878458794588045881458824588345884458854588645887458884588945890458914589245893458944589545896458974589845899459004590145902459034590445905459064590745908459094591045911459124591345914459154591645917459184591945920459214592245923459244592545926459274592845929459304593145932459334593445935459364593745938459394594045941459424594345944459454594645947459484594945950459514595245953459544595545956459574595845959459604596145962459634596445965459664596745968459694597045971459724597345974459754597645977459784597945980459814598245983459844598545986459874598845989459904599145992459934599445995459964599745998459994600046001460024600346004460054600646007460084600946010460114601246013460144601546016460174601846019460204602146022460234602446025460264602746028460294603046031460324603346034460354603646037460384603946040460414604246043460444604546046460474604846049460504605146052460534605446055460564605746058460594606046061460624606346064460654606646067460684606946070460714607246073460744607546076460774607846079460804608146082460834608446085460864608746088460894609046091460924609346094460954609646097460984609946100461014610246103461044610546106461074610846109461104611146112461134611446115461164611746118461194612046121461224612346124461254612646127461284612946130461314613246133461344613546136461374613846139461404614146142461434614446145461464614746148461494615046151461524615346154461554615646157461584615946160461614616246163461644616546166461674616846169461704617146172461734617446175461764617746178461794618046181461824618346184461854618646187461884618946190461914619246193461944619546196461974619846199462004620146202462034620446205462064620746208462094621046211462124621346214462154621646217462184621946220462214622246223462244622546226462274622846229462304623146232462334623446235462364623746238462394624046241462424624346244462454624646247462484624946250462514625246253462544625546256462574625846259462604626146262462634626446265462664626746268462694627046271462724627346274462754627646277462784627946280462814628246283462844628546286462874628846289462904629146292462934629446295462964629746298462994630046301463024630346304463054630646307463084630946310463114631246313463144631546316463174631846319463204632146322463234632446325463264632746328463294633046331463324633346334463354633646337463384633946340463414634246343463444634546346463474634846349463504635146352463534635446355463564635746358463594636046361463624636346364463654636646367463684636946370463714637246373463744637546376463774637846379463804638146382463834638446385463864638746388463894639046391463924639346394463954639646397463984639946400464014640246403464044640546406464074640846409464104641146412464134641446415464164641746418464194642046421464224642346424464254642646427464284642946430464314643246433464344643546436464374643846439464404644146442464434644446445464464644746448464494645046451464524645346454464554645646457464584645946460464614646246463464644646546466464674646846469464704647146472464734647446475464764647746478464794648046481464824648346484464854648646487464884648946490464914649246493464944649546496464974649846499465004650146502465034650446505465064650746508465094651046511465124651346514465154651646517465184651946520465214652246523465244652546526465274652846529465304653146532465334653446535465364653746538465394654046541465424654346544465454654646547465484654946550465514655246553465544655546556465574655846559465604656146562465634656446565465664656746568465694657046571465724657346574465754657646577465784657946580465814658246583465844658546586465874658846589465904659146592465934659446595465964659746598465994660046601466024660346604466054660646607466084660946610466114661246613466144661546616466174661846619466204662146622466234662446625466264662746628466294663046631466324663346634466354663646637466384663946640466414664246643466444664546646466474664846649466504665146652466534665446655466564665746658466594666046661466624666346664466654666646667466684666946670466714667246673466744667546676466774667846679466804668146682466834668446685466864668746688466894669046691466924669346694466954669646697466984669946700467014670246703467044670546706467074670846709467104671146712467134671446715467164671746718467194672046721467224672346724467254672646727467284672946730467314673246733467344673546736467374673846739467404674146742467434674446745467464674746748467494675046751467524675346754467554675646757467584675946760467614676246763467644676546766467674676846769467704677146772467734677446775467764677746778467794678046781467824678346784467854678646787467884678946790467914679246793467944679546796467974679846799468004680146802468034680446805468064680746808468094681046811468124681346814468154681646817468184681946820468214682246823468244682546826468274682846829468304683146832468334683446835468364683746838468394684046841468424684346844468454684646847468484684946850468514685246853468544685546856468574685846859468604686146862468634686446865468664686746868468694687046871468724687346874468754687646877468784687946880468814688246883468844688546886468874688846889468904689146892468934689446895468964689746898468994690046901469024690346904469054690646907469084690946910469114691246913469144691546916469174691846919469204692146922469234692446925469264692746928469294693046931469324693346934469354693646937469384693946940469414694246943469444694546946469474694846949469504695146952469534695446955469564695746958469594696046961469624696346964469654696646967469684696946970469714697246973469744697546976469774697846979469804698146982469834698446985469864698746988469894699046991469924699346994469954699646997469984699947000470014700247003470044700547006470074700847009470104701147012470134701447015470164701747018470194702047021470224702347024470254702647027470284702947030470314703247033470344703547036470374703847039470404704147042470434704447045470464704747048470494705047051470524705347054470554705647057470584705947060470614706247063470644706547066470674706847069470704707147072470734707447075470764707747078470794708047081470824708347084470854708647087470884708947090470914709247093470944709547096470974709847099471004710147102471034710447105471064710747108471094711047111471124711347114471154711647117471184711947120471214712247123471244712547126471274712847129471304713147132471334713447135471364713747138471394714047141471424714347144471454714647147471484714947150471514715247153471544715547156471574715847159471604716147162471634716447165471664716747168471694717047171471724717347174471754717647177471784717947180471814718247183471844718547186471874718847189471904719147192471934719447195471964719747198471994720047201472024720347204472054720647207472084720947210472114721247213472144721547216472174721847219472204722147222472234722447225472264722747228472294723047231472324723347234472354723647237472384723947240472414724247243472444724547246472474724847249472504725147252472534725447255472564725747258472594726047261472624726347264472654726647267472684726947270472714727247273472744727547276472774727847279472804728147282472834728447285472864728747288472894729047291472924729347294472954729647297472984729947300473014730247303473044730547306473074730847309473104731147312473134731447315473164731747318473194732047321473224732347324473254732647327473284732947330473314733247333473344733547336473374733847339473404734147342473434734447345473464734747348473494735047351473524735347354473554735647357473584735947360473614736247363473644736547366473674736847369473704737147372473734737447375473764737747378473794738047381473824738347384473854738647387473884738947390473914739247393473944739547396473974739847399474004740147402474034740447405474064740747408474094741047411474124741347414474154741647417474184741947420474214742247423474244742547426474274742847429474304743147432474334743447435474364743747438474394744047441474424744347444474454744647447474484744947450474514745247453474544745547456474574745847459474604746147462474634746447465474664746747468474694747047471474724747347474474754747647477474784747947480474814748247483474844748547486474874748847489474904749147492474934749447495474964749747498474994750047501475024750347504475054750647507475084750947510475114751247513475144751547516475174751847519475204752147522475234752447525475264752747528475294753047531475324753347534475354753647537475384753947540475414754247543475444754547546475474754847549475504755147552475534755447555475564755747558475594756047561475624756347564475654756647567475684756947570475714757247573475744757547576475774757847579475804758147582475834758447585475864758747588475894759047591475924759347594475954759647597475984759947600476014760247603476044760547606476074760847609476104761147612476134761447615476164761747618476194762047621476224762347624476254762647627476284762947630476314763247633476344763547636476374763847639476404764147642476434764447645476464764747648476494765047651476524765347654476554765647657476584765947660476614766247663476644766547666476674766847669476704767147672476734767447675476764767747678476794768047681476824768347684476854768647687476884768947690476914769247693476944769547696476974769847699477004770147702477034770447705477064770747708477094771047711477124771347714477154771647717477184771947720477214772247723477244772547726477274772847729477304773147732477334773447735477364773747738477394774047741477424774347744477454774647747477484774947750477514775247753477544775547756477574775847759477604776147762477634776447765477664776747768477694777047771477724777347774477754777647777477784777947780477814778247783477844778547786477874778847789477904779147792477934779447795477964779747798477994780047801478024780347804478054780647807478084780947810478114781247813478144781547816478174781847819478204782147822478234782447825478264782747828478294783047831478324783347834478354783647837478384783947840478414784247843478444784547846478474784847849478504785147852478534785447855478564785747858478594786047861478624786347864478654786647867478684786947870478714787247873478744787547876478774787847879478804788147882478834788447885478864788747888478894789047891478924789347894478954789647897478984789947900479014790247903479044790547906479074790847909479104791147912479134791447915479164791747918479194792047921479224792347924479254792647927479284792947930479314793247933479344793547936479374793847939479404794147942479434794447945479464794747948479494795047951479524795347954479554795647957479584795947960479614796247963479644796547966479674796847969479704797147972479734797447975479764797747978479794798047981479824798347984479854798647987479884798947990479914799247993479944799547996479974799847999480004800148002480034800448005480064800748008480094801048011480124801348014480154801648017480184801948020480214802248023480244802548026480274802848029480304803148032480334803448035480364803748038480394804048041480424804348044480454804648047480484804948050480514805248053480544805548056480574805848059480604806148062480634806448065480664806748068480694807048071480724807348074480754807648077480784807948080480814808248083480844808548086480874808848089480904809148092480934809448095480964809748098480994810048101481024810348104481054810648107481084810948110481114811248113481144811548116481174811848119481204812148122481234812448125481264812748128481294813048131481324813348134481354813648137481384813948140481414814248143481444814548146481474814848149481504815148152481534815448155481564815748158481594816048161481624816348164481654816648167481684816948170481714817248173481744817548176481774817848179481804818148182481834818448185481864818748188481894819048191481924819348194481954819648197481984819948200482014820248203482044820548206482074820848209482104821148212482134821448215482164821748218482194822048221482224822348224482254822648227482284822948230482314823248233482344823548236482374823848239482404824148242482434824448245482464824748248482494825048251482524825348254482554825648257482584825948260482614826248263482644826548266482674826848269482704827148272482734827448275482764827748278482794828048281482824828348284482854828648287482884828948290482914829248293482944829548296482974829848299483004830148302483034830448305483064830748308483094831048311483124831348314483154831648317483184831948320483214832248323483244832548326483274832848329483304833148332483334833448335483364833748338483394834048341483424834348344483454834648347483484834948350483514835248353483544835548356483574835848359483604836148362483634836448365483664836748368483694837048371483724837348374483754837648377483784837948380483814838248383483844838548386483874838848389483904839148392483934839448395483964839748398483994840048401484024840348404484054840648407484084840948410484114841248413484144841548416484174841848419484204842148422484234842448425484264842748428484294843048431484324843348434484354843648437484384843948440484414844248443484444844548446484474844848449484504845148452484534845448455484564845748458484594846048461484624846348464484654846648467484684846948470484714847248473484744847548476484774847848479484804848148482484834848448485484864848748488484894849048491484924849348494484954849648497484984849948500485014850248503485044850548506485074850848509485104851148512485134851448515485164851748518485194852048521485224852348524485254852648527485284852948530485314853248533485344853548536485374853848539485404854148542485434854448545485464854748548485494855048551485524855348554485554855648557485584855948560485614856248563485644856548566485674856848569485704857148572485734857448575485764857748578485794858048581485824858348584485854858648587485884858948590485914859248593485944859548596485974859848599486004860148602486034860448605486064860748608486094861048611486124861348614486154861648617486184861948620486214862248623486244862548626486274862848629486304863148632486334863448635486364863748638486394864048641486424864348644486454864648647486484864948650486514865248653486544865548656486574865848659486604866148662486634866448665486664866748668486694867048671486724867348674486754867648677486784867948680486814868248683486844868548686486874868848689486904869148692486934869448695486964869748698486994870048701487024870348704487054870648707487084870948710487114871248713487144871548716487174871848719487204872148722487234872448725487264872748728487294873048731487324873348734487354873648737487384873948740487414874248743487444874548746487474874848749487504875148752487534875448755487564875748758487594876048761487624876348764487654876648767487684876948770487714877248773487744877548776487774877848779487804878148782487834878448785487864878748788487894879048791487924879348794487954879648797487984879948800488014880248803488044880548806488074880848809488104881148812488134881448815488164881748818488194882048821488224882348824488254882648827488284882948830488314883248833488344883548836488374883848839488404884148842488434884448845488464884748848488494885048851488524885348854488554885648857488584885948860488614886248863488644886548866488674886848869488704887148872488734887448875488764887748878488794888048881488824888348884488854888648887488884888948890488914889248893488944889548896488974889848899489004890148902489034890448905489064890748908489094891048911489124891348914489154891648917489184891948920489214892248923489244892548926489274892848929489304893148932489334893448935489364893748938489394894048941489424894348944489454894648947489484894948950489514895248953489544895548956489574895848959489604896148962489634896448965489664896748968489694897048971489724897348974489754897648977489784897948980489814898248983489844898548986489874898848989489904899148992489934899448995489964899748998489994900049001490024900349004490054900649007490084900949010490114901249013490144901549016490174901849019490204902149022490234902449025490264902749028490294903049031490324903349034490354903649037490384903949040490414904249043490444904549046490474904849049490504905149052490534905449055490564905749058490594906049061490624906349064490654906649067490684906949070490714907249073490744907549076490774907849079490804908149082490834908449085490864908749088490894909049091490924909349094490954909649097490984909949100491014910249103491044910549106491074910849109491104911149112491134911449115491164911749118491194912049121491224912349124491254912649127491284912949130491314913249133491344913549136491374913849139491404914149142491434914449145491464914749148491494915049151491524915349154491554915649157491584915949160491614916249163491644916549166491674916849169491704917149172491734917449175491764917749178491794918049181491824918349184491854918649187491884918949190491914919249193491944919549196491974919849199492004920149202492034920449205492064920749208492094921049211492124921349214492154921649217492184921949220492214922249223492244922549226492274922849229492304923149232492334923449235492364923749238492394924049241492424924349244492454924649247492484924949250492514925249253492544925549256492574925849259492604926149262492634926449265492664926749268492694927049271492724927349274492754927649277492784927949280492814928249283492844928549286492874928849289492904929149292492934929449295492964929749298492994930049301493024930349304493054930649307493084930949310493114931249313493144931549316493174931849319493204932149322493234932449325493264932749328493294933049331493324933349334493354933649337493384933949340493414934249343493444934549346493474934849349493504935149352493534935449355493564935749358493594936049361493624936349364493654936649367493684936949370493714937249373493744937549376493774937849379493804938149382493834938449385493864938749388493894939049391493924939349394493954939649397493984939949400494014940249403494044940549406494074940849409494104941149412494134941449415494164941749418494194942049421494224942349424494254942649427494284942949430494314943249433494344943549436494374943849439494404944149442494434944449445494464944749448494494945049451494524945349454494554945649457494584945949460494614946249463494644946549466494674946849469494704947149472494734947449475494764947749478494794948049481494824948349484494854948649487494884948949490494914949249493494944949549496494974949849499495004950149502495034950449505495064950749508495094951049511495124951349514495154951649517495184951949520495214952249523495244952549526495274952849529495304953149532495334953449535495364953749538495394954049541495424954349544495454954649547495484954949550495514955249553495544955549556495574955849559495604956149562495634956449565495664956749568495694957049571495724957349574495754957649577495784957949580495814958249583495844958549586495874958849589495904959149592495934959449595495964959749598495994960049601496024960349604496054960649607496084960949610496114961249613496144961549616496174961849619496204962149622496234962449625496264962749628496294963049631496324963349634496354963649637496384963949640496414964249643496444964549646496474964849649496504965149652496534965449655496564965749658496594966049661496624966349664496654966649667496684966949670496714967249673496744967549676496774967849679496804968149682496834968449685496864968749688496894969049691496924969349694496954969649697496984969949700497014970249703497044970549706497074970849709497104971149712497134971449715497164971749718497194972049721497224972349724497254972649727497284972949730497314973249733497344973549736497374973849739497404974149742497434974449745497464974749748497494975049751497524975349754497554975649757497584975949760497614976249763497644976549766497674976849769497704977149772497734977449775497764977749778497794978049781497824978349784497854978649787497884978949790497914979249793497944979549796497974979849799498004980149802498034980449805498064980749808498094981049811498124981349814498154981649817498184981949820498214982249823498244982549826498274982849829498304983149832498334983449835498364983749838498394984049841498424984349844498454984649847498484984949850498514985249853498544985549856498574985849859498604986149862498634986449865498664986749868498694987049871498724987349874498754987649877498784987949880498814988249883498844988549886498874988849889498904989149892498934989449895498964989749898498994990049901499024990349904499054990649907499084990949910499114991249913499144991549916499174991849919499204992149922499234992449925499264992749928499294993049931499324993349934499354993649937499384993949940499414994249943499444994549946499474994849949499504995149952499534995449955499564995749958499594996049961499624996349964499654996649967499684996949970499714997249973499744997549976499774997849979499804998149982499834998449985499864998749988499894999049991499924999349994499954999649997499984999950000500015000250003500045000550006500075000850009500105001150012500135001450015500165001750018500195002050021500225002350024500255002650027500285002950030500315003250033500345003550036500375003850039500405004150042500435004450045500465004750048500495005050051500525005350054500555005650057500585005950060500615006250063500645006550066500675006850069500705007150072500735007450075500765007750078500795008050081500825008350084500855008650087500885008950090500915009250093500945009550096500975009850099501005010150102501035010450105501065010750108501095011050111501125011350114501155011650117501185011950120501215012250123501245012550126501275012850129501305013150132501335013450135501365013750138501395014050141501425014350144501455014650147501485014950150501515015250153501545015550156501575015850159501605016150162501635016450165501665016750168501695017050171501725017350174501755017650177501785017950180501815018250183501845018550186501875018850189501905019150192501935019450195501965019750198501995020050201502025020350204502055020650207502085020950210502115021250213502145021550216502175021850219502205022150222502235022450225502265022750228502295023050231502325023350234502355023650237502385023950240502415024250243502445024550246502475024850249502505025150252502535025450255502565025750258502595026050261502625026350264502655026650267502685026950270502715027250273502745027550276502775027850279502805028150282502835028450285502865028750288502895029050291502925029350294502955029650297502985029950300503015030250303503045030550306503075030850309503105031150312503135031450315503165031750318503195032050321503225032350324503255032650327503285032950330503315033250333503345033550336503375033850339503405034150342503435034450345503465034750348503495035050351503525035350354503555035650357503585035950360503615036250363503645036550366503675036850369503705037150372503735037450375503765037750378503795038050381503825038350384503855038650387503885038950390503915039250393503945039550396503975039850399504005040150402504035040450405504065040750408504095041050411504125041350414504155041650417504185041950420504215042250423504245042550426504275042850429504305043150432504335043450435504365043750438504395044050441504425044350444504455044650447504485044950450504515045250453504545045550456504575045850459504605046150462504635046450465504665046750468504695047050471504725047350474504755047650477504785047950480504815048250483504845048550486504875048850489504905049150492504935049450495504965049750498504995050050501505025050350504505055050650507505085050950510505115051250513505145051550516505175051850519505205052150522505235052450525505265052750528505295053050531505325053350534505355053650537505385053950540505415054250543505445054550546505475054850549505505055150552505535055450555505565055750558505595056050561505625056350564505655056650567505685056950570505715057250573505745057550576505775057850579505805058150582505835058450585505865058750588505895059050591505925059350594505955059650597505985059950600506015060250603506045060550606506075060850609506105061150612506135061450615506165061750618506195062050621506225062350624506255062650627506285062950630506315063250633506345063550636506375063850639506405064150642506435064450645506465064750648506495065050651506525065350654506555065650657506585065950660506615066250663506645066550666506675066850669506705067150672506735067450675506765067750678506795068050681506825068350684506855068650687506885068950690506915069250693506945069550696506975069850699507005070150702507035070450705507065070750708507095071050711507125071350714507155071650717507185071950720507215072250723507245072550726507275072850729507305073150732507335073450735507365073750738507395074050741507425074350744507455074650747507485074950750507515075250753507545075550756507575075850759507605076150762507635076450765507665076750768507695077050771507725077350774507755077650777507785077950780507815078250783507845078550786507875078850789507905079150792507935079450795507965079750798507995080050801508025080350804508055080650807508085080950810508115081250813508145081550816508175081850819508205082150822508235082450825508265082750828508295083050831508325083350834508355083650837508385083950840508415084250843508445084550846508475084850849508505085150852508535085450855508565085750858508595086050861508625086350864508655086650867508685086950870508715087250873508745087550876508775087850879508805088150882508835088450885508865088750888508895089050891508925089350894508955089650897508985089950900509015090250903509045090550906509075090850909509105091150912509135091450915509165091750918509195092050921509225092350924509255092650927509285092950930509315093250933509345093550936509375093850939509405094150942509435094450945509465094750948509495095050951509525095350954509555095650957509585095950960509615096250963509645096550966509675096850969509705097150972509735097450975509765097750978509795098050981509825098350984509855098650987509885098950990509915099250993509945099550996509975099850999510005100151002510035100451005510065100751008510095101051011510125101351014510155101651017510185101951020510215102251023510245102551026510275102851029510305103151032510335103451035510365103751038510395104051041510425104351044510455104651047510485104951050510515105251053510545105551056510575105851059510605106151062510635106451065510665106751068510695107051071510725107351074510755107651077510785107951080510815108251083510845108551086510875108851089510905109151092510935109451095510965109751098510995110051101511025110351104511055110651107511085110951110511115111251113511145111551116511175111851119511205112151122511235112451125511265112751128511295113051131511325113351134511355113651137511385113951140511415114251143511445114551146511475114851149511505115151152511535115451155511565115751158511595116051161511625116351164511655116651167511685116951170511715117251173511745117551176511775117851179511805118151182511835118451185511865118751188511895119051191511925119351194511955119651197511985119951200512015120251203512045120551206512075120851209512105121151212512135121451215512165121751218512195122051221512225122351224512255122651227512285122951230512315123251233512345123551236512375123851239512405124151242512435124451245512465124751248512495125051251512525125351254512555125651257512585125951260512615126251263512645126551266512675126851269512705127151272512735127451275512765127751278512795128051281512825128351284512855128651287512885128951290512915129251293512945129551296512975129851299513005130151302513035130451305513065130751308513095131051311513125131351314513155131651317513185131951320513215132251323513245132551326513275132851329513305133151332513335133451335513365133751338513395134051341513425134351344513455134651347513485134951350513515135251353513545135551356513575135851359513605136151362513635136451365513665136751368513695137051371513725137351374513755137651377513785137951380513815138251383513845138551386513875138851389513905139151392513935139451395513965139751398513995140051401514025140351404514055140651407514085140951410514115141251413514145141551416514175141851419514205142151422514235142451425514265142751428514295143051431514325143351434514355143651437514385143951440514415144251443514445144551446514475144851449514505145151452514535145451455514565145751458514595146051461514625146351464514655146651467514685146951470514715147251473514745147551476514775147851479514805148151482514835148451485514865148751488514895149051491514925149351494514955149651497514985149951500515015150251503515045150551506515075150851509515105151151512515135151451515515165151751518515195152051521515225152351524515255152651527515285152951530515315153251533515345153551536515375153851539515405154151542515435154451545515465154751548515495155051551515525155351554515555155651557515585155951560515615156251563515645156551566515675156851569515705157151572515735157451575515765157751578515795158051581515825158351584515855158651587515885158951590515915159251593515945159551596515975159851599516005160151602516035160451605516065160751608516095161051611516125161351614516155161651617516185161951620516215162251623516245162551626516275162851629516305163151632516335163451635516365163751638516395164051641516425164351644516455164651647516485164951650516515165251653516545165551656516575165851659516605166151662516635166451665516665166751668516695167051671516725167351674516755167651677516785167951680516815168251683516845168551686516875168851689516905169151692516935169451695516965169751698516995170051701517025170351704517055170651707517085170951710517115171251713517145171551716517175171851719517205172151722517235172451725517265172751728517295173051731517325173351734517355173651737517385173951740517415174251743517445174551746517475174851749517505175151752517535175451755517565175751758517595176051761517625176351764517655176651767517685176951770517715177251773517745177551776517775177851779517805178151782517835178451785517865178751788517895179051791517925179351794517955179651797517985179951800518015180251803518045180551806518075180851809518105181151812518135181451815518165181751818518195182051821518225182351824518255182651827518285182951830518315183251833518345183551836518375183851839518405184151842518435184451845518465184751848518495185051851518525185351854518555185651857518585185951860518615186251863518645186551866518675186851869518705187151872518735187451875518765187751878518795188051881518825188351884518855188651887518885188951890518915189251893518945189551896518975189851899519005190151902519035190451905519065190751908519095191051911519125191351914519155191651917519185191951920519215192251923519245192551926519275192851929519305193151932519335193451935519365193751938519395194051941519425194351944519455194651947519485194951950519515195251953519545195551956519575195851959519605196151962519635196451965519665196751968519695197051971519725197351974519755197651977519785197951980519815198251983519845198551986519875198851989519905199151992519935199451995519965199751998519995200052001520025200352004520055200652007520085200952010520115201252013520145201552016520175201852019520205202152022520235202452025520265202752028520295203052031520325203352034520355203652037520385203952040520415204252043520445204552046520475204852049520505205152052520535205452055520565205752058520595206052061520625206352064520655206652067520685206952070520715207252073520745207552076520775207852079520805208152082520835208452085520865208752088520895209052091520925209352094520955209652097520985209952100521015210252103521045210552106521075210852109521105211152112521135211452115521165211752118521195212052121521225212352124521255212652127521285212952130521315213252133521345213552136521375213852139521405214152142521435214452145521465214752148521495215052151521525215352154521555215652157521585215952160521615216252163521645216552166521675216852169521705217152172521735217452175521765217752178521795218052181521825218352184521855218652187521885218952190521915219252193521945219552196521975219852199522005220152202522035220452205522065220752208522095221052211522125221352214522155221652217522185221952220522215222252223522245222552226522275222852229522305223152232522335223452235522365223752238522395224052241522425224352244522455224652247522485224952250522515225252253522545225552256522575225852259522605226152262522635226452265522665226752268522695227052271522725227352274522755227652277522785227952280522815228252283522845228552286522875228852289522905229152292522935229452295522965229752298522995230052301523025230352304523055230652307523085230952310523115231252313523145231552316523175231852319523205232152322523235232452325523265232752328523295233052331523325233352334523355233652337523385233952340523415234252343523445234552346523475234852349523505235152352523535235452355523565235752358523595236052361523625236352364523655236652367523685236952370523715237252373523745237552376523775237852379523805238152382523835238452385523865238752388523895239052391523925239352394523955239652397523985239952400524015240252403524045240552406524075240852409524105241152412524135241452415524165241752418524195242052421524225242352424524255242652427524285242952430524315243252433524345243552436524375243852439524405244152442524435244452445524465244752448524495245052451524525245352454524555245652457524585245952460524615246252463524645246552466524675246852469524705247152472524735247452475524765247752478524795248052481524825248352484524855248652487524885248952490524915249252493524945249552496524975249852499525005250152502525035250452505525065250752508525095251052511525125251352514525155251652517525185251952520525215252252523525245252552526525275252852529525305253152532525335253452535525365253752538525395254052541525425254352544525455254652547525485254952550525515255252553525545255552556525575255852559525605256152562525635256452565525665256752568525695257052571525725257352574525755257652577525785257952580525815258252583525845258552586525875258852589525905259152592525935259452595525965259752598525995260052601526025260352604526055260652607526085260952610526115261252613526145261552616526175261852619526205262152622526235262452625526265262752628526295263052631526325263352634526355263652637526385263952640526415264252643526445264552646526475264852649526505265152652526535265452655526565265752658526595266052661526625266352664526655266652667526685266952670526715267252673526745267552676526775267852679526805268152682526835268452685526865268752688526895269052691526925269352694526955269652697526985269952700527015270252703527045270552706527075270852709527105271152712527135271452715527165271752718527195272052721527225272352724527255272652727527285272952730527315273252733527345273552736527375273852739527405274152742527435274452745527465274752748527495275052751527525275352754527555275652757527585275952760527615276252763527645276552766527675276852769527705277152772527735277452775527765277752778527795278052781527825278352784527855278652787527885278952790527915279252793527945279552796527975279852799528005280152802528035280452805528065280752808528095281052811528125281352814528155281652817528185281952820528215282252823528245282552826528275282852829528305283152832528335283452835528365283752838528395284052841528425284352844528455284652847528485284952850528515285252853528545285552856528575285852859528605286152862528635286452865528665286752868528695287052871528725287352874528755287652877528785287952880528815288252883528845288552886528875288852889528905289152892528935289452895528965289752898528995290052901529025290352904529055290652907529085290952910529115291252913529145291552916529175291852919529205292152922529235292452925529265292752928529295293052931529325293352934529355293652937529385293952940529415294252943529445294552946529475294852949529505295152952529535295452955529565295752958529595296052961529625296352964529655296652967529685296952970529715297252973529745297552976529775297852979529805298152982529835298452985529865298752988529895299052991529925299352994529955299652997529985299953000530015300253003530045300553006530075300853009530105301153012530135301453015530165301753018530195302053021530225302353024530255302653027530285302953030530315303253033530345303553036530375303853039530405304153042530435304453045530465304753048530495305053051530525305353054530555305653057530585305953060530615306253063530645306553066530675306853069530705307153072530735307453075530765307753078530795308053081530825308353084530855308653087530885308953090530915309253093530945309553096530975309853099531005310153102531035310453105531065310753108531095311053111531125311353114531155311653117531185311953120531215312253123531245312553126531275312853129531305313153132531335313453135531365313753138531395314053141531425314353144531455314653147531485314953150531515315253153531545315553156531575315853159531605316153162531635316453165531665316753168531695317053171531725317353174531755317653177531785317953180531815318253183531845318553186531875318853189531905319153192531935319453195531965319753198531995320053201532025320353204532055320653207532085320953210532115321253213532145321553216532175321853219532205322153222532235322453225532265322753228532295323053231532325323353234532355323653237532385323953240532415324253243532445324553246532475324853249532505325153252532535325453255532565325753258532595326053261532625326353264532655326653267532685326953270532715327253273532745327553276532775327853279532805328153282532835328453285532865328753288532895329053291532925329353294532955329653297532985329953300533015330253303533045330553306533075330853309533105331153312533135331453315533165331753318533195332053321533225332353324533255332653327533285332953330533315333253333533345333553336533375333853339533405334153342533435334453345533465334753348533495335053351533525335353354533555335653357533585335953360533615336253363533645336553366533675336853369533705337153372533735337453375533765337753378533795338053381533825338353384533855338653387533885338953390533915339253393533945339553396533975339853399534005340153402534035340453405534065340753408534095341053411534125341353414534155341653417534185341953420534215342253423534245342553426534275342853429534305343153432534335343453435534365343753438534395344053441534425344353444534455344653447534485344953450534515345253453534545345553456534575345853459534605346153462534635346453465534665346753468534695347053471534725347353474534755347653477534785347953480534815348253483534845348553486534875348853489534905349153492534935349453495534965349753498534995350053501535025350353504535055350653507535085350953510535115351253513535145351553516535175351853519535205352153522535235352453525535265352753528535295353053531535325353353534535355353653537535385353953540535415354253543535445354553546535475354853549535505355153552535535355453555535565355753558535595356053561535625356353564535655356653567535685356953570535715357253573535745357553576535775357853579535805358153582535835358453585535865358753588535895359053591535925359353594535955359653597535985359953600536015360253603536045360553606536075360853609536105361153612536135361453615536165361753618536195362053621536225362353624536255362653627536285362953630536315363253633536345363553636536375363853639536405364153642536435364453645536465364753648536495365053651536525365353654536555365653657536585365953660536615366253663536645366553666536675366853669536705367153672536735367453675536765367753678536795368053681536825368353684536855368653687536885368953690536915369253693536945369553696536975369853699537005370153702537035370453705537065370753708537095371053711537125371353714537155371653717537185371953720537215372253723537245372553726537275372853729537305373153732537335373453735537365373753738537395374053741537425374353744537455374653747537485374953750537515375253753537545375553756537575375853759537605376153762537635376453765537665376753768537695377053771537725377353774537755377653777537785377953780537815378253783537845378553786537875378853789537905379153792537935379453795537965379753798537995380053801538025380353804538055380653807538085380953810538115381253813538145381553816538175381853819538205382153822538235382453825538265382753828538295383053831538325383353834538355383653837538385383953840538415384253843538445384553846538475384853849538505385153852538535385453855538565385753858538595386053861538625386353864538655386653867538685386953870538715387253873538745387553876538775387853879538805388153882538835388453885538865388753888538895389053891538925389353894538955389653897538985389953900539015390253903539045390553906539075390853909539105391153912539135391453915539165391753918539195392053921539225392353924539255392653927539285392953930539315393253933539345393553936539375393853939539405394153942539435394453945539465394753948539495395053951539525395353954539555395653957539585395953960539615396253963539645396553966539675396853969539705397153972539735397453975539765397753978539795398053981539825398353984539855398653987539885398953990539915399253993539945399553996539975399853999540005400154002540035400454005540065400754008540095401054011540125401354014540155401654017540185401954020540215402254023540245402554026540275402854029540305403154032540335403454035540365403754038540395404054041540425404354044540455404654047540485404954050540515405254053540545405554056540575405854059540605406154062540635406454065540665406754068540695407054071540725407354074540755407654077540785407954080540815408254083540845408554086540875408854089540905409154092540935409454095540965409754098540995410054101541025410354104541055410654107541085410954110541115411254113541145411554116541175411854119541205412154122541235412454125541265412754128541295413054131541325413354134541355413654137541385413954140541415414254143541445414554146541475414854149541505415154152541535415454155541565415754158541595416054161541625416354164541655416654167541685416954170541715417254173541745417554176541775417854179541805418154182541835418454185541865418754188541895419054191541925419354194541955419654197541985419954200542015420254203542045420554206542075420854209542105421154212542135421454215542165421754218542195422054221542225422354224542255422654227542285422954230542315423254233542345423554236542375423854239542405424154242542435424454245542465424754248542495425054251542525425354254542555425654257542585425954260542615426254263542645426554266542675426854269542705427154272542735427454275542765427754278542795428054281542825428354284542855428654287542885428954290542915429254293542945429554296542975429854299543005430154302543035430454305543065430754308543095431054311543125431354314543155431654317543185431954320543215432254323543245432554326543275432854329543305433154332543335433454335543365433754338543395434054341543425434354344543455434654347543485434954350543515435254353543545435554356543575435854359543605436154362543635436454365543665436754368543695437054371543725437354374543755437654377543785437954380543815438254383543845438554386543875438854389543905439154392543935439454395543965439754398543995440054401544025440354404544055440654407544085440954410544115441254413544145441554416544175441854419544205442154422544235442454425544265442754428544295443054431544325443354434544355443654437544385443954440544415444254443544445444554446544475444854449544505445154452544535445454455544565445754458544595446054461544625446354464544655446654467544685446954470544715447254473544745447554476544775447854479544805448154482544835448454485544865448754488544895449054491544925449354494544955449654497544985449954500545015450254503545045450554506545075450854509545105451154512545135451454515545165451754518545195452054521545225452354524545255452654527545285452954530545315453254533545345453554536545375453854539545405454154542545435454454545545465454754548545495455054551545525455354554545555455654557545585455954560545615456254563545645456554566545675456854569545705457154572545735457454575545765457754578545795458054581545825458354584545855458654587545885458954590545915459254593545945459554596545975459854599546005460154602546035460454605546065460754608546095461054611546125461354614546155461654617546185461954620546215462254623546245462554626546275462854629546305463154632546335463454635546365463754638546395464054641546425464354644546455464654647546485464954650546515465254653546545465554656546575465854659546605466154662546635466454665546665466754668546695467054671546725467354674546755467654677546785467954680546815468254683546845468554686546875468854689546905469154692546935469454695546965469754698546995470054701547025470354704547055470654707547085470954710547115471254713547145471554716547175471854719547205472154722547235472454725547265472754728547295473054731547325473354734547355473654737547385473954740547415474254743547445474554746547475474854749547505475154752547535475454755547565475754758547595476054761547625476354764547655476654767547685476954770547715477254773547745477554776547775477854779547805478154782547835478454785547865478754788547895479054791547925479354794547955479654797547985479954800548015480254803548045480554806548075480854809548105481154812548135481454815548165481754818548195482054821548225482354824548255482654827548285482954830548315483254833548345483554836548375483854839548405484154842548435484454845548465484754848548495485054851548525485354854548555485654857548585485954860548615486254863548645486554866548675486854869548705487154872548735487454875548765487754878548795488054881548825488354884548855488654887548885488954890548915489254893548945489554896548975489854899549005490154902549035490454905549065490754908549095491054911549125491354914549155491654917549185491954920549215492254923549245492554926549275492854929549305493154932549335493454935549365493754938549395494054941549425494354944549455494654947549485494954950549515495254953549545495554956549575495854959549605496154962549635496454965549665496754968549695497054971549725497354974549755497654977549785497954980549815498254983549845498554986549875498854989549905499154992549935499454995549965499754998549995500055001550025500355004550055500655007550085500955010550115501255013550145501555016550175501855019550205502155022550235502455025550265502755028550295503055031550325503355034550355503655037550385503955040550415504255043550445504555046550475504855049550505505155052550535505455055550565505755058550595506055061550625506355064550655506655067550685506955070550715507255073550745507555076550775507855079550805508155082550835508455085550865508755088550895509055091550925509355094550955509655097550985509955100551015510255103551045510555106551075510855109551105511155112551135511455115551165511755118551195512055121551225512355124551255512655127551285512955130551315513255133551345513555136551375513855139551405514155142551435514455145551465514755148551495515055151551525515355154551555515655157551585515955160551615516255163551645516555166551675516855169551705517155172551735517455175551765517755178551795518055181551825518355184551855518655187551885518955190551915519255193551945519555196551975519855199552005520155202552035520455205552065520755208552095521055211552125521355214552155521655217552185521955220552215522255223552245522555226552275522855229552305523155232552335523455235552365523755238552395524055241552425524355244552455524655247552485524955250552515525255253552545525555256552575525855259552605526155262552635526455265552665526755268552695527055271552725527355274552755527655277552785527955280552815528255283552845528555286552875528855289552905529155292552935529455295552965529755298552995530055301553025530355304553055530655307553085530955310553115531255313553145531555316553175531855319553205532155322553235532455325553265532755328553295533055331553325533355334553355533655337553385533955340553415534255343553445534555346553475534855349553505535155352553535535455355553565535755358553595536055361553625536355364553655536655367553685536955370553715537255373553745537555376553775537855379553805538155382553835538455385553865538755388553895539055391553925539355394553955539655397553985539955400554015540255403554045540555406554075540855409554105541155412554135541455415554165541755418554195542055421554225542355424554255542655427554285542955430554315543255433554345543555436554375543855439554405544155442554435544455445554465544755448554495545055451554525545355454554555545655457554585545955460554615546255463554645546555466554675546855469554705547155472554735547455475554765547755478554795548055481554825548355484554855548655487554885548955490554915549255493554945549555496554975549855499555005550155502555035550455505555065550755508555095551055511555125551355514555155551655517555185551955520555215552255523555245552555526555275552855529555305553155532555335553455535555365553755538555395554055541555425554355544555455554655547555485554955550555515555255553555545555555556555575555855559555605556155562555635556455565555665556755568555695557055571555725557355574555755557655577555785557955580555815558255583555845558555586555875558855589555905559155592555935559455595555965559755598555995560055601556025560355604556055560655607556085560955610556115561255613556145561555616556175561855619556205562155622556235562455625556265562755628556295563055631556325563355634556355563655637556385563955640556415564255643556445564555646556475564855649556505565155652556535565455655556565565755658556595566055661556625566355664556655566655667556685566955670556715567255673556745567555676556775567855679556805568155682556835568455685556865568755688556895569055691556925569355694556955569655697556985569955700557015570255703557045570555706557075570855709557105571155712557135571455715557165571755718557195572055721557225572355724557255572655727557285572955730557315573255733557345573555736557375573855739557405574155742557435574455745557465574755748557495575055751557525575355754557555575655757557585575955760557615576255763557645576555766557675576855769557705577155772557735577455775557765577755778557795578055781557825578355784557855578655787557885578955790557915579255793557945579555796557975579855799558005580155802558035580455805558065580755808558095581055811558125581355814558155581655817558185581955820558215582255823558245582555826558275582855829558305583155832558335583455835558365583755838558395584055841558425584355844558455584655847558485584955850558515585255853558545585555856558575585855859558605586155862558635586455865558665586755868558695587055871558725587355874558755587655877558785587955880558815588255883558845588555886558875588855889558905589155892558935589455895558965589755898558995590055901559025590355904559055590655907559085590955910559115591255913559145591555916559175591855919559205592155922559235592455925559265592755928559295593055931559325593355934559355593655937559385593955940559415594255943559445594555946559475594855949559505595155952559535595455955559565595755958559595596055961559625596355964559655596655967559685596955970559715597255973559745597555976559775597855979559805598155982559835598455985559865598755988559895599055991559925599355994559955599655997559985599956000560015600256003560045600556006560075600856009560105601156012560135601456015560165601756018560195602056021560225602356024560255602656027560285602956030560315603256033560345603556036560375603856039560405604156042560435604456045560465604756048560495605056051560525605356054560555605656057560585605956060560615606256063560645606556066560675606856069560705607156072560735607456075560765607756078560795608056081560825608356084560855608656087560885608956090560915609256093560945609556096560975609856099561005610156102561035610456105561065610756108561095611056111561125611356114561155611656117561185611956120561215612256123561245612556126561275612856129561305613156132561335613456135561365613756138561395614056141561425614356144561455614656147561485614956150561515615256153561545615556156561575615856159561605616156162561635616456165561665616756168561695617056171561725617356174561755617656177561785617956180561815618256183561845618556186561875618856189561905619156192561935619456195561965619756198561995620056201562025620356204562055620656207562085620956210562115621256213562145621556216562175621856219562205622156222562235622456225562265622756228562295623056231562325623356234562355623656237562385623956240562415624256243562445624556246562475624856249562505625156252562535625456255562565625756258562595626056261562625626356264562655626656267562685626956270562715627256273562745627556276562775627856279562805628156282562835628456285562865628756288562895629056291562925629356294562955629656297562985629956300563015630256303563045630556306563075630856309563105631156312563135631456315563165631756318563195632056321563225632356324563255632656327563285632956330563315633256333563345633556336563375633856339563405634156342563435634456345563465634756348563495635056351563525635356354563555635656357563585635956360563615636256363563645636556366563675636856369563705637156372563735637456375563765637756378563795638056381563825638356384563855638656387563885638956390563915639256393563945639556396563975639856399564005640156402564035640456405564065640756408564095641056411564125641356414564155641656417564185641956420564215642256423564245642556426564275642856429564305643156432564335643456435564365643756438564395644056441564425644356444564455644656447564485644956450564515645256453564545645556456564575645856459564605646156462564635646456465564665646756468564695647056471564725647356474564755647656477564785647956480564815648256483564845648556486564875648856489564905649156492564935649456495564965649756498564995650056501565025650356504565055650656507565085650956510565115651256513565145651556516565175651856519565205652156522565235652456525565265652756528565295653056531565325653356534565355653656537565385653956540565415654256543565445654556546565475654856549565505655156552565535655456555565565655756558565595656056561565625656356564565655656656567565685656956570565715657256573565745657556576565775657856579565805658156582565835658456585565865658756588565895659056591565925659356594565955659656597565985659956600566015660256603566045660556606566075660856609566105661156612566135661456615566165661756618566195662056621566225662356624566255662656627566285662956630566315663256633566345663556636566375663856639566405664156642566435664456645566465664756648566495665056651566525665356654566555665656657566585665956660566615666256663566645666556666566675666856669566705667156672566735667456675566765667756678566795668056681566825668356684566855668656687566885668956690566915669256693566945669556696566975669856699567005670156702567035670456705567065670756708567095671056711567125671356714567155671656717567185671956720567215672256723567245672556726567275672856729567305673156732567335673456735567365673756738567395674056741567425674356744567455674656747567485674956750567515675256753567545675556756567575675856759567605676156762567635676456765567665676756768567695677056771567725677356774567755677656777567785677956780567815678256783567845678556786567875678856789567905679156792567935679456795567965679756798567995680056801568025680356804568055680656807568085680956810568115681256813568145681556816568175681856819568205682156822568235682456825568265682756828568295683056831568325683356834568355683656837568385683956840568415684256843568445684556846568475684856849568505685156852568535685456855568565685756858568595686056861568625686356864568655686656867568685686956870568715687256873568745687556876568775687856879568805688156882568835688456885568865688756888568895689056891568925689356894568955689656897568985689956900569015690256903569045690556906569075690856909569105691156912569135691456915569165691756918569195692056921569225692356924569255692656927569285692956930569315693256933569345693556936569375693856939569405694156942569435694456945569465694756948569495695056951569525695356954569555695656957569585695956960569615696256963569645696556966569675696856969569705697156972569735697456975569765697756978569795698056981569825698356984569855698656987569885698956990569915699256993569945699556996569975699856999570005700157002570035700457005570065700757008570095701057011570125701357014570155701657017570185701957020570215702257023570245702557026570275702857029570305703157032570335703457035570365703757038570395704057041570425704357044570455704657047570485704957050570515705257053570545705557056570575705857059570605706157062570635706457065570665706757068570695707057071570725707357074570755707657077570785707957080570815708257083570845708557086570875708857089570905709157092570935709457095570965709757098570995710057101571025710357104571055710657107571085710957110571115711257113571145711557116571175711857119571205712157122571235712457125571265712757128571295713057131571325713357134571355713657137571385713957140571415714257143571445714557146571475714857149571505715157152571535715457155571565715757158571595716057161571625716357164571655716657167571685716957170571715717257173571745717557176571775717857179571805718157182571835718457185571865718757188571895719057191571925719357194571955719657197571985719957200572015720257203572045720557206572075720857209572105721157212572135721457215572165721757218572195722057221572225722357224572255722657227572285722957230572315723257233572345723557236572375723857239572405724157242572435724457245572465724757248572495725057251572525725357254572555725657257572585725957260572615726257263572645726557266572675726857269572705727157272572735727457275572765727757278572795728057281572825728357284572855728657287572885728957290572915729257293572945729557296572975729857299573005730157302573035730457305573065730757308573095731057311573125731357314573155731657317573185731957320573215732257323573245732557326573275732857329573305733157332573335733457335573365733757338573395734057341573425734357344573455734657347573485734957350573515735257353573545735557356573575735857359573605736157362573635736457365573665736757368573695737057371573725737357374573755737657377573785737957380573815738257383573845738557386573875738857389573905739157392573935739457395573965739757398573995740057401574025740357404574055740657407574085740957410574115741257413574145741557416574175741857419574205742157422574235742457425574265742757428574295743057431574325743357434574355743657437574385743957440574415744257443574445744557446574475744857449574505745157452574535745457455574565745757458574595746057461574625746357464574655746657467574685746957470574715747257473574745747557476574775747857479574805748157482574835748457485574865748757488574895749057491574925749357494574955749657497574985749957500575015750257503575045750557506575075750857509575105751157512575135751457515575165751757518575195752057521575225752357524575255752657527575285752957530575315753257533575345753557536575375753857539575405754157542575435754457545575465754757548575495755057551575525755357554575555755657557575585755957560575615756257563575645756557566575675756857569575705757157572575735757457575575765757757578575795758057581575825758357584575855758657587575885758957590575915759257593575945759557596575975759857599576005760157602576035760457605576065760757608576095761057611576125761357614576155761657617576185761957620576215762257623576245762557626576275762857629576305763157632576335763457635576365763757638576395764057641576425764357644576455764657647576485764957650576515765257653576545765557656576575765857659576605766157662576635766457665576665766757668576695767057671576725767357674576755767657677576785767957680576815768257683576845768557686576875768857689576905769157692576935769457695576965769757698576995770057701577025770357704577055770657707577085770957710577115771257713577145771557716577175771857719577205772157722577235772457725577265772757728577295773057731577325773357734577355773657737577385773957740577415774257743577445774557746577475774857749577505775157752577535775457755577565775757758577595776057761577625776357764577655776657767577685776957770577715777257773577745777557776577775777857779577805778157782577835778457785577865778757788577895779057791577925779357794577955779657797577985779957800578015780257803578045780557806578075780857809578105781157812578135781457815578165781757818578195782057821578225782357824578255782657827578285782957830578315783257833578345783557836578375783857839578405784157842578435784457845578465784757848578495785057851578525785357854578555785657857578585785957860578615786257863578645786557866578675786857869578705787157872578735787457875578765787757878578795788057881578825788357884578855788657887578885788957890578915789257893578945789557896578975789857899579005790157902579035790457905579065790757908579095791057911579125791357914579155791657917579185791957920579215792257923579245792557926579275792857929579305793157932579335793457935579365793757938579395794057941579425794357944579455794657947579485794957950579515795257953579545795557956579575795857959579605796157962579635796457965579665796757968579695797057971579725797357974579755797657977579785797957980579815798257983579845798557986579875798857989579905799157992579935799457995579965799757998579995800058001580025800358004580055800658007580085800958010580115801258013580145801558016580175801858019580205802158022580235802458025580265802758028580295803058031580325803358034580355803658037580385803958040580415804258043580445804558046580475804858049580505805158052580535805458055580565805758058580595806058061580625806358064580655806658067580685806958070580715807258073580745807558076580775807858079580805808158082580835808458085580865808758088580895809058091580925809358094580955809658097580985809958100581015810258103581045810558106581075810858109581105811158112581135811458115581165811758118581195812058121581225812358124581255812658127581285812958130581315813258133581345813558136581375813858139581405814158142581435814458145581465814758148581495815058151581525815358154581555815658157581585815958160581615816258163581645816558166581675816858169581705817158172581735817458175581765817758178581795818058181581825818358184581855818658187581885818958190581915819258193581945819558196581975819858199582005820158202582035820458205582065820758208582095821058211582125821358214582155821658217582185821958220582215822258223582245822558226582275822858229582305823158232582335823458235582365823758238582395824058241582425824358244582455824658247582485824958250582515825258253582545825558256582575825858259582605826158262582635826458265582665826758268582695827058271582725827358274582755827658277582785827958280582815828258283582845828558286582875828858289582905829158292582935829458295582965829758298582995830058301583025830358304583055830658307583085830958310583115831258313583145831558316583175831858319583205832158322583235832458325583265832758328583295833058331583325833358334583355833658337583385833958340583415834258343583445834558346583475834858349583505835158352583535835458355583565835758358583595836058361583625836358364583655836658367583685836958370583715837258373583745837558376583775837858379583805838158382583835838458385583865838758388583895839058391583925839358394583955839658397583985839958400584015840258403584045840558406584075840858409584105841158412584135841458415584165841758418584195842058421584225842358424584255842658427584285842958430584315843258433584345843558436584375843858439584405844158442584435844458445584465844758448584495845058451584525845358454584555845658457584585845958460584615846258463584645846558466584675846858469584705847158472584735847458475584765847758478584795848058481584825848358484584855848658487584885848958490584915849258493584945849558496584975849858499585005850158502585035850458505585065850758508585095851058511585125851358514585155851658517585185851958520585215852258523585245852558526585275852858529585305853158532585335853458535585365853758538585395854058541585425854358544585455854658547585485854958550585515855258553585545855558556585575855858559585605856158562585635856458565585665856758568585695857058571585725857358574585755857658577585785857958580585815858258583585845858558586585875858858589585905859158592585935859458595585965859758598585995860058601586025860358604586055860658607586085860958610586115861258613586145861558616586175861858619586205862158622586235862458625586265862758628586295863058631586325863358634586355863658637586385863958640586415864258643586445864558646586475864858649586505865158652586535865458655586565865758658586595866058661586625866358664586655866658667586685866958670586715867258673586745867558676586775867858679586805868158682586835868458685586865868758688586895869058691586925869358694586955869658697586985869958700587015870258703587045870558706587075870858709587105871158712587135871458715587165871758718587195872058721587225872358724587255872658727587285872958730587315873258733587345873558736587375873858739587405874158742587435874458745587465874758748587495875058751587525875358754587555875658757587585875958760587615876258763587645876558766587675876858769587705877158772587735877458775587765877758778587795878058781587825878358784587855878658787587885878958790587915879258793587945879558796587975879858799588005880158802588035880458805588065880758808588095881058811588125881358814588155881658817588185881958820588215882258823588245882558826588275882858829588305883158832588335883458835588365883758838588395884058841588425884358844588455884658847588485884958850588515885258853588545885558856588575885858859588605886158862588635886458865588665886758868588695887058871588725887358874588755887658877588785887958880588815888258883588845888558886588875888858889588905889158892588935889458895588965889758898588995890058901589025890358904589055890658907589085890958910589115891258913589145891558916589175891858919589205892158922589235892458925589265892758928589295893058931589325893358934589355893658937589385893958940589415894258943589445894558946589475894858949589505895158952589535895458955589565895758958589595896058961589625896358964589655896658967589685896958970589715897258973589745897558976589775897858979589805898158982589835898458985589865898758988589895899058991589925899358994589955899658997589985899959000590015900259003590045900559006590075900859009590105901159012590135901459015590165901759018590195902059021590225902359024590255902659027590285902959030590315903259033590345903559036590375903859039590405904159042590435904459045590465904759048590495905059051590525905359054590555905659057590585905959060590615906259063590645906559066590675906859069590705907159072590735907459075590765907759078590795908059081590825908359084590855908659087590885908959090590915909259093590945909559096590975909859099591005910159102591035910459105591065910759108591095911059111591125911359114591155911659117591185911959120591215912259123591245912559126591275912859129591305913159132591335913459135591365913759138591395914059141591425914359144591455914659147591485914959150591515915259153591545915559156591575915859159591605916159162591635916459165591665916759168591695917059171591725917359174591755917659177591785917959180591815918259183591845918559186591875918859189591905919159192591935919459195591965919759198591995920059201592025920359204592055920659207592085920959210592115921259213592145921559216592175921859219592205922159222592235922459225592265922759228592295923059231592325923359234592355923659237592385923959240592415924259243592445924559246592475924859249592505925159252592535925459255592565925759258592595926059261592625926359264592655926659267592685926959270592715927259273592745927559276592775927859279592805928159282592835928459285592865928759288592895929059291592925929359294592955929659297592985929959300593015930259303593045930559306593075930859309593105931159312593135931459315593165931759318593195932059321593225932359324593255932659327593285932959330593315933259333593345933559336593375933859339593405934159342593435934459345593465934759348593495935059351593525935359354593555935659357593585935959360593615936259363593645936559366593675936859369593705937159372593735937459375593765937759378593795938059381593825938359384593855938659387593885938959390593915939259393593945939559396593975939859399594005940159402594035940459405594065940759408594095941059411594125941359414594155941659417594185941959420594215942259423594245942559426594275942859429594305943159432594335943459435594365943759438594395944059441594425944359444594455944659447594485944959450594515945259453594545945559456594575945859459594605946159462594635946459465594665946759468594695947059471594725947359474594755947659477594785947959480594815948259483594845948559486594875948859489594905949159492594935949459495594965949759498594995950059501595025950359504595055950659507595085950959510595115951259513595145951559516595175951859519595205952159522595235952459525595265952759528595295953059531595325953359534595355953659537595385953959540595415954259543595445954559546595475954859549595505955159552595535955459555595565955759558595595956059561595625956359564595655956659567595685956959570595715957259573595745957559576595775957859579595805958159582595835958459585595865958759588595895959059591595925959359594595955959659597595985959959600596015960259603596045960559606596075960859609596105961159612596135961459615596165961759618596195962059621596225962359624596255962659627596285962959630596315963259633596345963559636596375963859639596405964159642596435964459645596465964759648596495965059651596525965359654596555965659657596585965959660596615966259663596645966559666596675966859669596705967159672596735967459675596765967759678596795968059681596825968359684596855968659687596885968959690596915969259693596945969559696596975969859699597005970159702597035970459705597065970759708597095971059711597125971359714597155971659717597185971959720597215972259723597245972559726597275972859729597305973159732597335973459735597365973759738597395974059741597425974359744597455974659747597485974959750597515975259753597545975559756597575975859759597605976159762597635976459765597665976759768597695977059771597725977359774597755977659777597785977959780597815978259783597845978559786597875978859789597905979159792597935979459795597965979759798597995980059801598025980359804598055980659807598085980959810598115981259813598145981559816598175981859819598205982159822598235982459825598265982759828598295983059831598325983359834598355983659837598385983959840598415984259843598445984559846598475984859849598505985159852598535985459855598565985759858598595986059861598625986359864598655986659867598685986959870598715987259873598745987559876598775987859879598805988159882598835988459885598865988759888598895989059891598925989359894598955989659897598985989959900599015990259903599045990559906599075990859909599105991159912599135991459915599165991759918599195992059921599225992359924599255992659927599285992959930599315993259933599345993559936599375993859939599405994159942599435994459945599465994759948599495995059951599525995359954599555995659957599585995959960599615996259963599645996559966599675996859969599705997159972599735997459975599765997759978599795998059981599825998359984599855998659987599885998959990599915999259993599945999559996599975999859999600006000160002600036000460005600066000760008600096001060011600126001360014600156001660017600186001960020600216002260023600246002560026600276002860029600306003160032600336003460035600366003760038600396004060041600426004360044600456004660047600486004960050600516005260053600546005560056600576005860059600606006160062600636006460065600666006760068600696007060071600726007360074600756007660077600786007960080600816008260083600846008560086600876008860089600906009160092600936009460095600966009760098600996010060101601026010360104601056010660107601086010960110601116011260113601146011560116601176011860119601206012160122601236012460125601266012760128601296013060131601326013360134601356013660137601386013960140601416014260143601446014560146601476014860149601506015160152601536015460155601566015760158601596016060161601626016360164601656016660167601686016960170601716017260173601746017560176601776017860179601806018160182601836018460185601866018760188601896019060191601926019360194601956019660197601986019960200602016020260203602046020560206602076020860209602106021160212602136021460215602166021760218602196022060221602226022360224602256022660227602286022960230602316023260233602346023560236602376023860239602406024160242602436024460245602466024760248602496025060251602526025360254602556025660257602586025960260602616026260263602646026560266602676026860269602706027160272602736027460275602766027760278602796028060281602826028360284602856028660287602886028960290602916029260293602946029560296602976029860299603006030160302603036030460305603066030760308603096031060311603126031360314603156031660317603186031960320603216032260323603246032560326603276032860329603306033160332603336033460335603366033760338603396034060341603426034360344603456034660347603486034960350603516035260353603546035560356603576035860359603606036160362603636036460365603666036760368603696037060371603726037360374603756037660377603786037960380603816038260383603846038560386603876038860389603906039160392603936039460395603966039760398603996040060401604026040360404604056040660407604086040960410604116041260413604146041560416604176041860419604206042160422604236042460425604266042760428604296043060431604326043360434604356043660437604386043960440604416044260443604446044560446604476044860449604506045160452604536045460455604566045760458604596046060461604626046360464604656046660467604686046960470604716047260473604746047560476604776047860479604806048160482604836048460485604866048760488604896049060491604926049360494604956049660497604986049960500605016050260503605046050560506605076050860509605106051160512605136051460515605166051760518605196052060521605226052360524605256052660527605286052960530605316053260533605346053560536605376053860539605406054160542605436054460545605466054760548605496055060551605526055360554605556055660557605586055960560605616056260563605646056560566605676056860569605706057160572605736057460575605766057760578605796058060581605826058360584605856058660587605886058960590605916059260593605946059560596605976059860599606006060160602606036060460605606066060760608606096061060611606126061360614606156061660617606186061960620606216062260623606246062560626606276062860629606306063160632606336063460635606366063760638606396064060641606426064360644606456064660647606486064960650606516065260653606546065560656606576065860659606606066160662606636066460665606666066760668606696067060671606726067360674606756067660677606786067960680606816068260683606846068560686606876068860689606906069160692606936069460695606966069760698606996070060701607026070360704607056070660707607086070960710607116071260713607146071560716607176071860719607206072160722607236072460725607266072760728607296073060731607326073360734607356073660737607386073960740607416074260743607446074560746607476074860749607506075160752607536075460755607566075760758607596076060761607626076360764607656076660767607686076960770607716077260773607746077560776607776077860779607806078160782607836078460785607866078760788607896079060791607926079360794607956079660797607986079960800608016080260803608046080560806608076080860809608106081160812608136081460815608166081760818608196082060821608226082360824608256082660827608286082960830608316083260833608346083560836608376083860839608406084160842608436084460845608466084760848608496085060851608526085360854608556085660857608586085960860608616086260863608646086560866608676086860869608706087160872608736087460875608766087760878608796088060881608826088360884608856088660887608886088960890608916089260893608946089560896608976089860899609006090160902609036090460905609066090760908609096091060911609126091360914609156091660917609186091960920609216092260923609246092560926609276092860929609306093160932609336093460935609366093760938609396094060941609426094360944609456094660947609486094960950609516095260953609546095560956609576095860959609606096160962609636096460965609666096760968609696097060971609726097360974609756097660977609786097960980609816098260983609846098560986609876098860989609906099160992609936099460995609966099760998609996100061001610026100361004610056100661007610086100961010610116101261013610146101561016610176101861019610206102161022610236102461025610266102761028610296103061031610326103361034610356103661037610386103961040610416104261043610446104561046610476104861049610506105161052610536105461055610566105761058610596106061061610626106361064610656106661067610686106961070610716107261073610746107561076610776107861079610806108161082610836108461085610866108761088610896109061091610926109361094610956109661097610986109961100611016110261103611046110561106611076110861109611106111161112611136111461115611166111761118611196112061121611226112361124611256112661127611286112961130611316113261133611346113561136611376113861139611406114161142611436114461145611466114761148611496115061151611526115361154611556115661157611586115961160611616116261163611646116561166611676116861169611706117161172611736117461175611766117761178611796118061181611826118361184611856118661187611886118961190611916119261193611946119561196611976119861199612006120161202612036120461205612066120761208612096121061211612126121361214612156121661217612186121961220612216122261223612246122561226612276122861229612306123161232612336123461235612366123761238612396124061241612426124361244612456124661247612486124961250612516125261253612546125561256612576125861259612606126161262612636126461265612666126761268612696127061271612726127361274612756127661277612786127961280612816128261283612846128561286612876128861289612906129161292612936129461295612966129761298612996130061301613026130361304613056130661307613086130961310613116131261313613146131561316613176131861319613206132161322613236132461325613266132761328613296133061331613326133361334613356133661337613386133961340613416134261343613446134561346613476134861349613506135161352613536135461355613566135761358613596136061361613626136361364613656136661367613686136961370613716137261373613746137561376613776137861379613806138161382613836138461385613866138761388613896139061391613926139361394613956139661397613986139961400614016140261403614046140561406614076140861409614106141161412614136141461415614166141761418614196142061421614226142361424614256142661427614286142961430614316143261433614346143561436614376143861439614406144161442614436144461445614466144761448614496145061451614526145361454614556145661457614586145961460614616146261463614646146561466614676146861469614706147161472614736147461475614766147761478614796148061481614826148361484614856148661487614886148961490614916149261493614946149561496614976149861499615006150161502615036150461505615066150761508615096151061511615126151361514615156151661517615186151961520615216152261523615246152561526615276152861529615306153161532615336153461535615366153761538615396154061541615426154361544615456154661547615486154961550615516155261553615546155561556615576155861559615606156161562615636156461565615666156761568615696157061571615726157361574615756157661577615786157961580615816158261583615846158561586615876158861589615906159161592615936159461595615966159761598615996160061601616026160361604616056160661607616086160961610616116161261613616146161561616616176161861619616206162161622616236162461625616266162761628616296163061631616326163361634616356163661637616386163961640616416164261643616446164561646616476164861649616506165161652616536165461655616566165761658616596166061661616626166361664616656166661667616686166961670616716167261673616746167561676616776167861679616806168161682616836168461685616866168761688616896169061691616926169361694616956169661697616986169961700617016170261703617046170561706617076170861709617106171161712617136171461715617166171761718617196172061721617226172361724617256172661727617286172961730617316173261733617346173561736617376173861739617406174161742617436174461745617466174761748617496175061751617526175361754617556175661757617586175961760617616176261763617646176561766617676176861769617706177161772617736177461775617766177761778617796178061781617826178361784617856178661787617886178961790617916179261793617946179561796617976179861799618006180161802618036180461805618066180761808618096181061811618126181361814618156181661817618186181961820618216182261823618246182561826618276182861829618306183161832618336183461835618366183761838618396184061841618426184361844618456184661847618486184961850618516185261853618546185561856618576185861859618606186161862618636186461865618666186761868618696187061871618726187361874618756187661877618786187961880618816188261883618846188561886618876188861889618906189161892618936189461895618966189761898618996190061901619026190361904619056190661907619086190961910619116191261913619146191561916619176191861919619206192161922619236192461925619266192761928619296193061931619326193361934619356193661937619386193961940619416194261943619446194561946619476194861949619506195161952619536195461955619566195761958619596196061961619626196361964619656196661967619686196961970619716197261973619746197561976619776197861979619806198161982619836198461985619866198761988619896199061991619926199361994619956199661997619986199962000620016200262003620046200562006620076200862009620106201162012620136201462015620166201762018620196202062021620226202362024620256202662027620286202962030620316203262033620346203562036620376203862039620406204162042620436204462045620466204762048620496205062051620526205362054620556205662057620586205962060620616206262063620646206562066620676206862069620706207162072620736207462075620766207762078620796208062081620826208362084620856208662087620886208962090620916209262093620946209562096620976209862099621006210162102621036210462105621066210762108621096211062111621126211362114621156211662117621186211962120621216212262123621246212562126621276212862129621306213162132621336213462135621366213762138621396214062141621426214362144621456214662147621486214962150621516215262153621546215562156621576215862159621606216162162621636216462165621666216762168621696217062171621726217362174621756217662177621786217962180621816218262183621846218562186621876218862189621906219162192621936219462195621966219762198621996220062201622026220362204622056220662207622086220962210622116221262213622146221562216622176221862219622206222162222622236222462225622266222762228622296223062231622326223362234622356223662237622386223962240622416224262243622446224562246622476224862249622506225162252622536225462255622566225762258622596226062261622626226362264622656226662267622686226962270622716227262273622746227562276622776227862279622806228162282622836228462285622866228762288622896229062291622926229362294622956229662297622986229962300623016230262303623046230562306623076230862309623106231162312623136231462315623166231762318623196232062321623226232362324623256232662327623286232962330623316233262333623346233562336623376233862339623406234162342623436234462345623466234762348623496235062351623526235362354623556235662357623586235962360623616236262363623646236562366623676236862369623706237162372623736237462375623766237762378623796238062381623826238362384623856238662387623886238962390623916239262393623946239562396623976239862399624006240162402624036240462405624066240762408624096241062411624126241362414624156241662417624186241962420624216242262423624246242562426624276242862429624306243162432624336243462435624366243762438624396244062441624426244362444624456244662447624486244962450624516245262453624546245562456624576245862459624606246162462624636246462465624666246762468624696247062471624726247362474624756247662477624786247962480624816248262483624846248562486624876248862489624906249162492624936249462495624966249762498624996250062501625026250362504625056250662507625086250962510625116251262513625146251562516625176251862519625206252162522625236252462525625266252762528625296253062531625326253362534625356253662537625386253962540625416254262543625446254562546625476254862549625506255162552625536255462555625566255762558625596256062561625626256362564625656256662567625686256962570625716257262573625746257562576625776257862579625806258162582625836258462585625866258762588625896259062591625926259362594625956259662597625986259962600626016260262603626046260562606626076260862609626106261162612626136261462615626166261762618626196262062621626226262362624626256262662627626286262962630626316263262633626346263562636626376263862639626406264162642626436264462645626466264762648626496265062651626526265362654626556265662657626586265962660626616266262663626646266562666626676266862669626706267162672626736267462675626766267762678626796268062681626826268362684626856268662687626886268962690626916269262693626946269562696626976269862699627006270162702627036270462705627066270762708627096271062711627126271362714627156271662717627186271962720627216272262723627246272562726627276272862729627306273162732627336273462735627366273762738627396274062741627426274362744627456274662747627486274962750627516275262753627546275562756627576275862759627606276162762627636276462765627666276762768627696277062771627726277362774627756277662777627786277962780627816278262783627846278562786627876278862789627906279162792627936279462795627966279762798627996280062801628026280362804628056280662807628086280962810628116281262813628146281562816628176281862819628206282162822628236282462825628266282762828628296283062831628326283362834628356283662837628386283962840628416284262843628446284562846628476284862849628506285162852628536285462855628566285762858628596286062861628626286362864628656286662867628686286962870628716287262873628746287562876628776287862879628806288162882628836288462885628866288762888628896289062891628926289362894628956289662897628986289962900629016290262903629046290562906629076290862909629106291162912629136291462915629166291762918629196292062921629226292362924629256292662927629286292962930629316293262933629346293562936629376293862939629406294162942629436294462945629466294762948629496295062951629526295362954629556295662957629586295962960629616296262963629646296562966629676296862969629706297162972629736297462975629766297762978629796298062981629826298362984629856298662987629886298962990629916299262993629946299562996629976299862999630006300163002630036300463005630066300763008630096301063011630126301363014630156301663017630186301963020630216302263023630246302563026630276302863029630306303163032630336303463035630366303763038630396304063041630426304363044630456304663047630486304963050630516305263053630546305563056630576305863059630606306163062630636306463065630666306763068630696307063071630726307363074630756307663077630786307963080630816308263083630846308563086630876308863089630906309163092630936309463095630966309763098630996310063101631026310363104631056310663107631086310963110631116311263113631146311563116631176311863119631206312163122631236312463125631266312763128631296313063131631326313363134631356313663137631386313963140631416314263143631446314563146631476314863149631506315163152631536315463155631566315763158631596316063161631626316363164631656316663167631686316963170631716317263173631746317563176631776317863179631806318163182631836318463185631866318763188631896319063191631926319363194631956319663197631986319963200632016320263203632046320563206632076320863209632106321163212632136321463215632166321763218632196322063221632226322363224632256322663227632286322963230632316323263233632346323563236632376323863239632406324163242632436324463245632466324763248632496325063251632526325363254632556325663257632586325963260632616326263263632646326563266632676326863269632706327163272632736327463275632766327763278632796328063281632826328363284632856328663287632886328963290632916329263293632946329563296632976329863299633006330163302633036330463305633066330763308633096331063311633126331363314633156331663317633186331963320633216332263323633246332563326633276332863329633306333163332633336333463335633366333763338633396334063341633426334363344633456334663347633486334963350633516335263353633546335563356633576335863359633606336163362633636336463365633666336763368633696337063371633726337363374633756337663377633786337963380633816338263383633846338563386633876338863389633906339163392633936339463395633966339763398633996340063401634026340363404634056340663407634086340963410634116341263413634146341563416634176341863419634206342163422634236342463425634266342763428634296343063431634326343363434634356343663437634386343963440634416344263443634446344563446634476344863449634506345163452634536345463455634566345763458634596346063461634626346363464634656346663467634686346963470634716347263473634746347563476634776347863479634806348163482634836348463485634866348763488634896349063491634926349363494634956349663497634986349963500635016350263503635046350563506635076350863509635106351163512635136351463515635166351763518635196352063521635226352363524635256352663527635286352963530635316353263533635346353563536635376353863539635406354163542635436354463545635466354763548635496355063551635526355363554635556355663557635586355963560635616356263563635646356563566635676356863569635706357163572635736357463575635766357763578635796358063581635826358363584635856358663587635886358963590635916359263593635946359563596635976359863599636006360163602636036360463605636066360763608636096361063611636126361363614636156361663617636186361963620636216362263623636246362563626636276362863629636306363163632636336363463635636366363763638636396364063641636426364363644636456364663647636486364963650636516365263653636546365563656636576365863659636606366163662636636366463665636666366763668636696367063671636726367363674636756367663677636786367963680636816368263683636846368563686636876368863689636906369163692636936369463695636966369763698636996370063701637026370363704637056370663707637086370963710637116371263713637146371563716637176371863719637206372163722637236372463725637266372763728637296373063731637326373363734637356373663737637386373963740637416374263743637446374563746637476374863749637506375163752637536375463755637566375763758637596376063761637626376363764637656376663767637686376963770637716377263773637746377563776637776377863779637806378163782637836378463785637866378763788637896379063791637926379363794637956379663797637986379963800638016380263803638046380563806638076380863809638106381163812638136381463815638166381763818638196382063821638226382363824638256382663827638286382963830638316383263833638346383563836638376383863839638406384163842638436384463845638466384763848638496385063851638526385363854638556385663857638586385963860638616386263863638646386563866638676386863869638706387163872638736387463875638766387763878638796388063881638826388363884638856388663887638886388963890638916389263893638946389563896638976389863899639006390163902639036390463905639066390763908639096391063911639126391363914639156391663917639186391963920639216392263923639246392563926639276392863929639306393163932639336393463935639366393763938639396394063941639426394363944639456394663947639486394963950639516395263953639546395563956639576395863959639606396163962639636396463965639666396763968639696397063971639726397363974639756397663977639786397963980639816398263983639846398563986639876398863989639906399163992639936399463995639966399763998639996400064001640026400364004640056400664007640086400964010640116401264013640146401564016640176401864019640206402164022640236402464025640266402764028640296403064031640326403364034640356403664037640386403964040640416404264043640446404564046640476404864049640506405164052640536405464055640566405764058640596406064061640626406364064640656406664067640686406964070640716407264073640746407564076640776407864079640806408164082640836408464085640866408764088640896409064091640926409364094640956409664097640986409964100641016410264103641046410564106641076410864109641106411164112641136411464115641166411764118641196412064121641226412364124641256412664127641286412964130641316413264133641346413564136641376413864139641406414164142641436414464145641466414764148641496415064151641526415364154641556415664157641586415964160641616416264163641646416564166641676416864169641706417164172641736417464175641766417764178641796418064181641826418364184641856418664187641886418964190641916419264193641946419564196641976419864199642006420164202642036420464205642066420764208642096421064211642126421364214642156421664217642186421964220642216422264223642246422564226642276422864229642306423164232642336423464235642366423764238642396424064241642426424364244642456424664247642486424964250642516425264253642546425564256642576425864259642606426164262642636426464265642666426764268642696427064271642726427364274642756427664277642786427964280642816428264283642846428564286642876428864289642906429164292642936429464295642966429764298642996430064301643026430364304643056430664307643086430964310643116431264313643146431564316643176431864319643206432164322643236432464325643266432764328643296433064331643326433364334643356433664337643386433964340643416434264343643446434564346643476434864349643506435164352643536435464355643566435764358643596436064361643626436364364643656436664367643686436964370643716437264373643746437564376643776437864379643806438164382643836438464385643866438764388643896439064391643926439364394643956439664397643986439964400644016440264403644046440564406644076440864409644106441164412644136441464415644166441764418644196442064421644226442364424644256442664427644286442964430644316443264433644346443564436644376443864439644406444164442644436444464445644466444764448644496445064451644526445364454644556445664457644586445964460644616446264463644646446564466644676446864469644706447164472644736447464475644766447764478644796448064481644826448364484644856448664487644886448964490644916449264493644946449564496644976449864499645006450164502645036450464505645066450764508645096451064511645126451364514645156451664517645186451964520645216452264523645246452564526645276452864529645306453164532645336453464535645366453764538645396454064541645426454364544645456454664547645486454964550645516455264553645546455564556645576455864559645606456164562645636456464565645666456764568645696457064571645726457364574645756457664577645786457964580645816458264583645846458564586645876458864589645906459164592645936459464595645966459764598645996460064601646026460364604646056460664607646086460964610646116461264613646146461564616646176461864619646206462164622646236462464625646266462764628646296463064631646326463364634646356463664637646386463964640646416464264643646446464564646646476464864649646506465164652646536465464655646566465764658646596466064661646626466364664646656466664667646686466964670646716467264673646746467564676646776467864679646806468164682646836468464685646866468764688646896469064691646926469364694646956469664697646986469964700647016470264703647046470564706647076470864709647106471164712647136471464715647166471764718647196472064721647226472364724647256472664727647286472964730647316473264733647346473564736647376473864739647406474164742647436474464745647466474764748647496475064751647526475364754647556475664757647586475964760647616476264763647646476564766647676476864769647706477164772647736477464775647766477764778647796478064781647826478364784647856478664787647886478964790647916479264793647946479564796647976479864799648006480164802648036480464805648066480764808648096481064811648126481364814648156481664817648186481964820648216482264823648246482564826648276482864829648306483164832648336483464835648366483764838648396484064841648426484364844648456484664847648486484964850648516485264853648546485564856648576485864859648606486164862648636486464865648666486764868648696487064871648726487364874648756487664877648786487964880648816488264883648846488564886648876488864889648906489164892648936489464895648966489764898648996490064901649026490364904649056490664907649086490964910649116491264913649146491564916649176491864919649206492164922649236492464925649266492764928649296493064931649326493364934649356493664937649386493964940649416494264943649446494564946649476494864949649506495164952649536495464955649566495764958649596496064961649626496364964649656496664967649686496964970649716497264973649746497564976649776497864979649806498164982649836498464985649866498764988649896499064991649926499364994649956499664997649986499965000650016500265003650046500565006650076500865009650106501165012650136501465015650166501765018650196502065021650226502365024650256502665027650286502965030650316503265033650346503565036650376503865039650406504165042650436504465045650466504765048650496505065051650526505365054650556505665057650586505965060650616506265063650646506565066650676506865069650706507165072650736507465075650766507765078650796508065081650826508365084650856508665087650886508965090650916509265093650946509565096650976509865099651006510165102651036510465105651066510765108651096511065111651126511365114651156511665117651186511965120651216512265123651246512565126651276512865129651306513165132651336513465135651366513765138651396514065141651426514365144651456514665147651486514965150651516515265153651546515565156651576515865159651606516165162651636516465165651666516765168651696517065171651726517365174651756517665177651786517965180651816518265183651846518565186651876518865189651906519165192651936519465195651966519765198651996520065201652026520365204652056520665207652086520965210652116521265213652146521565216652176521865219652206522165222652236522465225652266522765228652296523065231652326523365234652356523665237652386523965240652416524265243652446524565246652476524865249652506525165252652536525465255652566525765258652596526065261652626526365264652656526665267652686526965270652716527265273652746527565276652776527865279652806528165282652836528465285652866528765288652896529065291652926529365294652956529665297652986529965300653016530265303653046530565306653076530865309653106531165312653136531465315653166531765318653196532065321653226532365324653256532665327653286532965330653316533265333653346533565336653376533865339653406534165342653436534465345653466534765348653496535065351653526535365354653556535665357653586535965360653616536265363653646536565366653676536865369653706537165372653736537465375653766537765378653796538065381653826538365384653856538665387653886538965390653916539265393653946539565396653976539865399654006540165402654036540465405654066540765408654096541065411654126541365414654156541665417654186541965420654216542265423654246542565426654276542865429654306543165432654336543465435654366543765438654396544065441654426544365444654456544665447654486544965450654516545265453654546545565456654576545865459654606546165462654636546465465654666546765468654696547065471654726547365474654756547665477654786547965480654816548265483654846548565486654876548865489654906549165492654936549465495654966549765498654996550065501655026550365504655056550665507655086550965510655116551265513655146551565516655176551865519655206552165522655236552465525655266552765528655296553065531655326553365534655356553665537655386553965540655416554265543655446554565546655476554865549655506555165552655536555465555655566555765558655596556065561655626556365564655656556665567655686556965570655716557265573655746557565576655776557865579655806558165582655836558465585655866558765588655896559065591655926559365594655956559665597655986559965600656016560265603656046560565606656076560865609656106561165612656136561465615656166561765618656196562065621656226562365624656256562665627656286562965630656316563265633656346563565636656376563865639656406564165642656436564465645656466564765648656496565065651656526565365654656556565665657656586565965660656616566265663656646566565666656676566865669656706567165672656736567465675656766567765678656796568065681656826568365684656856568665687656886568965690656916569265693656946569565696656976569865699657006570165702657036570465705657066570765708657096571065711657126571365714657156571665717657186571965720657216572265723657246572565726657276572865729657306573165732657336573465735657366573765738657396574065741657426574365744657456574665747657486574965750657516575265753657546575565756657576575865759657606576165762657636576465765657666576765768657696577065771657726577365774657756577665777657786577965780657816578265783657846578565786657876578865789657906579165792657936579465795657966579765798657996580065801658026580365804658056580665807658086580965810658116581265813658146581565816658176581865819658206582165822658236582465825658266582765828658296583065831658326583365834658356583665837658386583965840658416584265843658446584565846658476584865849658506585165852658536585465855658566585765858658596586065861658626586365864658656586665867658686586965870658716587265873658746587565876658776587865879658806588165882658836588465885658866588765888658896589065891658926589365894658956589665897658986589965900659016590265903659046590565906659076590865909659106591165912659136591465915659166591765918659196592065921659226592365924659256592665927659286592965930659316593265933659346593565936659376593865939659406594165942659436594465945659466594765948659496595065951659526595365954659556595665957659586595965960659616596265963659646596565966659676596865969659706597165972659736597465975659766597765978659796598065981659826598365984659856598665987659886598965990659916599265993659946599565996659976599865999660006600166002660036600466005660066600766008660096601066011660126601366014660156601666017660186601966020660216602266023660246602566026660276602866029660306603166032660336603466035660366603766038660396604066041660426604366044660456604666047660486604966050660516605266053660546605566056660576605866059660606606166062660636606466065660666606766068660696607066071660726607366074660756607666077660786607966080660816608266083660846608566086660876608866089660906609166092660936609466095660966609766098660996610066101661026610366104661056610666107661086610966110661116611266113661146611566116661176611866119661206612166122661236612466125661266612766128661296613066131661326613366134661356613666137661386613966140661416614266143661446614566146661476614866149661506615166152661536615466155661566615766158661596616066161661626616366164661656616666167661686616966170661716617266173661746617566176661776617866179661806618166182661836618466185661866618766188661896619066191661926619366194661956619666197661986619966200662016620266203662046620566206662076620866209662106621166212662136621466215662166621766218662196622066221662226622366224662256622666227662286622966230662316623266233662346623566236662376623866239662406624166242662436624466245662466624766248662496625066251662526625366254662556625666257662586625966260662616626266263662646626566266662676626866269662706627166272662736627466275662766627766278662796628066281662826628366284662856628666287662886628966290662916629266293662946629566296662976629866299663006630166302663036630466305663066630766308663096631066311663126631366314663156631666317663186631966320663216632266323663246632566326663276632866329663306633166332663336633466335663366633766338663396634066341663426634366344663456634666347663486634966350663516635266353663546635566356663576635866359663606636166362663636636466365663666636766368663696637066371663726637366374663756637666377663786637966380663816638266383663846638566386663876638866389663906639166392663936639466395663966639766398663996640066401664026640366404664056640666407664086640966410664116641266413664146641566416664176641866419664206642166422664236642466425664266642766428664296643066431664326643366434664356643666437664386643966440664416644266443664446644566446664476644866449664506645166452664536645466455664566645766458664596646066461664626646366464664656646666467664686646966470664716647266473664746647566476664776647866479664806648166482664836648466485664866648766488664896649066491664926649366494664956649666497664986649966500665016650266503665046650566506665076650866509665106651166512665136651466515665166651766518665196652066521665226652366524665256652666527665286652966530665316653266533665346653566536665376653866539665406654166542665436654466545665466654766548665496655066551665526655366554665556655666557665586655966560665616656266563665646656566566665676656866569665706657166572665736657466575665766657766578665796658066581665826658366584665856658666587665886658966590665916659266593665946659566596665976659866599666006660166602666036660466605666066660766608666096661066611666126661366614666156661666617666186661966620666216662266623666246662566626666276662866629666306663166632666336663466635666366663766638666396664066641666426664366644666456664666647666486664966650666516665266653666546665566656666576665866659666606666166662666636666466665666666666766668666696667066671666726667366674666756667666677666786667966680666816668266683666846668566686666876668866689666906669166692666936669466695666966669766698666996670066701667026670366704667056670666707667086670966710667116671266713667146671566716667176671866719667206672166722667236672466725667266672766728667296673066731667326673366734667356673666737667386673966740667416674266743667446674566746667476674866749667506675166752667536675466755667566675766758667596676066761667626676366764667656676666767667686676966770667716677266773667746677566776667776677866779667806678166782667836678466785667866678766788667896679066791667926679366794667956679666797667986679966800668016680266803668046680566806668076680866809668106681166812668136681466815668166681766818668196682066821668226682366824668256682666827668286682966830668316683266833668346683566836668376683866839668406684166842668436684466845668466684766848668496685066851668526685366854668556685666857668586685966860668616686266863668646686566866668676686866869668706687166872668736687466875668766687766878668796688066881668826688366884668856688666887668886688966890668916689266893668946689566896668976689866899669006690166902669036690466905669066690766908669096691066911669126691366914669156691666917669186691966920669216692266923669246692566926669276692866929669306693166932669336693466935669366693766938669396694066941669426694366944669456694666947669486694966950669516695266953669546695566956669576695866959669606696166962669636696466965669666696766968669696697066971669726697366974669756697666977669786697966980669816698266983669846698566986669876698866989669906699166992669936699466995669966699766998669996700067001670026700367004670056700667007670086700967010670116701267013670146701567016670176701867019670206702167022670236702467025670266702767028670296703067031670326703367034670356703667037670386703967040670416704267043670446704567046670476704867049670506705167052670536705467055670566705767058670596706067061670626706367064670656706667067670686706967070670716707267073670746707567076670776707867079670806708167082670836708467085670866708767088670896709067091670926709367094670956709667097670986709967100671016710267103671046710567106671076710867109671106711167112671136711467115671166711767118671196712067121671226712367124671256712667127671286712967130671316713267133671346713567136671376713867139671406714167142671436714467145671466714767148671496715067151671526715367154671556715667157671586715967160671616716267163671646716567166671676716867169671706717167172671736717467175671766717767178671796718067181671826718367184671856718667187671886718967190671916719267193671946719567196671976719867199672006720167202672036720467205672066720767208672096721067211672126721367214672156721667217672186721967220672216722267223672246722567226672276722867229672306723167232672336723467235672366723767238672396724067241672426724367244672456724667247672486724967250672516725267253672546725567256672576725867259672606726167262672636726467265672666726767268672696727067271672726727367274672756727667277672786727967280672816728267283672846728567286672876728867289672906729167292672936729467295672966729767298672996730067301673026730367304673056730667307673086730967310673116731267313673146731567316673176731867319673206732167322673236732467325673266732767328673296733067331673326733367334673356733667337673386733967340673416734267343673446734567346673476734867349673506735167352673536735467355673566735767358673596736067361673626736367364673656736667367673686736967370673716737267373673746737567376673776737867379673806738167382673836738467385673866738767388673896739067391673926739367394673956739667397673986739967400674016740267403674046740567406674076740867409674106741167412674136741467415674166741767418674196742067421674226742367424674256742667427674286742967430674316743267433674346743567436674376743867439674406744167442674436744467445674466744767448674496745067451674526745367454674556745667457674586745967460674616746267463674646746567466674676746867469674706747167472674736747467475674766747767478674796748067481674826748367484674856748667487674886748967490674916749267493674946749567496674976749867499675006750167502675036750467505675066750767508675096751067511675126751367514675156751667517675186751967520675216752267523675246752567526675276752867529675306753167532675336753467535675366753767538675396754067541675426754367544675456754667547675486754967550675516755267553675546755567556675576755867559675606756167562675636756467565675666756767568675696757067571675726757367574675756757667577675786757967580675816758267583675846758567586675876758867589675906759167592675936759467595675966759767598675996760067601676026760367604676056760667607676086760967610676116761267613676146761567616676176761867619676206762167622676236762467625676266762767628676296763067631676326763367634676356763667637676386763967640676416764267643676446764567646676476764867649676506765167652676536765467655676566765767658676596766067661676626766367664676656766667667676686766967670676716767267673676746767567676676776767867679676806768167682676836768467685676866768767688676896769067691676926769367694676956769667697676986769967700677016770267703677046770567706677076770867709677106771167712677136771467715677166771767718677196772067721677226772367724677256772667727677286772967730677316773267733677346773567736677376773867739677406774167742677436774467745677466774767748677496775067751677526775367754677556775667757677586775967760677616776267763677646776567766677676776867769677706777167772677736777467775677766777767778677796778067781677826778367784677856778667787677886778967790677916779267793677946779567796677976779867799678006780167802678036780467805678066780767808678096781067811678126781367814678156781667817678186781967820678216782267823678246782567826678276782867829678306783167832678336783467835678366783767838678396784067841678426784367844678456784667847678486784967850678516785267853678546785567856678576785867859678606786167862678636786467865678666786767868678696787067871678726787367874678756787667877678786787967880678816788267883678846788567886678876788867889678906789167892678936789467895678966789767898678996790067901679026790367904679056790667907679086790967910679116791267913679146791567916679176791867919679206792167922679236792467925679266792767928679296793067931679326793367934679356793667937679386793967940679416794267943679446794567946679476794867949679506795167952679536795467955679566795767958679596796067961679626796367964679656796667967679686796967970679716797267973679746797567976679776797867979679806798167982679836798467985679866798767988679896799067991679926799367994679956799667997679986799968000680016800268003680046800568006680076800868009680106801168012680136801468015680166801768018680196802068021680226802368024680256802668027680286802968030680316803268033680346803568036680376803868039680406804168042680436804468045680466804768048680496805068051680526805368054680556805668057680586805968060680616806268063680646806568066680676806868069680706807168072680736807468075680766807768078680796808068081680826808368084680856808668087680886808968090680916809268093680946809568096680976809868099681006810168102681036810468105681066810768108681096811068111681126811368114681156811668117681186811968120681216812268123681246812568126681276812868129681306813168132681336813468135681366813768138681396814068141681426814368144681456814668147681486814968150681516815268153681546815568156681576815868159681606816168162681636816468165681666816768168681696817068171681726817368174681756817668177681786817968180681816818268183681846818568186681876818868189681906819168192681936819468195681966819768198681996820068201682026820368204682056820668207682086820968210682116821268213682146821568216682176821868219682206822168222682236822468225682266822768228682296823068231682326823368234682356823668237682386823968240682416824268243682446824568246682476824868249682506825168252682536825468255682566825768258682596826068261682626826368264682656826668267682686826968270682716827268273682746827568276682776827868279682806828168282682836828468285682866828768288682896829068291682926829368294682956829668297682986829968300683016830268303683046830568306683076830868309683106831168312683136831468315683166831768318683196832068321683226832368324683256832668327683286832968330683316833268333683346833568336683376833868339683406834168342683436834468345683466834768348683496835068351683526835368354683556835668357683586835968360683616836268363683646836568366683676836868369683706837168372683736837468375683766837768378683796838068381683826838368384683856838668387683886838968390683916839268393683946839568396683976839868399684006840168402684036840468405684066840768408684096841068411684126841368414684156841668417684186841968420684216842268423684246842568426684276842868429684306843168432684336843468435684366843768438684396844068441684426844368444684456844668447684486844968450684516845268453684546845568456684576845868459684606846168462684636846468465684666846768468684696847068471684726847368474684756847668477684786847968480684816848268483684846848568486684876848868489684906849168492684936849468495684966849768498684996850068501685026850368504685056850668507685086850968510685116851268513685146851568516685176851868519685206852168522685236852468525685266852768528685296853068531685326853368534685356853668537685386853968540685416854268543685446854568546685476854868549685506855168552685536855468555685566855768558685596856068561685626856368564685656856668567685686856968570685716857268573685746857568576685776857868579685806858168582685836858468585685866858768588685896859068591685926859368594685956859668597685986859968600686016860268603686046860568606686076860868609686106861168612686136861468615686166861768618686196862068621686226862368624686256862668627686286862968630686316863268633686346863568636686376863868639686406864168642686436864468645686466864768648686496865068651686526865368654686556865668657686586865968660686616866268663686646866568666686676866868669686706867168672686736867468675686766867768678686796868068681686826868368684686856868668687686886868968690686916869268693686946869568696686976869868699687006870168702687036870468705687066870768708687096871068711687126871368714687156871668717687186871968720687216872268723687246872568726687276872868729687306873168732687336873468735687366873768738687396874068741687426874368744687456874668747687486874968750687516875268753687546875568756687576875868759687606876168762687636876468765687666876768768687696877068771687726877368774687756877668777687786877968780687816878268783687846878568786687876878868789687906879168792687936879468795687966879768798687996880068801688026880368804688056880668807688086880968810688116881268813688146881568816688176881868819688206882168822688236882468825688266882768828688296883068831688326883368834688356883668837688386883968840688416884268843688446884568846688476884868849688506885168852688536885468855688566885768858688596886068861688626886368864688656886668867688686886968870688716887268873688746887568876688776887868879688806888168882688836888468885688866888768888688896889068891688926889368894688956889668897688986889968900689016890268903689046890568906689076890868909689106891168912689136891468915689166891768918689196892068921689226892368924689256892668927689286892968930689316893268933689346893568936689376893868939689406894168942689436894468945689466894768948689496895068951689526895368954689556895668957689586895968960689616896268963689646896568966689676896868969689706897168972689736897468975689766897768978689796898068981689826898368984689856898668987689886898968990689916899268993689946899568996689976899868999690006900169002690036900469005690066900769008690096901069011690126901369014690156901669017690186901969020690216902269023690246902569026690276902869029690306903169032690336903469035690366903769038690396904069041690426904369044690456904669047690486904969050690516905269053690546905569056690576905869059690606906169062690636906469065690666906769068690696907069071690726907369074690756907669077690786907969080690816908269083690846908569086690876908869089690906909169092690936909469095690966909769098690996910069101691026910369104691056910669107691086910969110691116911269113691146911569116691176911869119691206912169122691236912469125691266912769128691296913069131691326913369134691356913669137691386913969140691416914269143691446914569146691476914869149691506915169152691536915469155691566915769158691596916069161691626916369164691656916669167691686916969170691716917269173691746917569176691776917869179691806918169182691836918469185691866918769188691896919069191691926919369194691956919669197691986919969200692016920269203692046920569206692076920869209692106921169212692136921469215692166921769218692196922069221692226922369224692256922669227692286922969230692316923269233692346923569236692376923869239692406924169242692436924469245692466924769248692496925069251692526925369254692556925669257692586925969260692616926269263692646926569266692676926869269692706927169272692736927469275692766927769278692796928069281692826928369284692856928669287692886928969290692916929269293692946929569296692976929869299693006930169302693036930469305693066930769308693096931069311693126931369314693156931669317693186931969320693216932269323693246932569326693276932869329693306933169332693336933469335693366933769338693396934069341693426934369344693456934669347693486934969350693516935269353693546935569356693576935869359693606936169362693636936469365693666936769368693696937069371693726937369374693756937669377693786937969380693816938269383693846938569386693876938869389693906939169392693936939469395693966939769398693996940069401694026940369404694056940669407694086940969410694116941269413694146941569416694176941869419694206942169422694236942469425694266942769428694296943069431694326943369434694356943669437694386943969440694416944269443694446944569446694476944869449694506945169452694536945469455694566945769458694596946069461694626946369464694656946669467694686946969470694716947269473694746947569476694776947869479694806948169482694836948469485694866948769488694896949069491694926949369494694956949669497694986949969500695016950269503695046950569506695076950869509695106951169512695136951469515695166951769518695196952069521695226952369524695256952669527695286952969530695316953269533695346953569536695376953869539695406954169542695436954469545695466954769548695496955069551695526955369554695556955669557695586955969560695616956269563695646956569566695676956869569695706957169572695736957469575695766957769578695796958069581695826958369584695856958669587695886958969590695916959269593695946959569596695976959869599696006960169602696036960469605696066960769608696096961069611696126961369614696156961669617696186961969620696216962269623696246962569626696276962869629696306963169632696336963469635696366963769638696396964069641696426964369644696456964669647696486964969650696516965269653696546965569656696576965869659696606966169662696636966469665696666966769668696696967069671696726967369674696756967669677696786967969680696816968269683696846968569686696876968869689696906969169692696936969469695696966969769698696996970069701697026970369704697056970669707697086970969710697116971269713697146971569716697176971869719697206972169722697236972469725697266972769728697296973069731697326973369734697356973669737697386973969740697416974269743697446974569746697476974869749697506975169752697536975469755697566975769758697596976069761697626976369764697656976669767697686976969770697716977269773697746977569776697776977869779697806978169782697836978469785697866978769788697896979069791697926979369794697956979669797697986979969800698016980269803698046980569806698076980869809698106981169812698136981469815698166981769818698196982069821698226982369824698256982669827698286982969830698316983269833698346983569836698376983869839698406984169842698436984469845698466984769848698496985069851698526985369854698556985669857698586985969860698616986269863698646986569866698676986869869698706987169872698736987469875698766987769878698796988069881698826988369884698856988669887698886988969890698916989269893698946989569896698976989869899699006990169902699036990469905699066990769908699096991069911699126991369914699156991669917699186991969920699216992269923699246992569926699276992869929699306993169932699336993469935699366993769938699396994069941699426994369944699456994669947699486994969950699516995269953699546995569956699576995869959699606996169962699636996469965699666996769968699696997069971699726997369974699756997669977699786997969980699816998269983699846998569986699876998869989699906999169992699936999469995699966999769998699997000070001700027000370004700057000670007700087000970010700117001270013700147001570016700177001870019700207002170022700237002470025700267002770028700297003070031700327003370034700357003670037700387003970040700417004270043700447004570046700477004870049700507005170052700537005470055700567005770058700597006070061700627006370064700657006670067700687006970070700717007270073700747007570076700777007870079700807008170082700837008470085700867008770088700897009070091700927009370094700957009670097700987009970100701017010270103701047010570106701077010870109701107011170112701137011470115701167011770118701197012070121701227012370124701257012670127701287012970130701317013270133701347013570136701377013870139701407014170142701437014470145701467014770148701497015070151701527015370154701557015670157701587015970160701617016270163701647016570166701677016870169701707017170172701737017470175701767017770178701797018070181701827018370184701857018670187701887018970190701917019270193701947019570196701977019870199702007020170202702037020470205702067020770208702097021070211702127021370214702157021670217702187021970220702217022270223702247022570226702277022870229702307023170232702337023470235702367023770238702397024070241702427024370244702457024670247702487024970250702517025270253702547025570256702577025870259702607026170262702637026470265702667026770268702697027070271702727027370274702757027670277702787027970280702817028270283702847028570286702877028870289702907029170292702937029470295702967029770298702997030070301703027030370304703057030670307703087030970310703117031270313703147031570316703177031870319703207032170322703237032470325703267032770328703297033070331703327033370334703357033670337703387033970340703417034270343703447034570346703477034870349703507035170352703537035470355703567035770358703597036070361703627036370364703657036670367703687036970370703717037270373703747037570376703777037870379703807038170382703837038470385703867038770388703897039070391703927039370394703957039670397703987039970400704017040270403704047040570406704077040870409704107041170412704137041470415704167041770418704197042070421704227042370424704257042670427704287042970430704317043270433704347043570436704377043870439704407044170442704437044470445704467044770448704497045070451704527045370454704557045670457704587045970460704617046270463704647046570466704677046870469704707047170472704737047470475704767047770478704797048070481704827048370484704857048670487704887048970490704917049270493704947049570496704977049870499705007050170502705037050470505705067050770508705097051070511705127051370514705157051670517705187051970520705217052270523705247052570526705277052870529705307053170532705337053470535705367053770538705397054070541705427054370544705457054670547705487054970550705517055270553705547055570556705577055870559705607056170562705637056470565705667056770568705697057070571705727057370574705757057670577705787057970580705817058270583705847058570586705877058870589705907059170592705937059470595705967059770598705997060070601706027060370604706057060670607706087060970610706117061270613706147061570616706177061870619706207062170622706237062470625706267062770628706297063070631706327063370634706357063670637706387063970640706417064270643706447064570646706477064870649706507065170652706537065470655706567065770658706597066070661706627066370664706657066670667706687066970670706717067270673706747067570676706777067870679706807068170682706837068470685706867068770688706897069070691706927069370694706957069670697706987069970700707017070270703707047070570706707077070870709707107071170712707137071470715707167071770718707197072070721707227072370724707257072670727707287072970730707317073270733707347073570736707377073870739707407074170742707437074470745707467074770748707497075070751707527075370754707557075670757707587075970760707617076270763707647076570766707677076870769707707077170772707737077470775707767077770778707797078070781707827078370784707857078670787707887078970790707917079270793707947079570796707977079870799708007080170802708037080470805708067080770808708097081070811708127081370814708157081670817708187081970820708217082270823708247082570826708277082870829708307083170832708337083470835708367083770838708397084070841708427084370844708457084670847708487084970850708517085270853708547085570856708577085870859708607086170862708637086470865708667086770868708697087070871708727087370874708757087670877708787087970880708817088270883708847088570886708877088870889708907089170892708937089470895708967089770898708997090070901709027090370904709057090670907709087090970910709117091270913709147091570916709177091870919709207092170922709237092470925709267092770928709297093070931709327093370934709357093670937709387093970940709417094270943709447094570946709477094870949709507095170952709537095470955709567095770958709597096070961709627096370964709657096670967709687096970970709717097270973709747097570976709777097870979709807098170982709837098470985709867098770988709897099070991709927099370994709957099670997709987099971000710017100271003710047100571006710077100871009710107101171012710137101471015710167101771018710197102071021710227102371024710257102671027710287102971030710317103271033710347103571036710377103871039710407104171042710437104471045710467104771048710497105071051710527105371054710557105671057710587105971060710617106271063710647106571066710677106871069710707107171072710737107471075710767107771078710797108071081710827108371084710857108671087710887108971090710917109271093710947109571096710977109871099711007110171102711037110471105711067110771108711097111071111711127111371114711157111671117711187111971120711217112271123711247112571126711277112871129711307113171132711337113471135711367113771138711397114071141711427114371144711457114671147711487114971150711517115271153711547115571156711577115871159711607116171162711637116471165711667116771168711697117071171711727117371174711757117671177711787117971180711817118271183711847118571186711877118871189711907119171192711937119471195711967119771198711997120071201712027120371204712057120671207712087120971210712117121271213712147121571216712177121871219712207122171222712237122471225712267122771228712297123071231712327123371234712357123671237712387123971240712417124271243712447124571246712477124871249712507125171252712537125471255712567125771258712597126071261712627126371264712657126671267712687126971270712717127271273712747127571276712777127871279712807128171282712837128471285712867128771288712897129071291712927129371294712957129671297712987129971300713017130271303713047130571306713077130871309713107131171312713137131471315713167131771318713197132071321713227132371324713257132671327713287132971330713317133271333713347133571336713377133871339713407134171342713437134471345713467134771348713497135071351713527135371354713557135671357713587135971360713617136271363713647136571366713677136871369713707137171372713737137471375713767137771378713797138071381713827138371384713857138671387713887138971390713917139271393713947139571396713977139871399714007140171402714037140471405714067140771408714097141071411714127141371414714157141671417714187141971420714217142271423714247142571426714277142871429714307143171432714337143471435714367143771438714397144071441714427144371444714457144671447714487144971450714517145271453714547145571456714577145871459714607146171462714637146471465714667146771468714697147071471714727147371474714757147671477714787147971480714817148271483714847148571486714877148871489714907149171492714937149471495714967149771498714997150071501715027150371504715057150671507715087150971510715117151271513715147151571516715177151871519715207152171522715237152471525715267152771528715297153071531715327153371534715357153671537715387153971540715417154271543715447154571546715477154871549715507155171552715537155471555715567155771558715597156071561715627156371564715657156671567715687156971570715717157271573715747157571576715777157871579715807158171582715837158471585715867158771588715897159071591715927159371594715957159671597715987159971600716017160271603716047160571606716077160871609716107161171612716137161471615716167161771618716197162071621716227162371624716257162671627716287162971630716317163271633716347163571636716377163871639716407164171642716437164471645716467164771648716497165071651716527165371654716557165671657716587165971660716617166271663716647166571666716677166871669716707167171672716737167471675716767167771678716797168071681716827168371684716857168671687716887168971690716917169271693716947169571696716977169871699717007170171702717037170471705717067170771708717097171071711717127171371714717157171671717717187171971720717217172271723717247172571726717277172871729717307173171732717337173471735717367173771738717397174071741717427174371744717457174671747717487174971750717517175271753717547175571756717577175871759717607176171762717637176471765717667176771768717697177071771717727177371774717757177671777717787177971780717817178271783717847178571786717877178871789717907179171792717937179471795717967179771798717997180071801718027180371804718057180671807718087180971810718117181271813718147181571816718177181871819718207182171822718237182471825718267182771828718297183071831718327183371834718357183671837718387183971840718417184271843718447184571846718477184871849718507185171852718537185471855718567185771858718597186071861718627186371864718657186671867718687186971870718717187271873718747187571876718777187871879718807188171882718837188471885718867188771888718897189071891718927189371894718957189671897718987189971900719017190271903719047190571906719077190871909719107191171912719137191471915719167191771918719197192071921719227192371924719257192671927719287192971930719317193271933719347193571936719377193871939719407194171942719437194471945719467194771948719497195071951719527195371954719557195671957719587195971960719617196271963719647196571966719677196871969719707197171972719737197471975719767197771978719797198071981719827198371984719857198671987719887198971990719917199271993719947199571996719977199871999720007200172002720037200472005720067200772008720097201072011720127201372014720157201672017720187201972020720217202272023720247202572026720277202872029720307203172032720337203472035720367203772038720397204072041720427204372044720457204672047720487204972050720517205272053720547205572056720577205872059720607206172062720637206472065720667206772068720697207072071720727207372074720757207672077720787207972080720817208272083720847208572086720877208872089720907209172092720937209472095720967209772098720997210072101721027210372104721057210672107721087210972110721117211272113721147211572116721177211872119721207212172122721237212472125721267212772128721297213072131721327213372134721357213672137721387213972140721417214272143721447214572146721477214872149721507215172152721537215472155721567215772158721597216072161721627216372164721657216672167721687216972170721717217272173721747217572176721777217872179721807218172182721837218472185721867218772188721897219072191721927219372194721957219672197721987219972200722017220272203722047220572206722077220872209722107221172212722137221472215722167221772218722197222072221722227222372224722257222672227722287222972230722317223272233722347223572236722377223872239722407224172242722437224472245722467224772248722497225072251722527225372254722557225672257722587225972260722617226272263722647226572266722677226872269722707227172272722737227472275722767227772278722797228072281722827228372284722857228672287722887228972290722917229272293722947229572296722977229872299723007230172302723037230472305723067230772308723097231072311723127231372314723157231672317723187231972320723217232272323723247232572326723277232872329723307233172332723337233472335723367233772338723397234072341723427234372344723457234672347723487234972350723517235272353723547235572356723577235872359723607236172362723637236472365723667236772368723697237072371723727237372374723757237672377723787237972380723817238272383723847238572386723877238872389723907239172392723937239472395723967239772398723997240072401724027240372404724057240672407724087240972410724117241272413724147241572416724177241872419724207242172422724237242472425724267242772428724297243072431724327243372434724357243672437724387243972440724417244272443724447244572446724477244872449724507245172452724537245472455724567245772458724597246072461724627246372464724657246672467724687246972470724717247272473724747247572476724777247872479724807248172482724837248472485724867248772488724897249072491724927249372494724957249672497724987249972500725017250272503725047250572506725077250872509725107251172512725137251472515725167251772518725197252072521725227252372524725257252672527725287252972530725317253272533725347253572536725377253872539725407254172542725437254472545725467254772548725497255072551725527255372554725557255672557725587255972560725617256272563725647256572566725677256872569725707257172572725737257472575725767257772578725797258072581725827258372584725857258672587725887258972590725917259272593725947259572596725977259872599726007260172602726037260472605726067260772608726097261072611726127261372614726157261672617726187261972620726217262272623726247262572626726277262872629726307263172632726337263472635726367263772638726397264072641726427264372644726457264672647726487264972650726517265272653726547265572656726577265872659726607266172662726637266472665726667266772668726697267072671726727267372674726757267672677726787267972680726817268272683726847268572686726877268872689726907269172692726937269472695726967269772698726997270072701727027270372704727057270672707727087270972710727117271272713727147271572716727177271872719727207272172722727237272472725727267272772728727297273072731727327273372734727357273672737727387273972740727417274272743727447274572746727477274872749727507275172752727537275472755727567275772758727597276072761727627276372764727657276672767727687276972770727717277272773727747277572776727777277872779727807278172782727837278472785727867278772788727897279072791727927279372794727957279672797727987279972800728017280272803728047280572806728077280872809728107281172812728137281472815728167281772818728197282072821728227282372824728257282672827728287282972830728317283272833728347283572836728377283872839728407284172842728437284472845728467284772848728497285072851728527285372854728557285672857728587285972860728617286272863728647286572866728677286872869728707287172872728737287472875728767287772878728797288072881728827288372884728857288672887728887288972890728917289272893728947289572896728977289872899729007290172902729037290472905729067290772908729097291072911729127291372914729157291672917729187291972920729217292272923729247292572926729277292872929729307293172932729337293472935729367293772938729397294072941729427294372944729457294672947729487294972950729517295272953729547295572956729577295872959729607296172962729637296472965729667296772968729697297072971729727297372974729757297672977729787297972980729817298272983729847298572986729877298872989729907299172992729937299472995729967299772998729997300073001730027300373004730057300673007730087300973010730117301273013730147301573016730177301873019730207302173022730237302473025730267302773028730297303073031730327303373034730357303673037730387303973040730417304273043730447304573046730477304873049730507305173052730537305473055730567305773058730597306073061730627306373064730657306673067730687306973070730717307273073730747307573076730777307873079730807308173082730837308473085730867308773088730897309073091730927309373094730957309673097730987309973100731017310273103731047310573106731077310873109731107311173112731137311473115731167311773118731197312073121731227312373124731257312673127731287312973130731317313273133731347313573136731377313873139731407314173142731437314473145731467314773148731497315073151731527315373154731557315673157731587315973160731617316273163731647316573166731677316873169731707317173172731737317473175731767317773178731797318073181731827318373184731857318673187731887318973190731917319273193731947319573196731977319873199732007320173202732037320473205732067320773208732097321073211732127321373214732157321673217732187321973220732217322273223732247322573226732277322873229732307323173232732337323473235732367323773238732397324073241732427324373244732457324673247732487324973250732517325273253732547325573256732577325873259732607326173262732637326473265732667326773268732697327073271732727327373274732757327673277732787327973280732817328273283732847328573286732877328873289732907329173292732937329473295732967329773298732997330073301733027330373304733057330673307733087330973310733117331273313733147331573316733177331873319733207332173322733237332473325733267332773328733297333073331733327333373334733357333673337733387333973340733417334273343733447334573346733477334873349733507335173352733537335473355733567335773358733597336073361733627336373364733657336673367733687336973370733717337273373733747337573376733777337873379733807338173382733837338473385733867338773388733897339073391733927339373394733957339673397733987339973400734017340273403734047340573406734077340873409734107341173412734137341473415734167341773418734197342073421734227342373424734257342673427734287342973430734317343273433734347343573436734377343873439734407344173442734437344473445734467344773448734497345073451734527345373454734557345673457734587345973460734617346273463734647346573466734677346873469734707347173472734737347473475734767347773478734797348073481734827348373484734857348673487734887348973490734917349273493734947349573496734977349873499735007350173502735037350473505735067350773508735097351073511735127351373514735157351673517735187351973520735217352273523735247352573526735277352873529735307353173532735337353473535735367353773538735397354073541735427354373544735457354673547735487354973550735517355273553735547355573556735577355873559735607356173562735637356473565735667356773568735697357073571735727357373574735757357673577735787357973580735817358273583735847358573586735877358873589735907359173592735937359473595735967359773598735997360073601736027360373604736057360673607736087360973610736117361273613736147361573616736177361873619736207362173622736237362473625736267362773628736297363073631736327363373634736357363673637736387363973640736417364273643736447364573646736477364873649736507365173652736537365473655736567365773658736597366073661736627366373664736657366673667736687366973670736717367273673736747367573676736777367873679736807368173682736837368473685736867368773688736897369073691736927369373694736957369673697736987369973700737017370273703737047370573706737077370873709737107371173712737137371473715737167371773718737197372073721737227372373724737257372673727737287372973730737317373273733737347373573736737377373873739737407374173742737437374473745737467374773748737497375073751737527375373754737557375673757737587375973760737617376273763737647376573766737677376873769737707377173772737737377473775737767377773778737797378073781737827378373784737857378673787737887378973790737917379273793737947379573796737977379873799738007380173802738037380473805738067380773808738097381073811738127381373814738157381673817738187381973820738217382273823738247382573826738277382873829738307383173832738337383473835738367383773838738397384073841738427384373844738457384673847738487384973850738517385273853738547385573856738577385873859738607386173862738637386473865738667386773868738697387073871738727387373874738757387673877738787387973880738817388273883738847388573886738877388873889738907389173892738937389473895738967389773898738997390073901739027390373904739057390673907739087390973910739117391273913739147391573916739177391873919739207392173922739237392473925739267392773928739297393073931739327393373934739357393673937739387393973940739417394273943739447394573946739477394873949739507395173952739537395473955739567395773958739597396073961739627396373964739657396673967739687396973970739717397273973739747397573976739777397873979739807398173982739837398473985739867398773988739897399073991739927399373994739957399673997739987399974000740017400274003740047400574006740077400874009740107401174012740137401474015740167401774018740197402074021740227402374024740257402674027740287402974030740317403274033740347403574036740377403874039740407404174042740437404474045740467404774048740497405074051740527405374054740557405674057740587405974060740617406274063740647406574066740677406874069740707407174072740737407474075740767407774078740797408074081740827408374084740857408674087740887408974090740917409274093740947409574096740977409874099741007410174102741037410474105741067410774108741097411074111741127411374114741157411674117741187411974120741217412274123741247412574126741277412874129741307413174132741337413474135741367413774138741397414074141741427414374144741457414674147741487414974150741517415274153741547415574156741577415874159741607416174162741637416474165741667416774168741697417074171741727417374174741757417674177741787417974180741817418274183741847418574186741877418874189741907419174192741937419474195741967419774198741997420074201742027420374204742057420674207742087420974210742117421274213742147421574216742177421874219742207422174222742237422474225742267422774228742297423074231742327423374234742357423674237742387423974240742417424274243742447424574246742477424874249742507425174252742537425474255742567425774258742597426074261742627426374264742657426674267742687426974270742717427274273742747427574276742777427874279742807428174282742837428474285742867428774288742897429074291742927429374294742957429674297742987429974300743017430274303743047430574306743077430874309743107431174312743137431474315743167431774318743197432074321743227432374324743257432674327743287432974330743317433274333743347433574336743377433874339743407434174342743437434474345743467434774348743497435074351743527435374354743557435674357743587435974360743617436274363743647436574366743677436874369743707437174372743737437474375743767437774378743797438074381743827438374384743857438674387743887438974390743917439274393743947439574396743977439874399744007440174402744037440474405744067440774408744097441074411744127441374414744157441674417744187441974420744217442274423744247442574426744277442874429744307443174432744337443474435744367443774438744397444074441744427444374444744457444674447744487444974450744517445274453744547445574456744577445874459744607446174462744637446474465744667446774468744697447074471744727447374474744757447674477744787447974480744817448274483744847448574486744877448874489744907449174492744937449474495744967449774498744997450074501745027450374504745057450674507745087450974510745117451274513745147451574516745177451874519745207452174522745237452474525745267452774528745297453074531745327453374534745357453674537745387453974540745417454274543745447454574546745477454874549745507455174552745537455474555745567455774558745597456074561745627456374564745657456674567745687456974570745717457274573745747457574576745777457874579745807458174582745837458474585745867458774588745897459074591745927459374594745957459674597745987459974600746017460274603746047460574606746077460874609746107461174612746137461474615746167461774618746197462074621746227462374624746257462674627746287462974630746317463274633746347463574636746377463874639746407464174642746437464474645746467464774648746497465074651746527465374654746557465674657746587465974660746617466274663746647466574666746677466874669746707467174672746737467474675746767467774678746797468074681746827468374684746857468674687746887468974690746917469274693746947469574696746977469874699747007470174702747037470474705747067470774708747097471074711747127471374714747157471674717747187471974720747217472274723747247472574726747277472874729747307473174732747337473474735747367473774738747397474074741747427474374744747457474674747747487474974750747517475274753747547475574756747577475874759747607476174762747637476474765747667476774768747697477074771747727477374774747757477674777747787477974780747817478274783747847478574786747877478874789747907479174792747937479474795747967479774798747997480074801748027480374804748057480674807748087480974810748117481274813748147481574816748177481874819748207482174822748237482474825748267482774828748297483074831748327483374834748357483674837748387483974840748417484274843748447484574846748477484874849748507485174852748537485474855748567485774858748597486074861748627486374864748657486674867748687486974870748717487274873748747487574876748777487874879748807488174882748837488474885748867488774888748897489074891748927489374894748957489674897748987489974900749017490274903749047490574906749077490874909749107491174912749137491474915749167491774918749197492074921749227492374924749257492674927749287492974930749317493274933749347493574936749377493874939749407494174942749437494474945749467494774948749497495074951749527495374954749557495674957749587495974960749617496274963749647496574966749677496874969749707497174972749737497474975749767497774978749797498074981749827498374984749857498674987749887498974990749917499274993749947499574996749977499874999750007500175002750037500475005750067500775008750097501075011750127501375014750157501675017750187501975020750217502275023750247502575026750277502875029750307503175032750337503475035750367503775038750397504075041750427504375044750457504675047750487504975050750517505275053750547505575056750577505875059750607506175062750637506475065750667506775068750697507075071750727507375074750757507675077750787507975080750817508275083750847508575086750877508875089750907509175092750937509475095750967509775098750997510075101751027510375104751057510675107751087510975110751117511275113751147511575116751177511875119751207512175122751237512475125751267512775128751297513075131751327513375134751357513675137751387513975140751417514275143751447514575146751477514875149751507515175152751537515475155751567515775158751597516075161751627516375164751657516675167751687516975170751717517275173751747517575176751777517875179751807518175182751837518475185751867518775188751897519075191751927519375194751957519675197751987519975200752017520275203752047520575206752077520875209752107521175212752137521475215752167521775218752197522075221752227522375224752257522675227752287522975230752317523275233752347523575236752377523875239752407524175242752437524475245752467524775248752497525075251752527525375254752557525675257752587525975260752617526275263752647526575266752677526875269752707527175272752737527475275752767527775278752797528075281752827528375284752857528675287752887528975290752917529275293752947529575296752977529875299753007530175302753037530475305753067530775308753097531075311753127531375314753157531675317753187531975320753217532275323753247532575326753277532875329753307533175332753337533475335753367533775338753397534075341753427534375344753457534675347753487534975350753517535275353753547535575356753577535875359753607536175362753637536475365753667536775368753697537075371753727537375374753757537675377753787537975380753817538275383753847538575386753877538875389753907539175392753937539475395753967539775398753997540075401754027540375404754057540675407754087540975410754117541275413754147541575416754177541875419754207542175422754237542475425754267542775428754297543075431754327543375434754357543675437754387543975440754417544275443754447544575446754477544875449754507545175452754537545475455754567545775458754597546075461754627546375464754657546675467754687546975470754717547275473754747547575476754777547875479754807548175482754837548475485754867548775488754897549075491754927549375494754957549675497754987549975500755017550275503755047550575506755077550875509755107551175512755137551475515755167551775518755197552075521755227552375524755257552675527755287552975530755317553275533755347553575536755377553875539755407554175542755437554475545755467554775548755497555075551755527555375554755557555675557755587555975560755617556275563755647556575566755677556875569755707557175572755737557475575755767557775578755797558075581755827558375584755857558675587755887558975590755917559275593755947559575596755977559875599756007560175602756037560475605756067560775608756097561075611756127561375614756157561675617756187561975620756217562275623756247562575626756277562875629756307563175632756337563475635756367563775638756397564075641756427564375644756457564675647756487564975650756517565275653756547565575656756577565875659756607566175662756637566475665756667566775668756697567075671756727567375674756757567675677756787567975680756817568275683756847568575686756877568875689756907569175692756937569475695756967569775698756997570075701757027570375704757057570675707757087570975710757117571275713757147571575716757177571875719757207572175722757237572475725757267572775728757297573075731757327573375734757357573675737757387573975740757417574275743757447574575746757477574875749757507575175752757537575475755757567575775758757597576075761757627576375764757657576675767757687576975770757717577275773757747577575776757777577875779757807578175782757837578475785757867578775788757897579075791757927579375794757957579675797757987579975800758017580275803758047580575806758077580875809758107581175812758137581475815758167581775818758197582075821758227582375824758257582675827758287582975830758317583275833758347583575836758377583875839758407584175842758437584475845758467584775848758497585075851758527585375854758557585675857758587585975860758617586275863758647586575866758677586875869758707587175872758737587475875758767587775878758797588075881758827588375884758857588675887758887588975890758917589275893758947589575896758977589875899759007590175902759037590475905759067590775908759097591075911759127591375914759157591675917759187591975920759217592275923759247592575926759277592875929759307593175932759337593475935759367593775938759397594075941759427594375944759457594675947759487594975950759517595275953759547595575956759577595875959759607596175962759637596475965759667596775968759697597075971759727597375974759757597675977759787597975980759817598275983759847598575986759877598875989759907599175992759937599475995759967599775998759997600076001760027600376004760057600676007760087600976010760117601276013760147601576016760177601876019760207602176022760237602476025760267602776028760297603076031760327603376034760357603676037760387603976040760417604276043760447604576046760477604876049760507605176052760537605476055760567605776058760597606076061760627606376064760657606676067760687606976070760717607276073760747607576076760777607876079760807608176082760837608476085760867608776088760897609076091760927609376094760957609676097760987609976100761017610276103761047610576106761077610876109761107611176112761137611476115761167611776118761197612076121761227612376124761257612676127761287612976130761317613276133761347613576136761377613876139761407614176142761437614476145761467614776148761497615076151761527615376154761557615676157761587615976160761617616276163761647616576166761677616876169761707617176172761737617476175761767617776178761797618076181761827618376184761857618676187761887618976190761917619276193761947619576196761977619876199762007620176202762037620476205762067620776208762097621076211762127621376214762157621676217762187621976220762217622276223762247622576226762277622876229762307623176232762337623476235762367623776238762397624076241762427624376244762457624676247762487624976250762517625276253762547625576256762577625876259762607626176262762637626476265762667626776268762697627076271762727627376274762757627676277762787627976280762817628276283762847628576286762877628876289762907629176292762937629476295762967629776298762997630076301763027630376304763057630676307763087630976310763117631276313763147631576316763177631876319763207632176322763237632476325763267632776328763297633076331763327633376334763357633676337763387633976340763417634276343763447634576346763477634876349763507635176352763537635476355763567635776358763597636076361763627636376364763657636676367763687636976370763717637276373763747637576376763777637876379763807638176382763837638476385763867638776388763897639076391763927639376394763957639676397763987639976400764017640276403764047640576406764077640876409764107641176412764137641476415764167641776418764197642076421764227642376424764257642676427764287642976430764317643276433764347643576436764377643876439764407644176442764437644476445764467644776448764497645076451764527645376454764557645676457764587645976460764617646276463764647646576466764677646876469764707647176472764737647476475764767647776478764797648076481764827648376484764857648676487764887648976490764917649276493764947649576496764977649876499765007650176502765037650476505765067650776508765097651076511765127651376514765157651676517765187651976520765217652276523765247652576526765277652876529765307653176532765337653476535765367653776538765397654076541765427654376544765457654676547765487654976550765517655276553765547655576556765577655876559765607656176562765637656476565765667656776568765697657076571765727657376574765757657676577765787657976580765817658276583765847658576586765877658876589765907659176592765937659476595765967659776598765997660076601766027660376604766057660676607766087660976610766117661276613766147661576616766177661876619766207662176622766237662476625766267662776628766297663076631766327663376634766357663676637766387663976640766417664276643766447664576646766477664876649766507665176652766537665476655766567665776658766597666076661766627666376664766657666676667766687666976670766717667276673766747667576676766777667876679766807668176682766837668476685766867668776688766897669076691766927669376694766957669676697766987669976700767017670276703767047670576706767077670876709767107671176712767137671476715767167671776718767197672076721767227672376724767257672676727767287672976730767317673276733767347673576736767377673876739767407674176742767437674476745767467674776748767497675076751767527675376754767557675676757767587675976760767617676276763767647676576766767677676876769767707677176772767737677476775767767677776778767797678076781767827678376784767857678676787767887678976790767917679276793767947679576796767977679876799768007680176802768037680476805768067680776808768097681076811768127681376814768157681676817768187681976820768217682276823768247682576826768277682876829768307683176832768337683476835768367683776838768397684076841768427684376844768457684676847768487684976850768517685276853768547685576856768577685876859768607686176862768637686476865768667686776868768697687076871768727687376874768757687676877768787687976880768817688276883768847688576886768877688876889768907689176892768937689476895768967689776898768997690076901769027690376904769057690676907769087690976910769117691276913769147691576916769177691876919769207692176922769237692476925769267692776928769297693076931769327693376934769357693676937769387693976940769417694276943769447694576946769477694876949769507695176952769537695476955769567695776958769597696076961769627696376964769657696676967769687696976970769717697276973769747697576976769777697876979769807698176982769837698476985769867698776988769897699076991769927699376994769957699676997769987699977000770017700277003770047700577006770077700877009770107701177012770137701477015770167701777018770197702077021770227702377024770257702677027770287702977030770317703277033770347703577036770377703877039770407704177042770437704477045770467704777048770497705077051770527705377054770557705677057770587705977060770617706277063770647706577066770677706877069770707707177072770737707477075770767707777078770797708077081770827708377084770857708677087770887708977090770917709277093770947709577096770977709877099771007710177102771037710477105771067710777108771097711077111771127711377114771157711677117771187711977120771217712277123771247712577126771277712877129771307713177132771337713477135771367713777138771397714077141771427714377144771457714677147771487714977150771517715277153771547715577156771577715877159771607716177162771637716477165771667716777168771697717077171771727717377174771757717677177771787717977180771817718277183771847718577186771877718877189771907719177192771937719477195771967719777198771997720077201772027720377204772057720677207772087720977210772117721277213772147721577216772177721877219772207722177222772237722477225772267722777228772297723077231772327723377234772357723677237772387723977240772417724277243772447724577246772477724877249772507725177252772537725477255772567725777258772597726077261772627726377264772657726677267772687726977270772717727277273772747727577276772777727877279772807728177282772837728477285772867728777288772897729077291772927729377294772957729677297772987729977300773017730277303773047730577306773077730877309773107731177312773137731477315773167731777318773197732077321773227732377324773257732677327773287732977330773317733277333773347733577336773377733877339773407734177342773437734477345773467734777348773497735077351773527735377354773557735677357773587735977360773617736277363773647736577366773677736877369773707737177372773737737477375773767737777378773797738077381773827738377384773857738677387773887738977390773917739277393773947739577396773977739877399774007740177402774037740477405774067740777408774097741077411774127741377414774157741677417774187741977420774217742277423774247742577426774277742877429774307743177432774337743477435774367743777438774397744077441774427744377444774457744677447774487744977450774517745277453774547745577456774577745877459774607746177462774637746477465774667746777468774697747077471774727747377474774757747677477774787747977480774817748277483774847748577486774877748877489774907749177492774937749477495774967749777498774997750077501775027750377504775057750677507775087750977510775117751277513775147751577516775177751877519775207752177522775237752477525775267752777528775297753077531775327753377534775357753677537775387753977540775417754277543775447754577546775477754877549775507755177552775537755477555775567755777558775597756077561775627756377564775657756677567775687756977570775717757277573775747757577576775777757877579775807758177582775837758477585775867758777588775897759077591775927759377594775957759677597775987759977600776017760277603776047760577606776077760877609776107761177612776137761477615776167761777618776197762077621776227762377624776257762677627776287762977630776317763277633776347763577636776377763877639776407764177642776437764477645776467764777648776497765077651776527765377654776557765677657776587765977660776617766277663776647766577666776677766877669776707767177672776737767477675776767767777678776797768077681776827768377684776857768677687776887768977690776917769277693776947769577696776977769877699777007770177702777037770477705777067770777708777097771077711777127771377714777157771677717777187771977720777217772277723777247772577726777277772877729777307773177732777337773477735777367773777738777397774077741777427774377744777457774677747777487774977750777517775277753777547775577756777577775877759777607776177762777637776477765777667776777768777697777077771777727777377774777757777677777777787777977780777817778277783777847778577786777877778877789777907779177792777937779477795777967779777798777997780077801778027780377804778057780677807778087780977810778117781277813778147781577816778177781877819778207782177822778237782477825778267782777828778297783077831778327783377834778357783677837778387783977840778417784277843778447784577846778477784877849778507785177852778537785477855778567785777858778597786077861778627786377864778657786677867778687786977870778717787277873778747787577876778777787877879778807788177882778837788477885778867788777888778897789077891778927789377894778957789677897778987789977900779017790277903779047790577906779077790877909779107791177912779137791477915779167791777918779197792077921779227792377924779257792677927779287792977930779317793277933779347793577936779377793877939779407794177942779437794477945779467794777948779497795077951779527795377954779557795677957779587795977960779617796277963779647796577966779677796877969779707797177972779737797477975779767797777978779797798077981779827798377984779857798677987779887798977990779917799277993779947799577996779977799877999780007800178002780037800478005780067800778008780097801078011780127801378014780157801678017780187801978020780217802278023780247802578026780277802878029780307803178032780337803478035780367803778038780397804078041780427804378044780457804678047780487804978050780517805278053780547805578056780577805878059780607806178062780637806478065780667806778068780697807078071780727807378074780757807678077780787807978080780817808278083780847808578086780877808878089780907809178092780937809478095780967809778098780997810078101781027810378104781057810678107781087810978110781117811278113781147811578116781177811878119781207812178122781237812478125781267812778128781297813078131781327813378134781357813678137781387813978140781417814278143781447814578146781477814878149781507815178152781537815478155781567815778158781597816078161781627816378164781657816678167781687816978170781717817278173781747817578176781777817878179781807818178182781837818478185781867818778188781897819078191781927819378194781957819678197781987819978200782017820278203782047820578206782077820878209782107821178212782137821478215782167821778218782197822078221782227822378224782257822678227782287822978230782317823278233782347823578236782377823878239782407824178242782437824478245782467824778248782497825078251782527825378254782557825678257782587825978260782617826278263782647826578266782677826878269782707827178272782737827478275782767827778278782797828078281782827828378284782857828678287782887828978290782917829278293782947829578296782977829878299783007830178302783037830478305783067830778308783097831078311783127831378314783157831678317783187831978320783217832278323783247832578326783277832878329783307833178332783337833478335783367833778338783397834078341783427834378344783457834678347783487834978350783517835278353783547835578356783577835878359783607836178362783637836478365783667836778368783697837078371783727837378374783757837678377783787837978380783817838278383783847838578386783877838878389783907839178392783937839478395783967839778398783997840078401784027840378404784057840678407784087840978410784117841278413784147841578416784177841878419784207842178422784237842478425784267842778428784297843078431784327843378434784357843678437784387843978440784417844278443784447844578446784477844878449784507845178452784537845478455784567845778458784597846078461784627846378464784657846678467784687846978470784717847278473784747847578476784777847878479784807848178482784837848478485784867848778488784897849078491784927849378494784957849678497784987849978500785017850278503785047850578506785077850878509785107851178512785137851478515785167851778518785197852078521785227852378524785257852678527785287852978530785317853278533785347853578536785377853878539785407854178542785437854478545785467854778548785497855078551785527855378554785557855678557785587855978560785617856278563785647856578566785677856878569785707857178572785737857478575785767857778578785797858078581785827858378584785857858678587785887858978590785917859278593785947859578596785977859878599786007860178602786037860478605786067860778608786097861078611786127861378614786157861678617786187861978620786217862278623786247862578626786277862878629786307863178632786337863478635786367863778638786397864078641786427864378644786457864678647786487864978650786517865278653786547865578656786577865878659786607866178662786637866478665786667866778668786697867078671786727867378674786757867678677786787867978680786817868278683786847868578686786877868878689786907869178692786937869478695786967869778698786997870078701787027870378704787057870678707787087870978710787117871278713787147871578716787177871878719787207872178722787237872478725787267872778728787297873078731787327873378734787357873678737787387873978740787417874278743787447874578746787477874878749787507875178752787537875478755787567875778758787597876078761787627876378764787657876678767787687876978770787717877278773787747877578776787777877878779787807878178782787837878478785787867878778788787897879078791787927879378794787957879678797787987879978800788017880278803788047880578806788077880878809788107881178812788137881478815788167881778818788197882078821788227882378824788257882678827788287882978830788317883278833788347883578836788377883878839788407884178842788437884478845788467884778848788497885078851788527885378854788557885678857788587885978860788617886278863788647886578866788677886878869788707887178872788737887478875788767887778878788797888078881788827888378884788857888678887788887888978890788917889278893788947889578896788977889878899789007890178902789037890478905789067890778908789097891078911789127891378914789157891678917789187891978920789217892278923789247892578926789277892878929789307893178932789337893478935789367893778938789397894078941789427894378944789457894678947789487894978950789517895278953789547895578956789577895878959789607896178962789637896478965789667896778968789697897078971789727897378974789757897678977789787897978980789817898278983789847898578986789877898878989789907899178992789937899478995789967899778998789997900079001790027900379004790057900679007790087900979010790117901279013790147901579016790177901879019790207902179022790237902479025790267902779028790297903079031790327903379034790357903679037790387903979040790417904279043790447904579046790477904879049790507905179052790537905479055790567905779058790597906079061790627906379064790657906679067790687906979070790717907279073790747907579076790777907879079790807908179082790837908479085790867908779088790897909079091790927909379094790957909679097790987909979100791017910279103791047910579106791077910879109791107911179112791137911479115791167911779118791197912079121791227912379124791257912679127791287912979130791317913279133791347913579136791377913879139791407914179142791437914479145791467914779148791497915079151791527915379154791557915679157791587915979160791617916279163791647916579166791677916879169791707917179172791737917479175791767917779178791797918079181791827918379184791857918679187791887918979190791917919279193791947919579196791977919879199792007920179202792037920479205792067920779208792097921079211792127921379214792157921679217792187921979220792217922279223792247922579226792277922879229792307923179232792337923479235792367923779238792397924079241792427924379244792457924679247792487924979250792517925279253792547925579256792577925879259792607926179262792637926479265792667926779268792697927079271792727927379274792757927679277792787927979280792817928279283792847928579286792877928879289792907929179292792937929479295792967929779298792997930079301793027930379304793057930679307793087930979310793117931279313793147931579316793177931879319793207932179322793237932479325793267932779328793297933079331793327933379334793357933679337793387933979340793417934279343793447934579346793477934879349793507935179352793537935479355793567935779358793597936079361793627936379364793657936679367793687936979370793717937279373793747937579376793777937879379793807938179382793837938479385793867938779388793897939079391793927939379394793957939679397793987939979400794017940279403794047940579406794077940879409794107941179412794137941479415794167941779418794197942079421794227942379424794257942679427794287942979430794317943279433794347943579436794377943879439794407944179442794437944479445794467944779448794497945079451794527945379454794557945679457794587945979460794617946279463794647946579466794677946879469794707947179472794737947479475794767947779478794797948079481794827948379484794857948679487794887948979490794917949279493794947949579496794977949879499795007950179502795037950479505795067950779508795097951079511795127951379514795157951679517795187951979520795217952279523795247952579526795277952879529795307953179532795337953479535795367953779538795397954079541795427954379544795457954679547795487954979550795517955279553795547955579556795577955879559795607956179562795637956479565795667956779568795697957079571795727957379574795757957679577795787957979580795817958279583795847958579586795877958879589795907959179592795937959479595795967959779598795997960079601796027960379604796057960679607796087960979610796117961279613796147961579616796177961879619796207962179622796237962479625796267962779628796297963079631796327963379634796357963679637796387963979640796417964279643796447964579646796477964879649796507965179652796537965479655796567965779658796597966079661796627966379664796657966679667796687966979670796717967279673796747967579676796777967879679796807968179682796837968479685796867968779688796897969079691796927969379694796957969679697796987969979700797017970279703797047970579706797077970879709797107971179712797137971479715797167971779718797197972079721797227972379724797257972679727797287972979730797317973279733797347973579736797377973879739797407974179742797437974479745797467974779748797497975079751797527975379754797557975679757797587975979760797617976279763797647976579766797677976879769797707977179772797737977479775797767977779778797797978079781797827978379784797857978679787797887978979790797917979279793797947979579796797977979879799798007980179802798037980479805798067980779808798097981079811798127981379814798157981679817798187981979820798217982279823798247982579826798277982879829798307983179832798337983479835798367983779838798397984079841798427984379844798457984679847798487984979850798517985279853798547985579856798577985879859798607986179862798637986479865798667986779868798697987079871798727987379874798757987679877798787987979880798817988279883798847988579886798877988879889798907989179892798937989479895798967989779898798997990079901799027990379904799057990679907799087990979910799117991279913799147991579916799177991879919799207992179922799237992479925799267992779928799297993079931799327993379934799357993679937799387993979940799417994279943799447994579946799477994879949799507995179952799537995479955799567995779958799597996079961799627996379964799657996679967799687996979970799717997279973799747997579976799777997879979799807998179982799837998479985799867998779988799897999079991799927999379994799957999679997799987999980000800018000280003800048000580006800078000880009800108001180012800138001480015800168001780018800198002080021800228002380024800258002680027800288002980030800318003280033800348003580036800378003880039800408004180042800438004480045800468004780048800498005080051800528005380054800558005680057800588005980060800618006280063800648006580066800678006880069800708007180072800738007480075800768007780078800798008080081800828008380084800858008680087800888008980090800918009280093800948009580096800978009880099801008010180102801038010480105801068010780108801098011080111801128011380114801158011680117801188011980120801218012280123801248012580126801278012880129801308013180132801338013480135801368013780138801398014080141801428014380144801458014680147801488014980150801518015280153801548015580156801578015880159801608016180162801638016480165801668016780168801698017080171801728017380174801758017680177801788017980180801818018280183801848018580186801878018880189801908019180192801938019480195801968019780198801998020080201802028020380204802058020680207802088020980210802118021280213802148021580216802178021880219802208022180222802238022480225802268022780228802298023080231802328023380234802358023680237802388023980240802418024280243802448024580246802478024880249802508025180252802538025480255802568025780258802598026080261802628026380264802658026680267802688026980270802718027280273802748027580276802778027880279802808028180282802838028480285802868028780288802898029080291802928029380294802958029680297802988029980300803018030280303803048030580306803078030880309803108031180312803138031480315803168031780318803198032080321803228032380324803258032680327803288032980330803318033280333803348033580336803378033880339803408034180342803438034480345803468034780348803498035080351803528035380354803558035680357803588035980360803618036280363803648036580366803678036880369803708037180372803738037480375803768037780378803798038080381803828038380384803858038680387803888038980390803918039280393803948039580396803978039880399804008040180402804038040480405804068040780408804098041080411804128041380414804158041680417804188041980420804218042280423804248042580426804278042880429804308043180432804338043480435804368043780438804398044080441804428044380444804458044680447804488044980450804518045280453804548045580456804578045880459804608046180462804638046480465804668046780468804698047080471804728047380474804758047680477804788047980480804818048280483804848048580486804878048880489804908049180492804938049480495804968049780498804998050080501805028050380504805058050680507805088050980510805118051280513805148051580516805178051880519805208052180522805238052480525805268052780528805298053080531805328053380534805358053680537805388053980540805418054280543805448054580546805478054880549805508055180552805538055480555805568055780558805598056080561805628056380564805658056680567805688056980570805718057280573805748057580576805778057880579805808058180582805838058480585805868058780588805898059080591805928059380594805958059680597805988059980600806018060280603806048060580606806078060880609806108061180612806138061480615806168061780618806198062080621806228062380624806258062680627806288062980630806318063280633806348063580636806378063880639806408064180642806438064480645806468064780648806498065080651806528065380654806558065680657806588065980660806618066280663806648066580666806678066880669806708067180672806738067480675806768067780678806798068080681806828068380684806858068680687806888068980690806918069280693806948069580696806978069880699807008070180702807038070480705807068070780708807098071080711807128071380714807158071680717807188071980720807218072280723807248072580726807278072880729807308073180732807338073480735807368073780738807398074080741807428074380744807458074680747807488074980750807518075280753807548075580756807578075880759807608076180762807638076480765807668076780768807698077080771807728077380774807758077680777807788077980780807818078280783807848078580786807878078880789807908079180792807938079480795807968079780798807998080080801808028080380804808058080680807808088080980810808118081280813808148081580816808178081880819808208082180822808238082480825808268082780828808298083080831808328083380834808358083680837808388083980840808418084280843808448084580846808478084880849808508085180852808538085480855808568085780858808598086080861808628086380864808658086680867808688086980870808718087280873808748087580876808778087880879808808088180882808838088480885808868088780888808898089080891808928089380894808958089680897808988089980900809018090280903809048090580906809078090880909809108091180912809138091480915809168091780918809198092080921809228092380924809258092680927809288092980930809318093280933809348093580936809378093880939809408094180942809438094480945809468094780948809498095080951809528095380954809558095680957809588095980960809618096280963809648096580966809678096880969809708097180972809738097480975809768097780978809798098080981809828098380984809858098680987809888098980990809918099280993809948099580996809978099880999810008100181002810038100481005810068100781008810098101081011810128101381014810158101681017810188101981020810218102281023810248102581026810278102881029810308103181032810338103481035810368103781038810398104081041810428104381044810458104681047810488104981050810518105281053810548105581056810578105881059810608106181062810638106481065810668106781068810698107081071810728107381074810758107681077810788107981080810818108281083810848108581086810878108881089810908109181092810938109481095810968109781098810998110081101811028110381104811058110681107811088110981110811118111281113811148111581116811178111881119811208112181122811238112481125811268112781128811298113081131811328113381134811358113681137811388113981140811418114281143811448114581146811478114881149811508115181152811538115481155811568115781158811598116081161811628116381164811658116681167811688116981170811718117281173811748117581176811778117881179811808118181182811838118481185811868118781188811898119081191811928119381194811958119681197811988119981200812018120281203812048120581206812078120881209812108121181212812138121481215812168121781218812198122081221812228122381224812258122681227812288122981230812318123281233812348123581236812378123881239812408124181242812438124481245812468124781248812498125081251812528125381254812558125681257812588125981260812618126281263812648126581266812678126881269812708127181272812738127481275812768127781278812798128081281812828128381284812858128681287812888128981290812918129281293812948129581296812978129881299813008130181302813038130481305813068130781308813098131081311813128131381314813158131681317813188131981320813218132281323813248132581326813278132881329813308133181332813338133481335813368133781338813398134081341813428134381344813458134681347813488134981350813518135281353813548135581356813578135881359813608136181362813638136481365813668136781368813698137081371813728137381374813758137681377813788137981380813818138281383813848138581386813878138881389813908139181392813938139481395813968139781398813998140081401814028140381404814058140681407814088140981410814118141281413814148141581416814178141881419814208142181422814238142481425814268142781428814298143081431814328143381434814358143681437814388143981440814418144281443814448144581446814478144881449814508145181452814538145481455814568145781458814598146081461814628146381464814658146681467814688146981470814718147281473814748147581476814778147881479814808148181482814838148481485814868148781488814898149081491814928149381494814958149681497814988149981500815018150281503815048150581506815078150881509815108151181512815138151481515815168151781518815198152081521815228152381524815258152681527815288152981530815318153281533815348153581536815378153881539815408154181542815438154481545815468154781548815498155081551815528155381554815558155681557815588155981560815618156281563815648156581566815678156881569815708157181572815738157481575815768157781578815798158081581815828158381584815858158681587815888158981590815918159281593815948159581596815978159881599816008160181602816038160481605816068160781608816098161081611816128161381614816158161681617816188161981620816218162281623816248162581626816278162881629816308163181632816338163481635816368163781638816398164081641816428164381644816458164681647816488164981650816518165281653816548165581656816578165881659816608166181662816638166481665816668166781668816698167081671816728167381674816758167681677816788167981680816818168281683816848168581686816878168881689816908169181692816938169481695816968169781698816998170081701817028170381704817058170681707817088170981710817118171281713817148171581716817178171881719817208172181722817238172481725817268172781728817298173081731817328173381734817358173681737817388173981740817418174281743817448174581746817478174881749817508175181752817538175481755817568175781758817598176081761817628176381764817658176681767817688176981770817718177281773817748177581776817778177881779817808178181782817838178481785817868178781788817898179081791817928179381794817958179681797817988179981800818018180281803818048180581806818078180881809818108181181812818138181481815818168181781818818198182081821818228182381824818258182681827818288182981830818318183281833818348183581836818378183881839818408184181842818438184481845818468184781848818498185081851818528185381854818558185681857818588185981860818618186281863818648186581866818678186881869818708187181872818738187481875818768187781878818798188081881818828188381884818858188681887818888188981890818918189281893818948189581896818978189881899819008190181902819038190481905819068190781908819098191081911819128191381914819158191681917819188191981920819218192281923819248192581926819278192881929819308193181932819338193481935819368193781938819398194081941819428194381944819458194681947819488194981950819518195281953819548195581956819578195881959819608196181962819638196481965819668196781968819698197081971819728197381974819758197681977819788197981980819818198281983819848198581986819878198881989819908199181992819938199481995819968199781998819998200082001820028200382004820058200682007820088200982010820118201282013820148201582016820178201882019820208202182022820238202482025820268202782028820298203082031820328203382034820358203682037820388203982040820418204282043820448204582046820478204882049820508205182052820538205482055820568205782058820598206082061820628206382064820658206682067820688206982070820718207282073820748207582076820778207882079820808208182082820838208482085820868208782088820898209082091820928209382094820958209682097820988209982100821018210282103821048210582106821078210882109821108211182112821138211482115821168211782118821198212082121821228212382124821258212682127821288212982130821318213282133821348213582136821378213882139821408214182142821438214482145821468214782148821498215082151821528215382154821558215682157821588215982160821618216282163821648216582166821678216882169821708217182172821738217482175821768217782178821798218082181821828218382184821858218682187821888218982190821918219282193821948219582196821978219882199822008220182202822038220482205822068220782208822098221082211822128221382214822158221682217822188221982220822218222282223822248222582226822278222882229822308223182232822338223482235822368223782238822398224082241822428224382244822458224682247822488224982250822518225282253822548225582256822578225882259822608226182262822638226482265822668226782268822698227082271822728227382274822758227682277822788227982280822818228282283822848228582286822878228882289822908229182292822938229482295822968229782298822998230082301823028230382304823058230682307823088230982310823118231282313823148231582316823178231882319823208232182322823238232482325823268232782328823298233082331823328233382334823358233682337823388233982340823418234282343823448234582346823478234882349823508235182352823538235482355823568235782358823598236082361823628236382364823658236682367823688236982370823718237282373823748237582376823778237882379823808238182382823838238482385823868238782388823898239082391823928239382394823958239682397823988239982400824018240282403824048240582406824078240882409824108241182412824138241482415824168241782418824198242082421824228242382424824258242682427824288242982430824318243282433824348243582436824378243882439824408244182442824438244482445824468244782448824498245082451824528245382454824558245682457824588245982460824618246282463824648246582466824678246882469824708247182472824738247482475824768247782478824798248082481824828248382484824858248682487824888248982490824918249282493824948249582496824978249882499825008250182502825038250482505825068250782508825098251082511825128251382514825158251682517825188251982520825218252282523825248252582526825278252882529825308253182532825338253482535825368253782538825398254082541825428254382544825458254682547825488254982550825518255282553825548255582556825578255882559825608256182562825638256482565825668256782568825698257082571825728257382574825758257682577825788257982580825818258282583825848258582586825878258882589825908259182592825938259482595825968259782598825998260082601826028260382604826058260682607826088260982610826118261282613826148261582616826178261882619826208262182622826238262482625826268262782628826298263082631826328263382634826358263682637826388263982640826418264282643826448264582646826478264882649826508265182652826538265482655826568265782658826598266082661826628266382664826658266682667826688266982670826718267282673826748267582676826778267882679826808268182682826838268482685826868268782688826898269082691826928269382694826958269682697826988269982700827018270282703827048270582706827078270882709827108271182712827138271482715827168271782718827198272082721827228272382724827258272682727827288272982730827318273282733827348273582736827378273882739827408274182742827438274482745827468274782748827498275082751827528275382754827558275682757827588275982760827618276282763827648276582766827678276882769827708277182772827738277482775827768277782778827798278082781827828278382784827858278682787827888278982790827918279282793827948279582796827978279882799828008280182802828038280482805828068280782808828098281082811828128281382814828158281682817828188281982820828218282282823828248282582826828278282882829828308283182832828338283482835828368283782838828398284082841828428284382844828458284682847828488284982850828518285282853828548285582856828578285882859828608286182862828638286482865828668286782868828698287082871828728287382874828758287682877828788287982880828818288282883828848288582886828878288882889828908289182892828938289482895828968289782898828998290082901829028290382904829058290682907829088290982910829118291282913829148291582916829178291882919829208292182922829238292482925829268292782928829298293082931829328293382934829358293682937829388293982940829418294282943829448294582946829478294882949829508295182952829538295482955829568295782958829598296082961829628296382964829658296682967829688296982970829718297282973829748297582976829778297882979829808298182982829838298482985829868298782988829898299082991829928299382994829958299682997829988299983000830018300283003830048300583006830078300883009830108301183012830138301483015830168301783018830198302083021830228302383024830258302683027830288302983030830318303283033830348303583036830378303883039830408304183042830438304483045830468304783048830498305083051830528305383054830558305683057830588305983060830618306283063830648306583066830678306883069830708307183072830738307483075830768307783078830798308083081830828308383084830858308683087830888308983090830918309283093830948309583096830978309883099831008310183102831038310483105831068310783108831098311083111831128311383114831158311683117831188311983120831218312283123831248312583126831278312883129831308313183132831338313483135831368313783138831398314083141831428314383144831458314683147831488314983150831518315283153831548315583156831578315883159831608316183162831638316483165831668316783168831698317083171831728317383174831758317683177831788317983180831818318283183831848318583186831878318883189831908319183192831938319483195831968319783198831998320083201832028320383204832058320683207832088320983210832118321283213832148321583216832178321883219832208322183222832238322483225832268322783228832298323083231832328323383234832358323683237832388323983240832418324283243832448324583246832478324883249832508325183252832538325483255832568325783258832598326083261832628326383264832658326683267832688326983270832718327283273832748327583276832778327883279832808328183282832838328483285832868328783288832898329083291832928329383294832958329683297832988329983300833018330283303833048330583306833078330883309833108331183312833138331483315833168331783318833198332083321833228332383324833258332683327833288332983330833318333283333833348333583336833378333883339833408334183342833438334483345833468334783348833498335083351833528335383354833558335683357833588335983360833618336283363833648336583366833678336883369833708337183372833738337483375833768337783378833798338083381833828338383384833858338683387833888338983390833918339283393833948339583396833978339883399834008340183402834038340483405834068340783408834098341083411834128341383414834158341683417834188341983420834218342283423834248342583426834278342883429834308343183432834338343483435834368343783438834398344083441834428344383444834458344683447834488344983450834518345283453834548345583456834578345883459834608346183462834638346483465834668346783468834698347083471834728347383474834758347683477834788347983480834818348283483834848348583486834878348883489834908349183492834938349483495834968349783498834998350083501835028350383504835058350683507835088350983510835118351283513835148351583516835178351883519835208352183522835238352483525835268352783528835298353083531835328353383534835358353683537835388353983540835418354283543835448354583546835478354883549835508355183552835538355483555835568355783558835598356083561835628356383564835658356683567835688356983570835718357283573835748357583576835778357883579835808358183582835838358483585835868358783588835898359083591835928359383594835958359683597835988359983600836018360283603836048360583606836078360883609836108361183612836138361483615836168361783618836198362083621836228362383624836258362683627836288362983630836318363283633836348363583636836378363883639836408364183642836438364483645836468364783648836498365083651836528365383654836558365683657836588365983660836618366283663836648366583666836678366883669836708367183672836738367483675836768367783678836798368083681836828368383684836858368683687836888368983690836918369283693836948369583696836978369883699837008370183702837038370483705837068370783708837098371083711837128371383714837158371683717837188371983720837218372283723837248372583726837278372883729837308373183732837338373483735837368373783738837398374083741837428374383744837458374683747837488374983750837518375283753837548375583756837578375883759837608376183762837638376483765837668376783768837698377083771837728377383774837758377683777837788377983780837818378283783837848378583786837878378883789837908379183792837938379483795837968379783798837998380083801838028380383804838058380683807838088380983810838118381283813838148381583816838178381883819838208382183822838238382483825838268382783828838298383083831838328383383834838358383683837838388383983840838418384283843838448384583846838478384883849838508385183852838538385483855838568385783858838598386083861838628386383864838658386683867838688386983870838718387283873838748387583876838778387883879838808388183882838838388483885838868388783888838898389083891838928389383894838958389683897838988389983900839018390283903839048390583906839078390883909839108391183912839138391483915839168391783918839198392083921839228392383924839258392683927839288392983930839318393283933839348393583936839378393883939839408394183942839438394483945839468394783948839498395083951839528395383954839558395683957839588395983960839618396283963839648396583966839678396883969839708397183972839738397483975839768397783978839798398083981839828398383984839858398683987839888398983990839918399283993839948399583996839978399883999840008400184002840038400484005840068400784008840098401084011840128401384014840158401684017840188401984020840218402284023840248402584026840278402884029840308403184032840338403484035840368403784038840398404084041840428404384044840458404684047840488404984050840518405284053840548405584056840578405884059840608406184062840638406484065840668406784068840698407084071840728407384074840758407684077840788407984080840818408284083840848408584086840878408884089840908409184092840938409484095840968409784098840998410084101841028410384104841058410684107841088410984110841118411284113841148411584116841178411884119841208412184122841238412484125841268412784128841298413084131841328413384134841358413684137841388413984140841418414284143841448414584146841478414884149841508415184152841538415484155841568415784158841598416084161841628416384164841658416684167841688416984170841718417284173841748417584176841778417884179841808418184182841838418484185841868418784188841898419084191841928419384194841958419684197841988419984200842018420284203842048420584206842078420884209842108421184212842138421484215842168421784218842198422084221842228422384224842258422684227842288422984230842318423284233842348423584236842378423884239842408424184242842438424484245842468424784248842498425084251842528425384254842558425684257842588425984260842618426284263842648426584266842678426884269842708427184272842738427484275842768427784278842798428084281842828428384284842858428684287842888428984290842918429284293842948429584296842978429884299843008430184302843038430484305843068430784308843098431084311843128431384314843158431684317843188431984320843218432284323843248432584326843278432884329843308433184332843338433484335843368433784338843398434084341843428434384344843458434684347843488434984350843518435284353843548435584356843578435884359843608436184362843638436484365843668436784368843698437084371843728437384374843758437684377843788437984380843818438284383843848438584386843878438884389843908439184392843938439484395843968439784398843998440084401844028440384404844058440684407844088440984410844118441284413844148441584416844178441884419844208442184422844238442484425844268442784428844298443084431844328443384434844358443684437844388443984440844418444284443844448444584446844478444884449844508445184452844538445484455844568445784458844598446084461844628446384464844658446684467844688446984470844718447284473844748447584476844778447884479844808448184482844838448484485844868448784488844898449084491844928449384494844958449684497844988449984500845018450284503845048450584506845078450884509845108451184512845138451484515845168451784518845198452084521845228452384524845258452684527845288452984530845318453284533845348453584536845378453884539845408454184542845438454484545845468454784548845498455084551845528455384554845558455684557845588455984560845618456284563845648456584566845678456884569
  1. #!/usr/bin/env node
  2. var define = (function amdefine(module, requireFn) {
  3. 'use strict';
  4. var defineCache = {},
  5. loaderCache = {},
  6. alreadyCalled = false,
  7. path = require('path'),
  8. makeRequire, stringRequire;
  9. /**
  10. * Trims the . and .. from an array of path segments.
  11. * It will keep a leading path segment if a .. will become
  12. * the first path segment, to help with module name lookups,
  13. * which act like paths, but can be remapped. But the end result,
  14. * all paths that use this function should look normalized.
  15. * NOTE: this method MODIFIES the input array.
  16. * @param {Array} ary the array of path segments.
  17. */
  18. function trimDots(ary) {
  19. var i, part;
  20. for (i = 0; ary[i]; i+= 1) {
  21. part = ary[i];
  22. if (part === '.') {
  23. ary.splice(i, 1);
  24. i -= 1;
  25. } else if (part === '..') {
  26. if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
  27. //End of the line. Keep at least one non-dot
  28. //path segment at the front so it can be mapped
  29. //correctly to disk. Otherwise, there is likely
  30. //no path mapping for a path starting with '..'.
  31. //This can still fail, but catches the most reasonable
  32. //uses of ..
  33. break;
  34. } else if (i > 0) {
  35. ary.splice(i - 1, 2);
  36. i -= 2;
  37. }
  38. }
  39. }
  40. }
  41. function normalize(name, baseName) {
  42. var baseParts;
  43. //Adjust any relative paths.
  44. if (name && name.charAt(0) === '.') {
  45. //If have a base name, try to normalize against it,
  46. //otherwise, assume it is a top-level require that will
  47. //be relative to baseUrl in the end.
  48. if (baseName) {
  49. baseParts = baseName.split('/');
  50. baseParts = baseParts.slice(0, baseParts.length - 1);
  51. baseParts = baseParts.concat(name.split('/'));
  52. trimDots(baseParts);
  53. name = baseParts.join('/');
  54. }
  55. }
  56. return name;
  57. }
  58. /**
  59. * Create the normalize() function passed to a loader plugin's
  60. * normalize method.
  61. */
  62. function makeNormalize(relName) {
  63. return function (name) {
  64. return normalize(name, relName);
  65. };
  66. }
  67. function makeLoad(id) {
  68. function load(value) {
  69. loaderCache[id] = value;
  70. }
  71. load.fromText = function (id, text) {
  72. //This one is difficult because the text can/probably uses
  73. //define, and any relative paths and requires should be relative
  74. //to that id was it would be found on disk. But this would require
  75. //bootstrapping a module/require fairly deeply from node core.
  76. //Not sure how best to go about that yet.
  77. throw new Error('amdefine does not implement load.fromText');
  78. };
  79. return load;
  80. }
  81. makeRequire = function (systemRequire, exports, module, relId) {
  82. function amdRequire(deps, callback) {
  83. if (typeof deps === 'string') {
  84. //Synchronous, single module require('')
  85. return stringRequire(systemRequire, exports, module, deps, relId);
  86. } else {
  87. //Array of dependencies with a callback.
  88. //Convert the dependencies to modules.
  89. deps = deps.map(function (depName) {
  90. return stringRequire(systemRequire, exports, module, depName, relId);
  91. });
  92. //Wait for next tick to call back the require call.
  93. process.nextTick(function () {
  94. callback.apply(null, deps);
  95. });
  96. }
  97. }
  98. amdRequire.toUrl = function (filePath) {
  99. if (filePath.indexOf('.') === 0) {
  100. return normalize(filePath, path.dirname(module.filename));
  101. } else {
  102. return filePath;
  103. }
  104. };
  105. return amdRequire;
  106. };
  107. //Favor explicit value, passed in if the module wants to support Node 0.4.
  108. requireFn = requireFn || function req() {
  109. return module.require.apply(module, arguments);
  110. };
  111. function runFactory(id, deps, factory) {
  112. var r, e, m, result;
  113. if (id) {
  114. e = loaderCache[id] = {};
  115. m = {
  116. id: id,
  117. uri: __filename,
  118. exports: e
  119. };
  120. r = makeRequire(requireFn, e, m, id);
  121. } else {
  122. //Only support one define call per file
  123. if (alreadyCalled) {
  124. throw new Error('amdefine with no module ID cannot be called more than once per file.');
  125. }
  126. alreadyCalled = true;
  127. //Use the real variables from node
  128. //Use module.exports for exports, since
  129. //the exports in here is amdefine exports.
  130. e = module.exports;
  131. m = module;
  132. r = makeRequire(requireFn, e, m, module.id);
  133. }
  134. //If there are dependencies, they are strings, so need
  135. //to convert them to dependency values.
  136. if (deps) {
  137. deps = deps.map(function (depName) {
  138. return r(depName);
  139. });
  140. }
  141. //Call the factory with the right dependencies.
  142. if (typeof factory === 'function') {
  143. result = factory.apply(m.exports, deps);
  144. } else {
  145. result = factory;
  146. }
  147. if (result !== undefined) {
  148. m.exports = result;
  149. if (id) {
  150. loaderCache[id] = m.exports;
  151. }
  152. }
  153. }
  154. stringRequire = function (systemRequire, exports, module, id, relId) {
  155. //Split the ID by a ! so that
  156. var index = id.indexOf('!'),
  157. originalId = id,
  158. prefix, plugin;
  159. if (index === -1) {
  160. id = normalize(id, relId);
  161. //Straight module lookup. If it is one of the special dependencies,
  162. //deal with it, otherwise, delegate to node.
  163. if (id === 'require') {
  164. return makeRequire(systemRequire, exports, module, relId);
  165. } else if (id === 'exports') {
  166. return exports;
  167. } else if (id === 'module') {
  168. return module;
  169. } else if (loaderCache.hasOwnProperty(id)) {
  170. return loaderCache[id];
  171. } else if (defineCache[id]) {
  172. runFactory.apply(null, defineCache[id]);
  173. return loaderCache[id];
  174. } else {
  175. if(systemRequire) {
  176. return systemRequire(originalId);
  177. } else {
  178. throw new Error('No module with ID: ' + id);
  179. }
  180. }
  181. } else {
  182. //There is a plugin in play.
  183. prefix = id.substring(0, index);
  184. id = id.substring(index + 1, id.length);
  185. plugin = stringRequire(systemRequire, exports, module, prefix, relId);
  186. if (plugin.normalize) {
  187. id = plugin.normalize(id, makeNormalize(relId));
  188. } else {
  189. //Normalize the ID normally.
  190. id = normalize(id, relId);
  191. }
  192. if (loaderCache[id]) {
  193. return loaderCache[id];
  194. } else {
  195. plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {});
  196. return loaderCache[id];
  197. }
  198. }
  199. };
  200. //Create a define function specific to the module asking for amdefine.
  201. function define(id, deps, factory) {
  202. if (Array.isArray(id)) {
  203. factory = deps;
  204. deps = id;
  205. id = undefined;
  206. } else if (typeof id !== 'string') {
  207. factory = id;
  208. id = deps = undefined;
  209. }
  210. if (deps && !Array.isArray(deps)) {
  211. factory = deps;
  212. deps = undefined;
  213. }
  214. if (!deps) {
  215. deps = ['require', 'exports', 'module'];
  216. }
  217. //Set up properties for this module. If an ID, then use
  218. //internal cache. If no ID, then use the external variables
  219. //for this node module.
  220. if (id) {
  221. //Put the module in deep freeze until there is a
  222. //require call for it.
  223. defineCache[id] = [id, deps, factory];
  224. } else {
  225. runFactory(id, deps, factory);
  226. }
  227. }
  228. //define.require, which has access to all the values in the
  229. //cache. Useful for AMD modules that all have IDs in the file,
  230. //but need to finally export a value to node based on one of those
  231. //IDs.
  232. define.require = function (id) {
  233. if (loaderCache[id]) {
  234. return loaderCache[id];
  235. }
  236. if (defineCache[id]) {
  237. runFactory.apply(null, defineCache[id]);
  238. return loaderCache[id];
  239. }
  240. };
  241. define.amd = {};
  242. return define;
  243. })(null, function (id) { throw new Error("Dependency not found: " + id); }), requirejs = define.require;
  244. define("amber_vm/browser-compatibility", [], {});
  245. define("amber/browser-compatibility", [], {});
  246. /* ====================================================================
  247. |
  248. | Amber Smalltalk
  249. | http://amber-lang.net
  250. |
  251. ======================================================================
  252. ======================================================================
  253. |
  254. | Copyright (c) 2010-2014
  255. | Nicolas Petton <petton.nicolas@gmail.com>
  256. |
  257. | Copyright (c) 2012-2014
  258. | The Amber team https://github.com/amber-smalltalk?tab=members
  259. | Amber contributors https://github.com/amber-smalltalk/amber/graphs/contributors
  260. |
  261. | Amber is released under the MIT license
  262. |
  263. | Permission is hereby granted, free of charge, to any person obtaining
  264. | a copy of this software and associated documentation files (the
  265. | 'Software'), to deal in the Software without restriction, including
  266. | without limitation the rights to use, copy, modify, merge, publish,
  267. | distribute, sublicense, and/or sell copies of the Software, and to
  268. | permit persons to whom the Software is furnished to do so, subject to
  269. | the following conditions:
  270. |
  271. | The above copyright notice and this permission notice shall be
  272. | included in all copies or substantial portions of the Software.
  273. |
  274. | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
  275. | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  276. | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  277. | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  278. | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  279. | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  280. | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  281. |
  282. ==================================================================== */
  283. //jshint eqnull:true
  284. define("amber/boot", [ 'require', './browser-compatibility' ], function (require) {
  285. /* Reconfigurable micro composition system, https://github.com/amber-smalltalk/brikz */
  286. function Brikz(api, apiKey, initKey) {
  287. var brikz = this, backup = {};
  288. apiKey = apiKey || 'exports';
  289. initKey = initKey || '__init__';
  290. function mixin(src, target, what) {
  291. for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
  292. if (src == null) { target[keys[i]] = undefined; } else {
  293. var value = src[keys[i]];
  294. if (typeof value !== "undefined") { target[keys[i]] = value; }
  295. }
  296. }
  297. return target;
  298. }
  299. var d={value: null, enumerable: false, configurable: true, writable: true};
  300. Object.defineProperties(this, { ensure: d, rebuild: d });
  301. var exclude = mixin(this, {});
  302. this.rebuild = function () {
  303. Object.keys(backup).forEach(function (key) {
  304. mixin(null, api, (backup[key]||0)[apiKey]||{});
  305. });
  306. var oapi = mixin(api, {}), order = [], chk = {};
  307. brikz.ensure = function(key) {
  308. if (key in exclude) { return null; }
  309. var b = brikz[key], bak = backup[key];
  310. mixin(null, api, api);
  311. while (typeof b === "function") { b = new b(brikz, api, bak); }
  312. if (b && !chk[key]) { chk[key]=true; order.push(b); }
  313. if (b && !b[apiKey]) { b[apiKey] = mixin(api, {}); }
  314. brikz[key] = b;
  315. return b;
  316. };
  317. Object.keys(brikz).forEach(function (key) { brikz.ensure(key); });
  318. brikz.ensure = null;
  319. mixin(oapi, mixin(null, api, api));
  320. order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
  321. order.forEach(function(brik) { if (brik[initKey]) brik[initKey](); });
  322. backup = mixin(brikz, {});
  323. };
  324. }
  325. /* Brikz end */
  326. function inherits(child, parent) {
  327. child.prototype = Object.create(parent.prototype, {
  328. constructor: { value: child,
  329. enumerable: false, configurable: true, writable: true }
  330. });
  331. return child;
  332. }
  333. var globals = {};
  334. globals.SmalltalkSettings = {};
  335. var api = Object.create(globals);
  336. var brikz = new Brikz(api);
  337. function RootBrik(brikz, st) {
  338. /* Smalltalk foundational objects */
  339. /* SmalltalkRoot is the hidden root of the Amber hierarchy.
  340. All objects including `Object` inherit from SmalltalkRoot */
  341. function SmalltalkRoot() {}
  342. function SmalltalkProtoObject() {}
  343. inherits(SmalltalkProtoObject, SmalltalkRoot);
  344. function SmalltalkObject() {}
  345. inherits(SmalltalkObject, SmalltalkProtoObject);
  346. function SmalltalkNil() {}
  347. inherits(SmalltalkNil, SmalltalkObject);
  348. this.Object = SmalltalkObject;
  349. this.nil = new SmalltalkNil();
  350. // Adds an `isNil` property to the `nil` object. When sending
  351. // nil objects from one environment to another, doing
  352. // `anObject == nil` (in JavaScript) does not always answer
  353. // true as the referenced nil object might come from the other
  354. // environment.
  355. Object.defineProperty(this.nil, 'isNil', {
  356. value: true,
  357. enumerable: false, configurable: false, writable: false
  358. });
  359. // Hidden root class of the system.
  360. this.rootAsClass = {fn: SmalltalkRoot};
  361. this.__init__ = function () {
  362. st.addPackage("Kernel-Objects");
  363. st.wrapClassName("ProtoObject", "Kernel-Objects", SmalltalkProtoObject, undefined, false);
  364. st.wrapClassName("Object", "Kernel-Objects", SmalltalkObject, globals.ProtoObject, false);
  365. st.wrapClassName("UndefinedObject", "Kernel-Objects", SmalltalkNil, globals.Object, false);
  366. };
  367. }
  368. function OrganizeBrik(brikz, st) {
  369. brikz.ensure("augments");
  370. var SmalltalkObject = brikz.ensure("root").Object;
  371. function SmalltalkOrganizer () {}
  372. function SmalltalkPackageOrganizer () {
  373. this.elements = [];
  374. }
  375. function SmalltalkClassOrganizer () {
  376. this.elements = [];
  377. }
  378. inherits(SmalltalkOrganizer, SmalltalkObject);
  379. inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
  380. inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
  381. this.__init__ = function () {
  382. st.addPackage("Kernel-Infrastructure");
  383. st.wrapClassName("Organizer", "Kernel-Infrastructure", SmalltalkOrganizer, globals.Object, false);
  384. st.wrapClassName("PackageOrganizer", "Kernel-Infrastructure", SmalltalkPackageOrganizer, globals.Organizer, false);
  385. st.wrapClassName("ClassOrganizer", "Kernel-Infrastructure", SmalltalkClassOrganizer, globals.Organizer, false);
  386. };
  387. this.setupClassOrganization = function (klass) {
  388. klass.organization = new SmalltalkClassOrganizer();
  389. klass.organization.theClass = klass;
  390. };
  391. this.setupPackageOrganization = function (pkg) {
  392. pkg.organization = new SmalltalkPackageOrganizer();
  393. };
  394. this.addOrganizationElement = function (owner, element) {
  395. owner.organization.elements.addElement(element);
  396. };
  397. this.removeOrganizationElement = function (owner, element) {
  398. owner.organization.elements.removeElement(element);
  399. };
  400. }
  401. function DNUBrik(brikz, st) {
  402. brikz.ensure("selectorConversion");
  403. brikz.ensure("messageSend");
  404. var manip = brikz.ensure("manipulation");
  405. var rootAsClass = brikz.ensure("root").rootAsClass;
  406. /* Method not implemented handlers */
  407. var methods = [], methodDict = Object.create(null);
  408. this.selectors = [];
  409. this.jsSelectors = [];
  410. this.get = function (stSelector) {
  411. var method = methodDict[stSelector];
  412. if(method) {
  413. return method;
  414. }
  415. var jsSelector = st.st2js(stSelector);
  416. this.selectors.push(stSelector);
  417. this.jsSelectors.push(jsSelector);
  418. method = {jsSelector: jsSelector, fn: createHandler(stSelector)};
  419. methodDict[stSelector] = method;
  420. methods.push(method);
  421. manip.installMethod(method, rootAsClass);
  422. return method;
  423. };
  424. /* Dnu handler method */
  425. function createHandler(stSelector) {
  426. return function() {
  427. return brikz.messageSend.messageNotUnderstood(this, stSelector, arguments);
  428. };
  429. }
  430. }
  431. function ClassInitBrik(brikz, st) {
  432. var dnu = brikz.ensure("dnu");
  433. var manip = brikz.ensure("manipulation");
  434. /* Initialize a class in its class hierarchy. Handle both classes and
  435. metaclasses. */
  436. st.init = function(klass) {
  437. initClass(klass);
  438. if(klass.klass && !klass.meta) {
  439. initClass(klass.klass);
  440. }
  441. };
  442. function initClass(klass) {
  443. if(klass.wrapped) {
  444. copySuperclass(klass);
  445. }
  446. }
  447. this.initClass = initClass;
  448. function copySuperclass(klass) {
  449. var superclass = klass.superclass,
  450. localMethods = klass.methods,
  451. protectedJsSelectors = {};
  452. Object.keys(localMethods).forEach(function (each) {
  453. protectedJsSelectors[localMethods[each].jsSelector] = true;
  454. });
  455. var superproto = superclass.fn.prototype;
  456. dnu.jsSelectors.forEach(function (selector) {
  457. if (!protectedJsSelectors[selector]) {
  458. manip.installMethod({
  459. jsSelector: selector,
  460. fn: superproto[selector]
  461. }, klass);
  462. }
  463. });
  464. }
  465. }
  466. function ManipulationBrik(brikz, st) {
  467. this.installMethodIfAbsent = function (handler, klass) {
  468. if(!klass.fn.prototype[handler.jsSelector]) {
  469. installMethod(handler, klass);
  470. }
  471. };
  472. function installMethod (method, klass) {
  473. Object.defineProperty(klass.fn.prototype, method.jsSelector, {
  474. value: method.fn,
  475. enumerable: false, configurable: true, writable: true
  476. });
  477. }
  478. this.installMethod = installMethod;
  479. }
  480. function PackagesBrik(brikz, st) {
  481. var org = brikz.ensure("organize");
  482. var root = brikz.ensure("root");
  483. var nil = root.nil;
  484. var SmalltalkObject = root.Object;
  485. function SmalltalkPackage() {}
  486. inherits(SmalltalkPackage, SmalltalkObject);
  487. this.__init__ = function () {
  488. st.addPackage("Kernel-Infrastructure");
  489. st.wrapClassName("Package", "Kernel-Infrastructure", SmalltalkPackage, globals.Object, false);
  490. };
  491. st.packages = {};
  492. /* Smalltalk package creation. To add a Package, use smalltalk.addPackage() */
  493. function pkg(spec) {
  494. var that = new SmalltalkPackage();
  495. that.pkgName = spec.pkgName;
  496. org.setupPackageOrganization(that);
  497. that.properties = spec.properties || {};
  498. return that;
  499. }
  500. /* Add a package to the smalltalk.packages object, creating a new one if needed.
  501. If pkgName is null or empty we return nil, which is an allowed package for a class.
  502. If package already exists we still update the properties of it. */
  503. st.addPackage = function(pkgName, properties) {
  504. if(!pkgName) {return nil;}
  505. if(!(st.packages[pkgName])) {
  506. st.packages[pkgName] = pkg({
  507. pkgName: pkgName,
  508. properties: properties
  509. });
  510. } else {
  511. if(properties) {
  512. st.packages[pkgName].properties = properties;
  513. }
  514. }
  515. return st.packages[pkgName];
  516. };
  517. }
  518. function ClassesBrik(brikz, st) {
  519. var org = brikz.ensure("organize");
  520. var root = brikz.ensure("root");
  521. var classInit = brikz.ensure("classInit");
  522. var nil = root.nil;
  523. var rootAsClass = root.rootAsClass;
  524. var SmalltalkObject = root.Object;
  525. rootAsClass.klass = {fn: SmalltalkClass};
  526. function SmalltalkBehavior() {}
  527. function SmalltalkClass() {}
  528. function SmalltalkMetaclass() {}
  529. inherits(SmalltalkBehavior, SmalltalkObject);
  530. inherits(SmalltalkClass, SmalltalkBehavior);
  531. inherits(SmalltalkMetaclass, SmalltalkBehavior);
  532. SmalltalkMetaclass.prototype.meta = true;
  533. this.__init__ = function () {
  534. st.addPackage("Kernel-Classes");
  535. st.wrapClassName("Behavior", "Kernel-Classes", SmalltalkBehavior, globals.Object, false);
  536. st.wrapClassName("Metaclass", "Kernel-Classes", SmalltalkMetaclass, globals.Behavior, false);
  537. st.wrapClassName("Class", "Kernel-Classes", SmalltalkClass, globals.Behavior, false);
  538. // Manually bootstrap the metaclass hierarchy
  539. globals.ProtoObject.klass.superclass = rootAsClass.klass = globals.Class;
  540. addSubclass(globals.ProtoObject.klass);
  541. };
  542. /* Smalltalk classes */
  543. var classes = [];
  544. var wrappedClasses = [];
  545. /* Smalltalk class creation. A class is an instance of an automatically
  546. created metaclass object. Newly created classes (not their metaclass)
  547. should be added to the smalltalk object, see smalltalk.addClass().
  548. Superclass linking is *not* handled here, see smalltalk.init() */
  549. function klass(spec) {
  550. spec = spec || {};
  551. var setSuperClass = spec.superclass;
  552. if(!spec.superclass) {
  553. spec.superclass = rootAsClass;
  554. }
  555. var meta = metaclass(spec);
  556. var that = meta.instanceClass;
  557. that.superclass = setSuperClass;
  558. that.fn = spec.fn || inherits(function () {}, spec.superclass.fn);
  559. that.subclasses = [];
  560. setupClass(that, spec);
  561. that.className = spec.className;
  562. that.wrapped = spec.wrapped || false;
  563. meta.className = spec.className + ' class';
  564. meta.superclass = spec.superclass.klass;
  565. return that;
  566. }
  567. function metaclass(spec) {
  568. spec = spec || {};
  569. var that = new SmalltalkMetaclass();
  570. that.fn = inherits(function () {}, spec.superclass.klass.fn);
  571. that.instanceClass = new that.fn();
  572. setupClass(that);
  573. return that;
  574. }
  575. SmalltalkBehavior.prototype.toString = function () {
  576. return 'Smalltalk ' + this.className;
  577. };
  578. function wireKlass(klass) {
  579. Object.defineProperty(klass.fn.prototype, "klass", {
  580. value: klass,
  581. enumerable: false, configurable: true, writable: true
  582. });
  583. }
  584. function setupClass(klass, spec) {
  585. spec = spec || {};
  586. klass.iVarNames = spec.iVarNames || [];
  587. klass.pkg = spec.pkg;
  588. org.setupClassOrganization(klass);
  589. Object.defineProperty(klass, "methods", {
  590. value: Object.create(null),
  591. enumerable: false, configurable: true, writable: true
  592. });
  593. wireKlass(klass);
  594. }
  595. /* Add a class to the smalltalk object, creating a new one if needed.
  596. A Package is lazily created if it does not exist with given name. */
  597. st.addClass = function(className, superclass, iVarNames, pkgName) {
  598. // While subclassing nil is allowed, it might be an error, so
  599. // warn about it.
  600. if (typeof superclass == 'undefined' || superclass == nil) {
  601. console.warn('Compiling ' + className + ' as a subclass of `nil`. A dependency might be missing.');
  602. }
  603. rawAddClass(pkgName, className, superclass, iVarNames, false, null);
  604. };
  605. function rawAddClass(pkgName, className, superclass, iVarNames, wrapped, fn) {
  606. var pkg = st.packages[pkgName];
  607. if (!pkg) {
  608. throw new Error("Missing package "+pkgName);
  609. }
  610. if (!superclass || superclass == nil) { superclass = null; }
  611. if(globals[className] && globals[className].superclass == superclass) {
  612. // globals[className].superclass = superclass;
  613. globals[className].iVarNames = iVarNames || [];
  614. if (pkg) globals[className].pkg = pkg;
  615. if (fn) {
  616. fn.prototype = globals[className].fn.prototype;
  617. globals[className].fn = fn;
  618. fn.prototype.constructor = fn;
  619. }
  620. } else {
  621. if(globals[className]) {
  622. st.removeClass(globals[className]);
  623. }
  624. globals[className] = klass({
  625. className: className,
  626. superclass: superclass,
  627. pkg: pkg,
  628. iVarNames: iVarNames,
  629. fn: fn,
  630. wrapped: wrapped
  631. });
  632. addSubclass(globals[className]);
  633. }
  634. classes.addElement(globals[className]);
  635. org.addOrganizationElement(pkg, globals[className]);
  636. }
  637. st.removeClass = function(klass) {
  638. org.removeOrganizationElement(klass.pkg, klass);
  639. classes.removeElement(klass);
  640. removeSubclass(klass);
  641. delete globals[klass.className];
  642. };
  643. function addSubclass(klass) {
  644. if(klass.superclass) {
  645. klass.superclass.subclasses.addElement(klass);
  646. }
  647. }
  648. function removeSubclass(klass) {
  649. if(klass.superclass) {
  650. klass.superclass.subclasses.removeElement(klass);
  651. }
  652. }
  653. /* Create a new class wrapping a JavaScript constructor, and add it to the
  654. global smalltalk object. Package is lazily created if it does not exist with given name. */
  655. st.wrapClassName = function(className, pkgName, fn, superclass, wrapped) {
  656. wrapped = wrapped !== false;
  657. rawAddClass(pkgName, className, superclass, globals[className] && globals[className].iVarNames, wrapped, fn);
  658. if(wrapped) {
  659. wrappedClasses.addElement(globals[className]);
  660. }
  661. };
  662. /* Manually set the constructor of an existing Smalltalk klass, making it a wrapped class. */
  663. st.setClassConstructor = function(klass, constructor) {
  664. wrappedClasses.addElement(klass);
  665. klass.wrapped = true;
  666. klass.fn = constructor;
  667. // The fn property changed. We need to add back the klass property to the prototype
  668. wireKlass(klass);
  669. classInit.initClass(klass);
  670. };
  671. /* Create an alias for an existing class */
  672. st.alias = function(klass, alias) {
  673. globals[alias] = klass;
  674. };
  675. /* Answer all registered Smalltalk classes */
  676. //TODO: remove the function and make smalltalk.classes an array
  677. st.classes = function() {
  678. return classes;
  679. };
  680. st.wrappedClasses = function() {
  681. return wrappedClasses;
  682. };
  683. // Still used, but could go away now that subclasses are stored
  684. // into classes directly.
  685. st.allSubclasses = function(klass) {
  686. return klass._allSubclasses();
  687. };
  688. }
  689. function MethodsBrik(brikz, st) {
  690. var manip = brikz.ensure("manipulation");
  691. var org = brikz.ensure("organize");
  692. var stInit = brikz.ensure("stInit");
  693. var dnu = brikz.ensure("dnu");
  694. var SmalltalkObject = brikz.ensure("root").Object;
  695. brikz.ensure("selectorConversion");
  696. brikz.ensure("classes");
  697. function SmalltalkMethod() {}
  698. inherits(SmalltalkMethod, SmalltalkObject);
  699. this.__init__ = function () {
  700. st.addPackage("Kernel-Methods");
  701. st.wrapClassName("CompiledMethod", "Kernel-Methods", SmalltalkMethod, globals.Object, false);
  702. };
  703. /* Smalltalk method object. To add a method to a class,
  704. use smalltalk.addMethod() */
  705. st.method = function(spec) {
  706. var that = new SmalltalkMethod();
  707. that.selector = spec.selector;
  708. that.jsSelector = spec.jsSelector;
  709. that.args = spec.args || {};
  710. // spec.category is kept for compatibility
  711. that.protocol = spec.protocol || spec.category;
  712. that.source = spec.source;
  713. that.messageSends = spec.messageSends || [];
  714. that.referencedClasses = spec.referencedClasses || [];
  715. that.fn = spec.fn;
  716. return that;
  717. };
  718. function installNewDnuHandler(newHandler) {
  719. var wrappedClasses = st.wrappedClasses();
  720. for(var i = 0; i < wrappedClasses.length; i++) {
  721. manip.installMethodIfAbsent(newHandler, wrappedClasses[i]);
  722. }
  723. }
  724. function ensureJsSelector(method) {
  725. if (!(method.jsSelector)) {
  726. method.jsSelector = st.st2js(method.selector);
  727. }
  728. }
  729. /* Add/remove a method to/from a class */
  730. st.addMethod = function (method, klass) {
  731. ensureJsSelector(method);
  732. manip.installMethod(method, klass);
  733. klass.methods[method.selector] = method;
  734. method.methodClass = klass;
  735. // During the bootstrap, #addCompiledMethod is not used.
  736. // Therefore we populate the organizer here too
  737. org.addOrganizationElement(klass, method.protocol);
  738. propagateMethodChange(klass, method);
  739. var usedSelectors = method.messageSends;
  740. var dnuHandlers = [];
  741. dnuHandlers.push(dnu.get(method.selector));
  742. for(var i=0; i<usedSelectors.length; i++) {
  743. dnuHandlers.push(dnu.get(usedSelectors[i]));
  744. }
  745. if(stInit.initialized()) {
  746. dnuHandlers.forEach(function(each) {
  747. installNewDnuHandler(each);
  748. });
  749. }
  750. };
  751. function propagateMethodChange(klass, method) {
  752. // If already initialized (else it will be done later anyway),
  753. // re-initialize all subclasses to ensure the method change
  754. // propagation (for wrapped classes, not using the prototype
  755. // chain).
  756. if (stInit.initialized()) {
  757. st.allSubclasses(klass).forEach(function (subclass) {
  758. initMethodInClass(subclass, method);
  759. });
  760. }
  761. }
  762. function initMethodInClass (klass, method) {
  763. if (klass.wrapped && !klass.methods[method.selector]) {
  764. var jsSelector = method.jsSelector;
  765. manip.installMethod({
  766. jsSelector: jsSelector,
  767. fn: klass.superclass.fn.prototype[jsSelector]
  768. }, klass);
  769. }
  770. }
  771. st.removeMethod = function(method, klass) {
  772. if (klass !== method.methodClass) {
  773. throw new Error(
  774. "Refusing to remove method " +
  775. method.methodClass.className + ">>" + method.selector +
  776. " from different class " +
  777. klass.className);
  778. }
  779. ensureJsSelector(method);
  780. delete klass.fn.prototype[method.jsSelector];
  781. delete klass.methods[method.selector];
  782. initMethodInClass(klass, method);
  783. propagateMethodChange(klass, method);
  784. // Do *not* delete protocols from here.
  785. // This is handled by #removeCompiledMethod
  786. };
  787. /* Answer all method selectors based on dnu handlers */
  788. st.allSelectors = function() {
  789. return dnu.selectors;
  790. };
  791. }
  792. function AugmentsBrik(brikz, st) {
  793. /* Array extensions */
  794. Array.prototype.addElement = function(el) {
  795. if(typeof el === 'undefined') { return; }
  796. if(this.indexOf(el) == -1) {
  797. this.push(el);
  798. }
  799. };
  800. Array.prototype.removeElement = function(el) {
  801. var i = this.indexOf(el);
  802. if (i !== -1) { this.splice(i, 1); }
  803. };
  804. }
  805. function SmalltalkInitBrik(brikz, st) {
  806. brikz.ensure("classInit");
  807. brikz.ensure("classes");
  808. var initialized = false;
  809. /* Smalltalk initialization. Called on page load */
  810. st.initialize = function() {
  811. if(initialized) { return; }
  812. st.classes().forEach(function(klass) {
  813. st.init(klass);
  814. });
  815. runnable();
  816. st.classes().forEach(function(klass) {
  817. klass._initialize();
  818. });
  819. initialized = true;
  820. };
  821. this.initialized = function () {
  822. return initialized;
  823. };
  824. this.__init__ = function () {
  825. st.addPackage("Kernel-Methods");
  826. st.wrapClassName("Number", "Kernel-Objects", Number, globals.Object);
  827. st.wrapClassName("BlockClosure", "Kernel-Methods", Function, globals.Object);
  828. st.wrapClassName("Boolean", "Kernel-Objects", Boolean, globals.Object);
  829. st.wrapClassName("Date", "Kernel-Objects", Date, globals.Object);
  830. st.addPackage("Kernel-Collections");
  831. st.addClass("Collection", globals.Object, null, "Kernel-Collections");
  832. st.addClass("IndexableCollection", globals.Collection, null, "Kernel-Collections");
  833. st.addClass("SequenceableCollection", globals.IndexableCollection, null, "Kernel-Collections");
  834. st.addClass("CharacterArray", globals.SequenceableCollection, null, "Kernel-Collections");
  835. st.wrapClassName("String", "Kernel-Collections", String, globals.CharacterArray);
  836. st.wrapClassName("Array", "Kernel-Collections", Array, globals.SequenceableCollection);
  837. st.wrapClassName("RegularExpression", "Kernel-Collections", RegExp, globals.Object);
  838. st.addPackage("Kernel-Exceptions");
  839. st.wrapClassName("Error", "Kernel-Exceptions", Error, globals.Object);
  840. /* Alias definitions */
  841. st.alias(globals.Array, "OrderedCollection");
  842. st.alias(globals.Date, "Time");
  843. };
  844. }
  845. function PrimitivesBrik(brikz, st) {
  846. /* Unique ID number generator */
  847. var oid = 0;
  848. st.nextId = function() {
  849. oid += 1;
  850. return oid;
  851. };
  852. /* Converts a JavaScript object to valid Smalltalk Object */
  853. st.readJSObject = function(js) {
  854. var readObject = js.constructor === Object;
  855. var readArray = js.constructor === Array;
  856. var object = readObject ? globals.Dictionary._new() : readArray ? [] : js;
  857. for(var i in js) {
  858. if(readObject) {
  859. object._at_put_(i, st.readJSObject(js[i]));
  860. }
  861. if(readArray) {
  862. object[i] = st.readJSObject(js[i]);
  863. }
  864. }
  865. return object;
  866. };
  867. /* Boolean assertion */
  868. st.assert = function(shouldBeBoolean) {
  869. // jshint -W041
  870. if (undefined !== shouldBeBoolean && shouldBeBoolean.klass === globals.Boolean) {
  871. return shouldBeBoolean == true;
  872. } else {
  873. globals.NonBooleanReceiver._new()._object_(shouldBeBoolean)._signal();
  874. }
  875. };
  876. /* List of all reserved words in JavaScript. They may not be used as variables
  877. in Smalltalk. */
  878. // list of reserved JavaScript keywords as of
  879. // http://es5.github.com/#x7.6.1.1
  880. // and
  881. // http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.6.1
  882. st.reservedWords = ['break', 'case', 'catch', 'continue', 'debugger',
  883. 'default', 'delete', 'do', 'else', 'finally', 'for', 'function',
  884. 'if', 'in', 'instanceof', 'new', 'return', 'switch', 'this', 'throw',
  885. 'try', 'typeof', 'var', 'void', 'while', 'with',
  886. // Amber protected words: these should not be compiled as-is when in code
  887. 'arguments',
  888. // ES5: future use: http://es5.github.com/#x7.6.1.2
  889. 'class', 'const', 'enum', 'export', 'extends', 'import', 'super',
  890. // ES5: future use in strict mode
  891. 'implements', 'interface', 'let', 'package', 'private', 'protected',
  892. 'public', 'static', 'yield'];
  893. st.globalJsVariables = ['jQuery', 'window', 'document', 'process', 'global'];
  894. }
  895. function RuntimeBrik(brikz, st) {
  896. brikz.ensure("selectorConversion");
  897. var root = brikz.ensure("root");
  898. var nil = root.nil;
  899. var SmalltalkObject = root.Object;
  900. function SmalltalkMethodContext(home, setup) {
  901. this.sendIdx = {};
  902. this.homeContext = home;
  903. this.setup = setup || function() {};
  904. this.supercall = false;
  905. }
  906. inherits(SmalltalkMethodContext, SmalltalkObject);
  907. this.__init__ = function () {
  908. st.addPackage("Kernel-Methods");
  909. st.wrapClassName("MethodContext", "Kernel-Methods", SmalltalkMethodContext, globals.Object, false);
  910. // Fallbacks
  911. SmalltalkMethodContext.prototype.locals = {};
  912. SmalltalkMethodContext.prototype.receiver = null;
  913. SmalltalkMethodContext.prototype.selector = null;
  914. SmalltalkMethodContext.prototype.lookupClass = null;
  915. SmalltalkMethodContext.prototype.fill = function(receiver, selector, locals, lookupClass) {
  916. this.receiver = receiver;
  917. this.selector = selector;
  918. this.locals = locals || {};
  919. this.lookupClass = lookupClass;
  920. if(this.homeContext) {
  921. this.homeContext.evaluatedSelector = selector;
  922. }
  923. };
  924. SmalltalkMethodContext.prototype.fillBlock = function(locals, ctx, index) {
  925. this.locals = locals || {};
  926. this.outerContext = ctx;
  927. this.index = index || 0;
  928. };
  929. SmalltalkMethodContext.prototype.init = function() {
  930. var home = this.homeContext;
  931. if(home) {
  932. home.init();
  933. }
  934. this.setup(this);
  935. };
  936. SmalltalkMethodContext.prototype.method = function() {
  937. var method;
  938. var lookup = this.lookupClass || this.receiver.klass;
  939. while(!method && lookup) {
  940. method = lookup.methods[st.js2st(this.selector)];
  941. lookup = lookup.superclass;
  942. }
  943. return method;
  944. };
  945. };
  946. /* This is the current call context object. While it is publicly available,
  947. Use smalltalk.getThisContext() instead which will answer a safe copy of
  948. the current context */
  949. st.thisContext = undefined;
  950. st.withContext = function(worker, setup) {
  951. if(st.thisContext) {
  952. return inContext(worker, setup);
  953. } else {
  954. try {
  955. return inContext(worker, setup);
  956. } catch(error) {
  957. handleError(error);
  958. st.thisContext = null;
  959. // Rethrow the error in any case.
  960. error.amberHandled = true;
  961. throw error;
  962. }
  963. }
  964. };
  965. function inContext(worker, setup) {
  966. var context = pushContext(setup);
  967. var result = worker(context);
  968. popContext(context);
  969. return result;
  970. }
  971. /* Wrap a JavaScript exception in a Smalltalk Exception.
  972. In case of a RangeError, stub the stack after 100 contexts to
  973. avoid another RangeError later when the stack is manipulated. */
  974. function wrappedError(error) {
  975. var errorWrapper = globals.JavaScriptException._on_(error);
  976. // Add the error to the context, so it is visible in the stack
  977. try { errorWrapper._signal(); } catch (ex) {}
  978. var context = st.getThisContext();
  979. if(isRangeError(error)) {
  980. stubContextStack(context);
  981. }
  982. errorWrapper._context_(context);
  983. return errorWrapper;
  984. }
  985. /* Stub the context stack after 100 contexts */
  986. function stubContextStack(context) {
  987. var currentContext = context;
  988. var contexts = 0;
  989. while(contexts < 100) {
  990. if(currentContext) {
  991. currentContext = currentContext.homeContext;
  992. }
  993. contexts++;
  994. }
  995. if(currentContext) {
  996. currentContext.homeContext = undefined;
  997. }
  998. }
  999. function isRangeError(error) {
  1000. return error instanceof RangeError;
  1001. }
  1002. /* Handles Smalltalk errors. Triggers the registered ErrorHandler
  1003. (See the Smalltalk class ErrorHandler and its subclasses */
  1004. function handleError(error) {
  1005. if (!error.smalltalkError) {
  1006. error = wrappedError(error);
  1007. }
  1008. globals.ErrorHandler._handleError_(error);
  1009. }
  1010. /* Handle thisContext pseudo variable */
  1011. st.getThisContext = function() {
  1012. if(st.thisContext) {
  1013. st.thisContext.init();
  1014. return st.thisContext;
  1015. } else {
  1016. return nil;
  1017. }
  1018. };
  1019. function pushContext(setup) {
  1020. var newContext = st.thisContext = new SmalltalkMethodContext(st.thisContext, setup);
  1021. return newContext;
  1022. }
  1023. function popContext(context) {
  1024. st.thisContext = context.homeContext;
  1025. }
  1026. }
  1027. function MessageSendBrik(brikz, st) {
  1028. brikz.ensure("selectorConversion");
  1029. var nil = brikz.ensure("root").nil;
  1030. /* Handles unhandled errors during message sends */
  1031. // simply send the message and handle #dnu:
  1032. st.send = function(receiver, jsSelector, args, klass) {
  1033. var method;
  1034. if(receiver === null) {
  1035. receiver = nil;
  1036. }
  1037. method = klass ? klass.fn.prototype[jsSelector] : receiver.klass && receiver[jsSelector];
  1038. if(method) {
  1039. return method.apply(receiver, args || []);
  1040. } else {
  1041. return messageNotUnderstood(receiver, st.js2st(jsSelector), args);
  1042. }
  1043. };
  1044. function invokeDnuMethod(receiver, stSelector, args) {
  1045. return receiver._doesNotUnderstand_(
  1046. globals.Message._new()
  1047. ._selector_(stSelector)
  1048. ._arguments_([].slice.call(args))
  1049. );
  1050. }
  1051. /* Handles #dnu: *and* JavaScript method calls.
  1052. if the receiver has no klass, we consider it a JS object (outside of the
  1053. Amber system). Else assume that the receiver understands #doesNotUnderstand: */
  1054. function messageNotUnderstood(receiver, stSelector, args) {
  1055. if (receiver.klass !== undefined && !receiver.allowJavaScriptCalls) {
  1056. return invokeDnuMethod(receiver, stSelector, args);
  1057. }
  1058. /* Call a method of a JS object, or answer a property if it exists.
  1059. Else try wrapping a JSObjectProxy around the receiver. */
  1060. var propertyName = st.st2prop(stSelector);
  1061. if (!(propertyName in receiver)) {
  1062. return invokeDnuMethod(globals.JSObjectProxy._on_(receiver), stSelector, args);
  1063. }
  1064. return accessJavaScript(receiver, propertyName, args);
  1065. }
  1066. /* If the object property is a function, then call it, except if it starts with
  1067. an uppercase character (we probably want to answer the function itself in this
  1068. case and send it #new from Amber).
  1069. Converts keyword-based selectors by using the first
  1070. keyword only, but keeping all message arguments.
  1071. Example:
  1072. "self do: aBlock with: anObject" -> "self.do(aBlock, anObject)" */
  1073. function accessJavaScript(receiver, propertyName, args) {
  1074. var propertyValue = receiver[propertyName];
  1075. if (typeof propertyValue === "function" && !/^[A-Z]/.test(propertyName)) {
  1076. return propertyValue.apply(receiver, args || []);
  1077. } else if (args.length > 0) {
  1078. receiver[propertyName] = args[0];
  1079. return nil;
  1080. } else {
  1081. return propertyValue;
  1082. }
  1083. }
  1084. st.accessJavaScript = accessJavaScript;
  1085. this.messageNotUnderstood = messageNotUnderstood;
  1086. }
  1087. function SelectorConversionBrik(brikz, st) {
  1088. /* Convert a Smalltalk selector into a JS selector */
  1089. st.st2js = function(string) {
  1090. var selector = '_' + string;
  1091. selector = selector.replace(/:/g, '_');
  1092. selector = selector.replace(/[\&]/g, '_and');
  1093. selector = selector.replace(/[\|]/g, '_or');
  1094. selector = selector.replace(/[+]/g, '_plus');
  1095. selector = selector.replace(/-/g, '_minus');
  1096. selector = selector.replace(/[*]/g ,'_star');
  1097. selector = selector.replace(/[\/]/g ,'_slash');
  1098. selector = selector.replace(/[\\]/g ,'_backslash');
  1099. selector = selector.replace(/[\~]/g ,'_tild');
  1100. selector = selector.replace(/>/g ,'_gt');
  1101. selector = selector.replace(/</g ,'_lt');
  1102. selector = selector.replace(/=/g ,'_eq');
  1103. selector = selector.replace(/,/g ,'_comma');
  1104. selector = selector.replace(/[@]/g ,'_at');
  1105. return selector;
  1106. };
  1107. /* Convert a string to a valid smalltalk selector.
  1108. if you modify the following functions, also change st2js
  1109. accordingly */
  1110. st.js2st = function(selector) {
  1111. if(selector.match(/__/)) {
  1112. return binaryJsToSt(selector);
  1113. } else {
  1114. return keywordJsToSt(selector);
  1115. }
  1116. };
  1117. function keywordJsToSt(selector) {
  1118. return selector.replace(/^_/, '').replace(/_/g, ':');
  1119. }
  1120. function binaryJsToSt(selector) {
  1121. return selector
  1122. .replace(/^_/, '')
  1123. .replace(/_and/g, '&')
  1124. .replace(/_or/g, '|')
  1125. .replace(/_plus/g, '+')
  1126. .replace(/_minus/g, '-')
  1127. .replace(/_star/g, '*')
  1128. .replace(/_slash/g, '/')
  1129. .replace(/_backslash/g, '\\')
  1130. .replace(/_tild/g, '~')
  1131. .replace(/_gt/g, '>')
  1132. .replace(/_lt/g, '<')
  1133. .replace(/_eq/g, '=')
  1134. .replace(/_comma/g, ',')
  1135. .replace(/_at/g, '@');
  1136. }
  1137. st.st2prop = function (stSelector) {
  1138. var colonPosition = stSelector.indexOf(':');
  1139. return colonPosition === -1 ? stSelector : stSelector.slice(0, colonPosition);
  1140. };
  1141. // Backward-compatible names, deprecated.
  1142. st.selector = st.st2js;
  1143. st.convertSelector = st.js2st;
  1144. }
  1145. /* Adds AMD and requirejs related methods to the smalltalk object */
  1146. function AMDBrik(brikz, st) {
  1147. this.__init__ = function () {
  1148. st.amdRequire = require;
  1149. st.defaultTransportType = st.defaultTransportType || "amd";
  1150. st.defaultAmdNamespace = st.defaultAmdNamespace || "amber_core";
  1151. };
  1152. }
  1153. /* Defines asReceiver to be present at load time */
  1154. /* (logically it belongs more to PrimitiveBrik) */
  1155. function AsReceiverBrik(brikz, st) {
  1156. var nil = brikz.ensure("root").nil;
  1157. /**
  1158. * This function is used all over the compiled amber code.
  1159. * It takes any value (JavaScript or Smalltalk)
  1160. * and returns a proper Amber Smalltalk receiver.
  1161. *
  1162. * null or undefined -> nil,
  1163. * plain JS object -> wrapped JS object,
  1164. * otherwise unchanged
  1165. */
  1166. this.asReceiver = function (o) {
  1167. if (o == null) { return nil; }
  1168. if (o.klass) { return o; }
  1169. return globals.JSObjectProxy._on_(o);
  1170. };
  1171. }
  1172. /* Making smalltalk that can load */
  1173. brikz.root = RootBrik;
  1174. brikz.dnu = DNUBrik;
  1175. brikz.organize = OrganizeBrik;
  1176. brikz.selectorConversion = SelectorConversionBrik;
  1177. brikz.classInit = ClassInitBrik;
  1178. brikz.manipulation = ManipulationBrik;
  1179. brikz.packages = PackagesBrik;
  1180. brikz.classes = ClassesBrik;
  1181. brikz.methods = MethodsBrik;
  1182. brikz.stInit = SmalltalkInitBrik;
  1183. brikz.augments = AugmentsBrik;
  1184. brikz.asReceiver = AsReceiverBrik;
  1185. brikz.amd = AMDBrik;
  1186. brikz.rebuild();
  1187. /* Making smalltalk that can run */
  1188. function runnable () {
  1189. brikz.messageSend = MessageSendBrik;
  1190. brikz.runtime = RuntimeBrik;
  1191. brikz.primitives = PrimitivesBrik;
  1192. brikz.rebuild();
  1193. }
  1194. return { api: api, /*deprecated:*/vm: api, nil: brikz.root.nil, globals: globals, asReceiver: brikz.asReceiver.asReceiver };
  1195. });
  1196. define("amber_vm/smalltalk", ["./boot"], function (boot) {
  1197. return boot.vm;
  1198. });
  1199. define("amber_vm/globals", ["./boot"], function (boot) {
  1200. return boot.globals;
  1201. });
  1202. define("amber_vm/nil", ["./boot"], function (boot) {
  1203. return boot.nil;
  1204. });
  1205. define("amber_vm/_st", ["./boot"], function (boot) {
  1206. return boot.asReceiver;
  1207. });
  1208. define("amber_core/Kernel-Objects", ["amber/boot"], function($boot){
  1209. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  1210. var smalltalk=$core,_st=$recv,globals=$globals;
  1211. $core.addPackage('Kernel-Objects');
  1212. $core.packages["Kernel-Objects"].transport = {"type":"amd","amdNamespace":"amber_core"};
  1213. $core.addClass('ProtoObject', null, [], 'Kernel-Objects');
  1214. //>>excludeStart("ide", pragmas.excludeIdeData);
  1215. $globals.ProtoObject.comment="I implement the basic behavior required for any object in Amber.\x0a\x0aIn most cases, subclassing `ProtoObject` is wrong and `Object` should be used instead. However subclassing `ProtoObject` can be useful in some special cases like proxy implementations.";
  1216. //>>excludeEnd("ide");
  1217. $core.addMethod(
  1218. $core.method({
  1219. selector: "=",
  1220. protocol: 'comparing',
  1221. fn: function (anObject){
  1222. var self=this;
  1223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1224. return $core.withContext(function($ctx1) {
  1225. //>>excludeEnd("ctx");
  1226. var $1;
  1227. $1=self.__eq_eq(anObject);
  1228. return $1;
  1229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1230. }, function($ctx1) {$ctx1.fill(self,"=",{anObject:anObject},$globals.ProtoObject)});
  1231. //>>excludeEnd("ctx");
  1232. },
  1233. //>>excludeStart("ide", pragmas.excludeIdeData);
  1234. args: ["anObject"],
  1235. source: "= anObject\x0a\x09^ self == anObject",
  1236. referencedClasses: [],
  1237. //>>excludeEnd("ide");
  1238. messageSends: ["=="]
  1239. }),
  1240. $globals.ProtoObject);
  1241. $core.addMethod(
  1242. $core.method({
  1243. selector: "==",
  1244. protocol: 'comparing',
  1245. fn: function (anObject){
  1246. var self=this;
  1247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1248. return $core.withContext(function($ctx1) {
  1249. //>>excludeEnd("ctx");
  1250. var $2,$1;
  1251. $2=self._identityHash();
  1252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1253. $ctx1.sendIdx["identityHash"]=1;
  1254. //>>excludeEnd("ctx");
  1255. $1=$recv($2).__eq($recv(anObject)._identityHash());
  1256. return $1;
  1257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1258. }, function($ctx1) {$ctx1.fill(self,"==",{anObject:anObject},$globals.ProtoObject)});
  1259. //>>excludeEnd("ctx");
  1260. },
  1261. //>>excludeStart("ide", pragmas.excludeIdeData);
  1262. args: ["anObject"],
  1263. source: "== anObject\x0a\x09^ self identityHash = anObject identityHash",
  1264. referencedClasses: [],
  1265. //>>excludeEnd("ide");
  1266. messageSends: ["=", "identityHash"]
  1267. }),
  1268. $globals.ProtoObject);
  1269. $core.addMethod(
  1270. $core.method({
  1271. selector: "asString",
  1272. protocol: 'converting',
  1273. fn: function (){
  1274. var self=this;
  1275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1276. return $core.withContext(function($ctx1) {
  1277. //>>excludeEnd("ctx");
  1278. var $1;
  1279. $1=self._printString();
  1280. return $1;
  1281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1282. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.ProtoObject)});
  1283. //>>excludeEnd("ctx");
  1284. },
  1285. //>>excludeStart("ide", pragmas.excludeIdeData);
  1286. args: [],
  1287. source: "asString\x0a\x09^ self printString",
  1288. referencedClasses: [],
  1289. //>>excludeEnd("ide");
  1290. messageSends: ["printString"]
  1291. }),
  1292. $globals.ProtoObject);
  1293. $core.addMethod(
  1294. $core.method({
  1295. selector: "class",
  1296. protocol: 'accessing',
  1297. fn: function (){
  1298. var self=this;
  1299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1300. return $core.withContext(function($ctx1) {
  1301. //>>excludeEnd("ctx");
  1302. return self.klass;
  1303. return self;
  1304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1305. }, function($ctx1) {$ctx1.fill(self,"class",{},$globals.ProtoObject)});
  1306. //>>excludeEnd("ctx");
  1307. },
  1308. //>>excludeStart("ide", pragmas.excludeIdeData);
  1309. args: [],
  1310. source: "class\x0a\x09<return self.klass>",
  1311. referencedClasses: [],
  1312. //>>excludeEnd("ide");
  1313. messageSends: []
  1314. }),
  1315. $globals.ProtoObject);
  1316. $core.addMethod(
  1317. $core.method({
  1318. selector: "doesNotUnderstand:",
  1319. protocol: 'error handling',
  1320. fn: function (aMessage){
  1321. var self=this;
  1322. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  1323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1324. return $core.withContext(function($ctx1) {
  1325. //>>excludeEnd("ctx");
  1326. var $1,$2;
  1327. $1=$recv($MessageNotUnderstood())._new();
  1328. $recv($1)._receiver_(self);
  1329. $recv($1)._message_(aMessage);
  1330. $2=$recv($1)._signal();
  1331. return self;
  1332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1333. }, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},$globals.ProtoObject)});
  1334. //>>excludeEnd("ctx");
  1335. },
  1336. //>>excludeStart("ide", pragmas.excludeIdeData);
  1337. args: ["aMessage"],
  1338. source: "doesNotUnderstand: aMessage\x0a\x09MessageNotUnderstood new\x0a\x09\x09receiver: self;\x0a\x09\x09message: aMessage;\x0a\x09\x09signal",
  1339. referencedClasses: ["MessageNotUnderstood"],
  1340. //>>excludeEnd("ide");
  1341. messageSends: ["receiver:", "new", "message:", "signal"]
  1342. }),
  1343. $globals.ProtoObject);
  1344. $core.addMethod(
  1345. $core.method({
  1346. selector: "evaluate:on:",
  1347. protocol: 'evaluating',
  1348. fn: function (aString,anEvaluator){
  1349. var self=this;
  1350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1351. return $core.withContext(function($ctx1) {
  1352. //>>excludeEnd("ctx");
  1353. var $1;
  1354. $1=$recv(anEvaluator)._evaluate_receiver_(aString,self);
  1355. return $1;
  1356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1357. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:",{aString:aString,anEvaluator:anEvaluator},$globals.ProtoObject)});
  1358. //>>excludeEnd("ctx");
  1359. },
  1360. //>>excludeStart("ide", pragmas.excludeIdeData);
  1361. args: ["aString", "anEvaluator"],
  1362. source: "evaluate: aString on: anEvaluator\x0a\x09^ anEvaluator evaluate: aString receiver: self",
  1363. referencedClasses: [],
  1364. //>>excludeEnd("ide");
  1365. messageSends: ["evaluate:receiver:"]
  1366. }),
  1367. $globals.ProtoObject);
  1368. $core.addMethod(
  1369. $core.method({
  1370. selector: "identityHash",
  1371. protocol: 'accessing',
  1372. fn: function (){
  1373. var self=this;
  1374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1375. return $core.withContext(function($ctx1) {
  1376. //>>excludeEnd("ctx");
  1377. var hash=self.identityHash;
  1378. if (hash) return hash;
  1379. hash=$core.nextId();
  1380. Object.defineProperty(self, 'identityHash', {value:hash});
  1381. return hash;
  1382. ;
  1383. return self;
  1384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1385. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.ProtoObject)});
  1386. //>>excludeEnd("ctx");
  1387. },
  1388. //>>excludeStart("ide", pragmas.excludeIdeData);
  1389. args: [],
  1390. source: "identityHash\x0a\x09<\x0a\x09\x09var hash=self.identityHash;\x0a\x09\x09if (hash) return hash;\x0a\x09\x09hash=$core.nextId();\x0a\x09\x09Object.defineProperty(self, 'identityHash', {value:hash});\x0a\x09\x09return hash;\x0a\x09>",
  1391. referencedClasses: [],
  1392. //>>excludeEnd("ide");
  1393. messageSends: []
  1394. }),
  1395. $globals.ProtoObject);
  1396. $core.addMethod(
  1397. $core.method({
  1398. selector: "initialize",
  1399. protocol: 'initialization',
  1400. fn: function (){
  1401. var self=this;
  1402. return self;
  1403. },
  1404. //>>excludeStart("ide", pragmas.excludeIdeData);
  1405. args: [],
  1406. source: "initialize",
  1407. referencedClasses: [],
  1408. //>>excludeEnd("ide");
  1409. messageSends: []
  1410. }),
  1411. $globals.ProtoObject);
  1412. $core.addMethod(
  1413. $core.method({
  1414. selector: "inspect",
  1415. protocol: 'inspecting',
  1416. fn: function (){
  1417. var self=this;
  1418. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  1419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1420. return $core.withContext(function($ctx1) {
  1421. //>>excludeEnd("ctx");
  1422. $recv($Inspector())._inspect_(self);
  1423. return self;
  1424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1425. }, function($ctx1) {$ctx1.fill(self,"inspect",{},$globals.ProtoObject)});
  1426. //>>excludeEnd("ctx");
  1427. },
  1428. //>>excludeStart("ide", pragmas.excludeIdeData);
  1429. args: [],
  1430. source: "inspect\x0a\x09Inspector inspect: self",
  1431. referencedClasses: ["Inspector"],
  1432. //>>excludeEnd("ide");
  1433. messageSends: ["inspect:"]
  1434. }),
  1435. $globals.ProtoObject);
  1436. $core.addMethod(
  1437. $core.method({
  1438. selector: "inspectOn:",
  1439. protocol: 'inspecting',
  1440. fn: function (anInspector){
  1441. var self=this;
  1442. return self;
  1443. },
  1444. //>>excludeStart("ide", pragmas.excludeIdeData);
  1445. args: ["anInspector"],
  1446. source: "inspectOn: anInspector",
  1447. referencedClasses: [],
  1448. //>>excludeEnd("ide");
  1449. messageSends: []
  1450. }),
  1451. $globals.ProtoObject);
  1452. $core.addMethod(
  1453. $core.method({
  1454. selector: "instVarAt:",
  1455. protocol: 'accessing',
  1456. fn: function (aString){
  1457. var self=this;
  1458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1459. return $core.withContext(function($ctx1) {
  1460. //>>excludeEnd("ctx");
  1461. return self['@'+aString] ;
  1462. return self;
  1463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1464. }, function($ctx1) {$ctx1.fill(self,"instVarAt:",{aString:aString},$globals.ProtoObject)});
  1465. //>>excludeEnd("ctx");
  1466. },
  1467. //>>excludeStart("ide", pragmas.excludeIdeData);
  1468. args: ["aString"],
  1469. source: "instVarAt: aString\x0a\x09< return self['@'+aString] >",
  1470. referencedClasses: [],
  1471. //>>excludeEnd("ide");
  1472. messageSends: []
  1473. }),
  1474. $globals.ProtoObject);
  1475. $core.addMethod(
  1476. $core.method({
  1477. selector: "instVarAt:put:",
  1478. protocol: 'accessing',
  1479. fn: function (aString,anObject){
  1480. var self=this;
  1481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1482. return $core.withContext(function($ctx1) {
  1483. //>>excludeEnd("ctx");
  1484. self['@' + aString] = anObject ;
  1485. return self;
  1486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1487. }, function($ctx1) {$ctx1.fill(self,"instVarAt:put:",{aString:aString,anObject:anObject},$globals.ProtoObject)});
  1488. //>>excludeEnd("ctx");
  1489. },
  1490. //>>excludeStart("ide", pragmas.excludeIdeData);
  1491. args: ["aString", "anObject"],
  1492. source: "instVarAt: aString put: anObject\x0a\x09< self['@' + aString] = anObject >",
  1493. referencedClasses: [],
  1494. //>>excludeEnd("ide");
  1495. messageSends: []
  1496. }),
  1497. $globals.ProtoObject);
  1498. $core.addMethod(
  1499. $core.method({
  1500. selector: "isKindOf:",
  1501. protocol: 'testing',
  1502. fn: function (aClass){
  1503. var self=this;
  1504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1505. return $core.withContext(function($ctx1) {
  1506. //>>excludeEnd("ctx");
  1507. var $2,$1;
  1508. $2=self._isMemberOf_(aClass);
  1509. if($core.assert($2)){
  1510. $1=true;
  1511. } else {
  1512. $1=$recv(self._class())._inheritsFrom_(aClass);
  1513. };
  1514. return $1;
  1515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1516. }, function($ctx1) {$ctx1.fill(self,"isKindOf:",{aClass:aClass},$globals.ProtoObject)});
  1517. //>>excludeEnd("ctx");
  1518. },
  1519. //>>excludeStart("ide", pragmas.excludeIdeData);
  1520. args: ["aClass"],
  1521. source: "isKindOf: aClass\x0a\x09^ (self isMemberOf: aClass)\x0a\x09\x09ifTrue: [ true ]\x0a\x09\x09ifFalse: [ self class inheritsFrom: aClass ]",
  1522. referencedClasses: [],
  1523. //>>excludeEnd("ide");
  1524. messageSends: ["ifTrue:ifFalse:", "isMemberOf:", "inheritsFrom:", "class"]
  1525. }),
  1526. $globals.ProtoObject);
  1527. $core.addMethod(
  1528. $core.method({
  1529. selector: "perform:",
  1530. protocol: 'message handling',
  1531. fn: function (aString){
  1532. var self=this;
  1533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1534. return $core.withContext(function($ctx1) {
  1535. //>>excludeEnd("ctx");
  1536. var $1;
  1537. $1=self._perform_withArguments_(aString,[]);
  1538. return $1;
  1539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1540. }, function($ctx1) {$ctx1.fill(self,"perform:",{aString:aString},$globals.ProtoObject)});
  1541. //>>excludeEnd("ctx");
  1542. },
  1543. //>>excludeStart("ide", pragmas.excludeIdeData);
  1544. args: ["aString"],
  1545. source: "perform: aString\x0a\x09^ self perform: aString withArguments: #()",
  1546. referencedClasses: [],
  1547. //>>excludeEnd("ide");
  1548. messageSends: ["perform:withArguments:"]
  1549. }),
  1550. $globals.ProtoObject);
  1551. $core.addMethod(
  1552. $core.method({
  1553. selector: "perform:withArguments:",
  1554. protocol: 'message handling',
  1555. fn: function (aString,aCollection){
  1556. var self=this;
  1557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1558. return $core.withContext(function($ctx1) {
  1559. //>>excludeEnd("ctx");
  1560. return $core.send(self, aString._asJavaScriptMethodName(), aCollection);
  1561. return self;
  1562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1563. }, function($ctx1) {$ctx1.fill(self,"perform:withArguments:",{aString:aString,aCollection:aCollection},$globals.ProtoObject)});
  1564. //>>excludeEnd("ctx");
  1565. },
  1566. //>>excludeStart("ide", pragmas.excludeIdeData);
  1567. args: ["aString", "aCollection"],
  1568. source: "perform: aString withArguments: aCollection\x0a\x09<return $core.send(self, aString._asJavaScriptMethodName(), aCollection)>",
  1569. referencedClasses: [],
  1570. //>>excludeEnd("ide");
  1571. messageSends: []
  1572. }),
  1573. $globals.ProtoObject);
  1574. $core.addMethod(
  1575. $core.method({
  1576. selector: "printOn:",
  1577. protocol: 'printing',
  1578. fn: function (aStream){
  1579. var self=this;
  1580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1581. return $core.withContext(function($ctx1) {
  1582. //>>excludeEnd("ctx");
  1583. var $5,$4,$3,$2,$1;
  1584. $5=self._class();
  1585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1586. $ctx1.sendIdx["class"]=1;
  1587. //>>excludeEnd("ctx");
  1588. $4=$recv($5)._name();
  1589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1590. $ctx1.sendIdx["name"]=1;
  1591. //>>excludeEnd("ctx");
  1592. $3=$recv($4)._first();
  1593. $2=$recv($3)._isVowel();
  1594. if($core.assert($2)){
  1595. $1="an ";
  1596. } else {
  1597. $1="a ";
  1598. };
  1599. $recv(aStream)._nextPutAll_($1);
  1600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1601. $ctx1.sendIdx["nextPutAll:"]=1;
  1602. //>>excludeEnd("ctx");
  1603. $recv(aStream)._nextPutAll_($recv(self._class())._name());
  1604. return self;
  1605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1606. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.ProtoObject)});
  1607. //>>excludeEnd("ctx");
  1608. },
  1609. //>>excludeStart("ide", pragmas.excludeIdeData);
  1610. args: ["aStream"],
  1611. source: "printOn: aStream\x0a\x09aStream nextPutAll: (self class name first isVowel\x0a\x09\x09ifTrue: [ 'an ' ]\x0a\x09\x09ifFalse: [ 'a ' ]).\x0a\x09aStream nextPutAll: self class name",
  1612. referencedClasses: [],
  1613. //>>excludeEnd("ide");
  1614. messageSends: ["nextPutAll:", "ifTrue:ifFalse:", "isVowel", "first", "name", "class"]
  1615. }),
  1616. $globals.ProtoObject);
  1617. $core.addMethod(
  1618. $core.method({
  1619. selector: "printString",
  1620. protocol: 'printing',
  1621. fn: function (){
  1622. var self=this;
  1623. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  1624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1625. return $core.withContext(function($ctx1) {
  1626. //>>excludeEnd("ctx");
  1627. var $1;
  1628. $1=$recv($String())._streamContents_((function(str){
  1629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1630. return $core.withContext(function($ctx2) {
  1631. //>>excludeEnd("ctx");
  1632. return self._printOn_(str);
  1633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1634. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  1635. //>>excludeEnd("ctx");
  1636. }));
  1637. return $1;
  1638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1639. }, function($ctx1) {$ctx1.fill(self,"printString",{},$globals.ProtoObject)});
  1640. //>>excludeEnd("ctx");
  1641. },
  1642. //>>excludeStart("ide", pragmas.excludeIdeData);
  1643. args: [],
  1644. source: "printString\x0a\x09^ String streamContents: [ :str | \x0a\x09\x09self printOn: str ]",
  1645. referencedClasses: ["String"],
  1646. //>>excludeEnd("ide");
  1647. messageSends: ["streamContents:", "printOn:"]
  1648. }),
  1649. $globals.ProtoObject);
  1650. $core.addMethod(
  1651. $core.method({
  1652. selector: "yourself",
  1653. protocol: 'accessing',
  1654. fn: function (){
  1655. var self=this;
  1656. return self;
  1657. },
  1658. //>>excludeStart("ide", pragmas.excludeIdeData);
  1659. args: [],
  1660. source: "yourself\x0a\x09^ self",
  1661. referencedClasses: [],
  1662. //>>excludeEnd("ide");
  1663. messageSends: []
  1664. }),
  1665. $globals.ProtoObject);
  1666. $core.addMethod(
  1667. $core.method({
  1668. selector: "~=",
  1669. protocol: 'comparing',
  1670. fn: function (anObject){
  1671. var self=this;
  1672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1673. return $core.withContext(function($ctx1) {
  1674. //>>excludeEnd("ctx");
  1675. var $1;
  1676. $1=$recv(self.__eq(anObject)).__eq(false);
  1677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1678. $ctx1.sendIdx["="]=1;
  1679. //>>excludeEnd("ctx");
  1680. return $1;
  1681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1682. }, function($ctx1) {$ctx1.fill(self,"~=",{anObject:anObject},$globals.ProtoObject)});
  1683. //>>excludeEnd("ctx");
  1684. },
  1685. //>>excludeStart("ide", pragmas.excludeIdeData);
  1686. args: ["anObject"],
  1687. source: "~= anObject\x0a\x09^ (self = anObject) = false",
  1688. referencedClasses: [],
  1689. //>>excludeEnd("ide");
  1690. messageSends: ["="]
  1691. }),
  1692. $globals.ProtoObject);
  1693. $core.addMethod(
  1694. $core.method({
  1695. selector: "~~",
  1696. protocol: 'comparing',
  1697. fn: function (anObject){
  1698. var self=this;
  1699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1700. return $core.withContext(function($ctx1) {
  1701. //>>excludeEnd("ctx");
  1702. var $1;
  1703. $1=$recv(self.__eq_eq(anObject)).__eq(false);
  1704. return $1;
  1705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1706. }, function($ctx1) {$ctx1.fill(self,"~~",{anObject:anObject},$globals.ProtoObject)});
  1707. //>>excludeEnd("ctx");
  1708. },
  1709. //>>excludeStart("ide", pragmas.excludeIdeData);
  1710. args: ["anObject"],
  1711. source: "~~ anObject\x0a\x09^ (self == anObject) = false",
  1712. referencedClasses: [],
  1713. //>>excludeEnd("ide");
  1714. messageSends: ["=", "=="]
  1715. }),
  1716. $globals.ProtoObject);
  1717. $core.addMethod(
  1718. $core.method({
  1719. selector: "initialize",
  1720. protocol: 'initialization',
  1721. fn: function (){
  1722. var self=this;
  1723. return self;
  1724. },
  1725. //>>excludeStart("ide", pragmas.excludeIdeData);
  1726. args: [],
  1727. source: "initialize",
  1728. referencedClasses: [],
  1729. //>>excludeEnd("ide");
  1730. messageSends: []
  1731. }),
  1732. $globals.ProtoObject.klass);
  1733. $core.addClass('Object', $globals.ProtoObject, [], 'Kernel-Objects');
  1734. //>>excludeStart("ide", pragmas.excludeIdeData);
  1735. $globals.Object.comment="**I am the root of the Smalltalk class system**. With the exception of unual subclasses of `ProtoObject`, all other classes in the system are subclasses of me.\x0a\x0aI provide default behavior common to all normal objects (some of it inherited from `ProtoObject`), such as:\x0a\x0a- accessing\x0a- copying\x0a- comparison\x0a- error handling\x0a- message sending\x0a- reflection\x0a\x0aAlso utility messages that all objects should respond to are defined here.\x0a\x0aI have no instance variable.\x0a\x0a##Access\x0a\x0aInstance variables can be accessed with `#instVarAt:` and `#instVarAt:put:`. `#instanceVariableNames` answers a collection of all instance variable names.\x0aAccessing JavaScript properties of an object is done through `#basicAt:`, `#basicAt:put:` and `basicDelete:`.\x0a\x0a##Copying\x0a\x0aCopying an object is handled by `#copy` and `#deepCopy`. The first one performs a shallow copy of the receiver, while the second one performs a deep copy.\x0aThe hook method `#postCopy` can be overriden in subclasses to copy fields as necessary to complete the full copy. It will be sent by the copy of the receiver.\x0a\x0a##Comparison\x0a\x0aI understand equality `#=` and identity `#==` comparison.\x0a\x0a##Error handling\x0a\x0a- `#halt` is the typical message to use for inserting breakpoints during debugging.\x0a- `#error:` throws a generic error exception\x0a- `#doesNotUnderstand:` handles the fact that there was an attempt to send the given message to the receiver but the receiver does not understand this message.\x0a\x09Overriding this message can be useful to implement proxies for example.";
  1736. //>>excludeEnd("ide");
  1737. $core.addMethod(
  1738. $core.method({
  1739. selector: "->",
  1740. protocol: 'converting',
  1741. fn: function (anObject){
  1742. var self=this;
  1743. function $Association(){return $globals.Association||(typeof Association=="undefined"?nil:Association)}
  1744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1745. return $core.withContext(function($ctx1) {
  1746. //>>excludeEnd("ctx");
  1747. var $1;
  1748. $1=$recv($Association())._key_value_(self,anObject);
  1749. return $1;
  1750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1751. }, function($ctx1) {$ctx1.fill(self,"->",{anObject:anObject},$globals.Object)});
  1752. //>>excludeEnd("ctx");
  1753. },
  1754. //>>excludeStart("ide", pragmas.excludeIdeData);
  1755. args: ["anObject"],
  1756. source: "-> anObject\x0a\x09^ Association key: self value: anObject",
  1757. referencedClasses: ["Association"],
  1758. //>>excludeEnd("ide");
  1759. messageSends: ["key:value:"]
  1760. }),
  1761. $globals.Object);
  1762. $core.addMethod(
  1763. $core.method({
  1764. selector: "asJSON",
  1765. protocol: 'converting',
  1766. fn: function (){
  1767. var self=this;
  1768. var variables;
  1769. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  1770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1771. return $core.withContext(function($ctx1) {
  1772. //>>excludeEnd("ctx");
  1773. var $1;
  1774. variables=$recv($HashedCollection())._new();
  1775. $recv($recv(self._class())._allInstanceVariableNames())._do_((function(each){
  1776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1777. return $core.withContext(function($ctx2) {
  1778. //>>excludeEnd("ctx");
  1779. return $recv(variables)._at_put_(each,$recv(self._instVarAt_(each))._asJSON());
  1780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1781. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  1782. //>>excludeEnd("ctx");
  1783. }));
  1784. $1=variables;
  1785. return $1;
  1786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1787. }, function($ctx1) {$ctx1.fill(self,"asJSON",{variables:variables},$globals.Object)});
  1788. //>>excludeEnd("ctx");
  1789. },
  1790. //>>excludeStart("ide", pragmas.excludeIdeData);
  1791. args: [],
  1792. source: "asJSON\x0a\x09| variables |\x0a\x09variables := HashedCollection new.\x0a\x09self class allInstanceVariableNames do: [ :each |\x0a\x09\x09variables at: each put: (self instVarAt: each) asJSON ].\x0a\x09^ variables",
  1793. referencedClasses: ["HashedCollection"],
  1794. //>>excludeEnd("ide");
  1795. messageSends: ["new", "do:", "allInstanceVariableNames", "class", "at:put:", "asJSON", "instVarAt:"]
  1796. }),
  1797. $globals.Object);
  1798. $core.addMethod(
  1799. $core.method({
  1800. selector: "asJSONString",
  1801. protocol: 'converting',
  1802. fn: function (){
  1803. var self=this;
  1804. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  1805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1806. return $core.withContext(function($ctx1) {
  1807. //>>excludeEnd("ctx");
  1808. var $1;
  1809. $1=$recv($JSON())._stringify_(self._asJSON());
  1810. return $1;
  1811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1812. }, function($ctx1) {$ctx1.fill(self,"asJSONString",{},$globals.Object)});
  1813. //>>excludeEnd("ctx");
  1814. },
  1815. //>>excludeStart("ide", pragmas.excludeIdeData);
  1816. args: [],
  1817. source: "asJSONString\x0a\x09^ JSON stringify: self asJSON",
  1818. referencedClasses: ["JSON"],
  1819. //>>excludeEnd("ide");
  1820. messageSends: ["stringify:", "asJSON"]
  1821. }),
  1822. $globals.Object);
  1823. $core.addMethod(
  1824. $core.method({
  1825. selector: "asJavascript",
  1826. protocol: 'converting',
  1827. fn: function (){
  1828. var self=this;
  1829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1830. return $core.withContext(function($ctx1) {
  1831. //>>excludeEnd("ctx");
  1832. var $1;
  1833. $1=self._asString();
  1834. return $1;
  1835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1836. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Object)});
  1837. //>>excludeEnd("ctx");
  1838. },
  1839. //>>excludeStart("ide", pragmas.excludeIdeData);
  1840. args: [],
  1841. source: "asJavascript\x0a\x09^ self asString",
  1842. referencedClasses: [],
  1843. //>>excludeEnd("ide");
  1844. messageSends: ["asString"]
  1845. }),
  1846. $globals.Object);
  1847. $core.addMethod(
  1848. $core.method({
  1849. selector: "basicAt:",
  1850. protocol: 'accessing',
  1851. fn: function (aString){
  1852. var self=this;
  1853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1854. return $core.withContext(function($ctx1) {
  1855. //>>excludeEnd("ctx");
  1856. return self[aString];
  1857. return self;
  1858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1859. }, function($ctx1) {$ctx1.fill(self,"basicAt:",{aString:aString},$globals.Object)});
  1860. //>>excludeEnd("ctx");
  1861. },
  1862. //>>excludeStart("ide", pragmas.excludeIdeData);
  1863. args: ["aString"],
  1864. source: "basicAt: aString\x0a\x09<return self[aString]>",
  1865. referencedClasses: [],
  1866. //>>excludeEnd("ide");
  1867. messageSends: []
  1868. }),
  1869. $globals.Object);
  1870. $core.addMethod(
  1871. $core.method({
  1872. selector: "basicAt:put:",
  1873. protocol: 'accessing',
  1874. fn: function (aString,anObject){
  1875. var self=this;
  1876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1877. return $core.withContext(function($ctx1) {
  1878. //>>excludeEnd("ctx");
  1879. return self[aString] = anObject;
  1880. return self;
  1881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1882. }, function($ctx1) {$ctx1.fill(self,"basicAt:put:",{aString:aString,anObject:anObject},$globals.Object)});
  1883. //>>excludeEnd("ctx");
  1884. },
  1885. //>>excludeStart("ide", pragmas.excludeIdeData);
  1886. args: ["aString", "anObject"],
  1887. source: "basicAt: aString put: anObject\x0a\x09<return self[aString] = anObject>",
  1888. referencedClasses: [],
  1889. //>>excludeEnd("ide");
  1890. messageSends: []
  1891. }),
  1892. $globals.Object);
  1893. $core.addMethod(
  1894. $core.method({
  1895. selector: "basicDelete:",
  1896. protocol: 'accessing',
  1897. fn: function (aString){
  1898. var self=this;
  1899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1900. return $core.withContext(function($ctx1) {
  1901. //>>excludeEnd("ctx");
  1902. delete self[aString]; return aString;
  1903. return self;
  1904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1905. }, function($ctx1) {$ctx1.fill(self,"basicDelete:",{aString:aString},$globals.Object)});
  1906. //>>excludeEnd("ctx");
  1907. },
  1908. //>>excludeStart("ide", pragmas.excludeIdeData);
  1909. args: ["aString"],
  1910. source: "basicDelete: aString\x0a\x09<delete self[aString]; return aString>",
  1911. referencedClasses: [],
  1912. //>>excludeEnd("ide");
  1913. messageSends: []
  1914. }),
  1915. $globals.Object);
  1916. $core.addMethod(
  1917. $core.method({
  1918. selector: "basicPerform:",
  1919. protocol: 'message handling',
  1920. fn: function (aString){
  1921. var self=this;
  1922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1923. return $core.withContext(function($ctx1) {
  1924. //>>excludeEnd("ctx");
  1925. var $1;
  1926. $1=self._basicPerform_withArguments_(aString,[]);
  1927. return $1;
  1928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1929. }, function($ctx1) {$ctx1.fill(self,"basicPerform:",{aString:aString},$globals.Object)});
  1930. //>>excludeEnd("ctx");
  1931. },
  1932. //>>excludeStart("ide", pragmas.excludeIdeData);
  1933. args: ["aString"],
  1934. source: "basicPerform: aString\x0a\x09^ self basicPerform: aString withArguments: #()",
  1935. referencedClasses: [],
  1936. //>>excludeEnd("ide");
  1937. messageSends: ["basicPerform:withArguments:"]
  1938. }),
  1939. $globals.Object);
  1940. $core.addMethod(
  1941. $core.method({
  1942. selector: "basicPerform:withArguments:",
  1943. protocol: 'message handling',
  1944. fn: function (aString,aCollection){
  1945. var self=this;
  1946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1947. return $core.withContext(function($ctx1) {
  1948. //>>excludeEnd("ctx");
  1949. return self[aString].apply(self, aCollection);;
  1950. return self;
  1951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1952. }, function($ctx1) {$ctx1.fill(self,"basicPerform:withArguments:",{aString:aString,aCollection:aCollection},$globals.Object)});
  1953. //>>excludeEnd("ctx");
  1954. },
  1955. //>>excludeStart("ide", pragmas.excludeIdeData);
  1956. args: ["aString", "aCollection"],
  1957. source: "basicPerform: aString withArguments: aCollection\x0a\x09<return self[aString].apply(self, aCollection);>",
  1958. referencedClasses: [],
  1959. //>>excludeEnd("ide");
  1960. messageSends: []
  1961. }),
  1962. $globals.Object);
  1963. $core.addMethod(
  1964. $core.method({
  1965. selector: "browse",
  1966. protocol: 'browsing',
  1967. fn: function (){
  1968. var self=this;
  1969. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  1970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1971. return $core.withContext(function($ctx1) {
  1972. //>>excludeEnd("ctx");
  1973. $recv($Finder())._findClass_(self._class());
  1974. return self;
  1975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1976. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.Object)});
  1977. //>>excludeEnd("ctx");
  1978. },
  1979. //>>excludeStart("ide", pragmas.excludeIdeData);
  1980. args: [],
  1981. source: "browse\x0a\x09Finder findClass: self class",
  1982. referencedClasses: ["Finder"],
  1983. //>>excludeEnd("ide");
  1984. messageSends: ["findClass:", "class"]
  1985. }),
  1986. $globals.Object);
  1987. $core.addMethod(
  1988. $core.method({
  1989. selector: "copy",
  1990. protocol: 'copying',
  1991. fn: function (){
  1992. var self=this;
  1993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  1994. return $core.withContext(function($ctx1) {
  1995. //>>excludeEnd("ctx");
  1996. var $1;
  1997. $1=$recv(self._shallowCopy())._postCopy();
  1998. return $1;
  1999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2000. }, function($ctx1) {$ctx1.fill(self,"copy",{},$globals.Object)});
  2001. //>>excludeEnd("ctx");
  2002. },
  2003. //>>excludeStart("ide", pragmas.excludeIdeData);
  2004. args: [],
  2005. source: "copy\x0a\x09^ self shallowCopy postCopy",
  2006. referencedClasses: [],
  2007. //>>excludeEnd("ide");
  2008. messageSends: ["postCopy", "shallowCopy"]
  2009. }),
  2010. $globals.Object);
  2011. $core.addMethod(
  2012. $core.method({
  2013. selector: "deepCopy",
  2014. protocol: 'copying',
  2015. fn: function (){
  2016. var self=this;
  2017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2018. return $core.withContext(function($ctx1) {
  2019. //>>excludeEnd("ctx");
  2020. var copy = self.klass._new();
  2021. Object.keys(self).forEach(function (i) {
  2022. if(/^@.+/.test(i)) {
  2023. copy[i] = self[i]._deepCopy();
  2024. }
  2025. });
  2026. return copy;
  2027. ;
  2028. return self;
  2029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2030. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.Object)});
  2031. //>>excludeEnd("ctx");
  2032. },
  2033. //>>excludeStart("ide", pragmas.excludeIdeData);
  2034. args: [],
  2035. source: "deepCopy\x0a\x09<\x0a\x09\x09var copy = self.klass._new();\x0a\x09\x09Object.keys(self).forEach(function (i) {\x0a\x09\x09if(/^@.+/.test(i)) {\x0a\x09\x09\x09copy[i] = self[i]._deepCopy();\x0a\x09\x09}\x0a\x09\x09});\x0a\x09\x09return copy;\x0a\x09>",
  2036. referencedClasses: [],
  2037. //>>excludeEnd("ide");
  2038. messageSends: []
  2039. }),
  2040. $globals.Object);
  2041. $core.addMethod(
  2042. $core.method({
  2043. selector: "deprecatedAPI",
  2044. protocol: 'error handling',
  2045. fn: function (){
  2046. var self=this;
  2047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2048. return $core.withContext(function($ctx1) {
  2049. //>>excludeEnd("ctx");
  2050. var $1,$6,$5,$4,$8,$7,$3,$2;
  2051. $1=console;
  2052. $6=$core.getThisContext()._home();
  2053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2054. $ctx1.sendIdx["home"]=1;
  2055. //>>excludeEnd("ctx");
  2056. $5=$recv($6)._asString();
  2057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2058. $ctx1.sendIdx["asString"]=1;
  2059. //>>excludeEnd("ctx");
  2060. $4=$recv($5).__comma(" is deprecated! (in ");
  2061. $8=$recv($core.getThisContext()._home())._home();
  2062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2063. $ctx1.sendIdx["home"]=2;
  2064. //>>excludeEnd("ctx");
  2065. $7=$recv($8)._asString();
  2066. $3=$recv($4).__comma($7);
  2067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2068. $ctx1.sendIdx[","]=2;
  2069. //>>excludeEnd("ctx");
  2070. $2=$recv($3).__comma(")");
  2071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2072. $ctx1.sendIdx[","]=1;
  2073. //>>excludeEnd("ctx");
  2074. $recv($1)._warn_($2);
  2075. return self;
  2076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2077. }, function($ctx1) {$ctx1.fill(self,"deprecatedAPI",{},$globals.Object)});
  2078. //>>excludeEnd("ctx");
  2079. },
  2080. //>>excludeStart("ide", pragmas.excludeIdeData);
  2081. args: [],
  2082. source: "deprecatedAPI\x0a\x09\x22Just a simple way to deprecate methods.\x0a\x09#deprecatedAPI is in the 'error handling' protocol even if it doesn't throw an error,\x0a\x09but it could in the future.\x22\x0a\x09console warn: thisContext home asString, ' is deprecated! (in ', thisContext home home asString, ')'.",
  2083. referencedClasses: [],
  2084. //>>excludeEnd("ide");
  2085. messageSends: ["warn:", ",", "asString", "home"]
  2086. }),
  2087. $globals.Object);
  2088. $core.addMethod(
  2089. $core.method({
  2090. selector: "deprecatedAPI:",
  2091. protocol: 'error handling',
  2092. fn: function (aString){
  2093. var self=this;
  2094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2095. return $core.withContext(function($ctx1) {
  2096. //>>excludeEnd("ctx");
  2097. var $1,$6,$5,$4,$8,$7,$3,$2;
  2098. $1=console;
  2099. $6=$core.getThisContext()._home();
  2100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2101. $ctx1.sendIdx["home"]=1;
  2102. //>>excludeEnd("ctx");
  2103. $5=$recv($6)._asString();
  2104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2105. $ctx1.sendIdx["asString"]=1;
  2106. //>>excludeEnd("ctx");
  2107. $4=$recv($5).__comma(" is deprecated! (in ");
  2108. $8=$recv($core.getThisContext()._home())._home();
  2109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2110. $ctx1.sendIdx["home"]=2;
  2111. //>>excludeEnd("ctx");
  2112. $7=$recv($8)._asString();
  2113. $3=$recv($4).__comma($7);
  2114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2115. $ctx1.sendIdx[","]=2;
  2116. //>>excludeEnd("ctx");
  2117. $2=$recv($3).__comma(")");
  2118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2119. $ctx1.sendIdx[","]=1;
  2120. //>>excludeEnd("ctx");
  2121. $recv($1)._warn_($2);
  2122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2123. $ctx1.sendIdx["warn:"]=1;
  2124. //>>excludeEnd("ctx");
  2125. $recv(console)._warn_(aString);
  2126. return self;
  2127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2128. }, function($ctx1) {$ctx1.fill(self,"deprecatedAPI:",{aString:aString},$globals.Object)});
  2129. //>>excludeEnd("ctx");
  2130. },
  2131. //>>excludeStart("ide", pragmas.excludeIdeData);
  2132. args: ["aString"],
  2133. source: "deprecatedAPI: aString\x0a\x09\x22Just a simple way to deprecate methods.\x0a\x09#deprecatedAPI is in the 'error handling' protocol even if it doesn't throw an error,\x0a\x09but it could in the future.\x22\x0a\x09console warn: thisContext home asString, ' is deprecated! (in ', thisContext home home asString, ')'.\x0a\x09console warn: aString",
  2134. referencedClasses: [],
  2135. //>>excludeEnd("ide");
  2136. messageSends: ["warn:", ",", "asString", "home"]
  2137. }),
  2138. $globals.Object);
  2139. $core.addMethod(
  2140. $core.method({
  2141. selector: "error:",
  2142. protocol: 'error handling',
  2143. fn: function (aString){
  2144. var self=this;
  2145. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  2146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2147. return $core.withContext(function($ctx1) {
  2148. //>>excludeEnd("ctx");
  2149. $recv($Error())._signal_(aString);
  2150. return self;
  2151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2152. }, function($ctx1) {$ctx1.fill(self,"error:",{aString:aString},$globals.Object)});
  2153. //>>excludeEnd("ctx");
  2154. },
  2155. //>>excludeStart("ide", pragmas.excludeIdeData);
  2156. args: ["aString"],
  2157. source: "error: aString\x0a\x09Error signal: aString",
  2158. referencedClasses: ["Error"],
  2159. //>>excludeEnd("ide");
  2160. messageSends: ["signal:"]
  2161. }),
  2162. $globals.Object);
  2163. $core.addMethod(
  2164. $core.method({
  2165. selector: "halt",
  2166. protocol: 'error handling',
  2167. fn: function (){
  2168. var self=this;
  2169. function $Halt(){return $globals.Halt||(typeof Halt=="undefined"?nil:Halt)}
  2170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2171. return $core.withContext(function($ctx1) {
  2172. //>>excludeEnd("ctx");
  2173. $recv($Halt())._signal();
  2174. return self;
  2175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2176. }, function($ctx1) {$ctx1.fill(self,"halt",{},$globals.Object)});
  2177. //>>excludeEnd("ctx");
  2178. },
  2179. //>>excludeStart("ide", pragmas.excludeIdeData);
  2180. args: [],
  2181. source: "halt\x0a\x09Halt signal",
  2182. referencedClasses: ["Halt"],
  2183. //>>excludeEnd("ide");
  2184. messageSends: ["signal"]
  2185. }),
  2186. $globals.Object);
  2187. $core.addMethod(
  2188. $core.method({
  2189. selector: "ifNil:",
  2190. protocol: 'testing',
  2191. fn: function (aBlock){
  2192. var self=this;
  2193. return self;
  2194. },
  2195. //>>excludeStart("ide", pragmas.excludeIdeData);
  2196. args: ["aBlock"],
  2197. source: "ifNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self",
  2198. referencedClasses: [],
  2199. //>>excludeEnd("ide");
  2200. messageSends: []
  2201. }),
  2202. $globals.Object);
  2203. $core.addMethod(
  2204. $core.method({
  2205. selector: "ifNil:ifNotNil:",
  2206. protocol: 'testing',
  2207. fn: function (aBlock,anotherBlock){
  2208. var self=this;
  2209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2210. return $core.withContext(function($ctx1) {
  2211. //>>excludeEnd("ctx");
  2212. var $1;
  2213. $1=$recv(anotherBlock)._value_(self);
  2214. return $1;
  2215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2216. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Object)});
  2217. //>>excludeEnd("ctx");
  2218. },
  2219. //>>excludeStart("ide", pragmas.excludeIdeData);
  2220. args: ["aBlock", "anotherBlock"],
  2221. source: "ifNil: aBlock ifNotNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ anotherBlock value: self",
  2222. referencedClasses: [],
  2223. //>>excludeEnd("ide");
  2224. messageSends: ["value:"]
  2225. }),
  2226. $globals.Object);
  2227. $core.addMethod(
  2228. $core.method({
  2229. selector: "ifNotNil:",
  2230. protocol: 'testing',
  2231. fn: function (aBlock){
  2232. var self=this;
  2233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2234. return $core.withContext(function($ctx1) {
  2235. //>>excludeEnd("ctx");
  2236. var $1;
  2237. $1=$recv(aBlock)._value_(self);
  2238. return $1;
  2239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2240. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:",{aBlock:aBlock},$globals.Object)});
  2241. //>>excludeEnd("ctx");
  2242. },
  2243. //>>excludeStart("ide", pragmas.excludeIdeData);
  2244. args: ["aBlock"],
  2245. source: "ifNotNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value: self",
  2246. referencedClasses: [],
  2247. //>>excludeEnd("ide");
  2248. messageSends: ["value:"]
  2249. }),
  2250. $globals.Object);
  2251. $core.addMethod(
  2252. $core.method({
  2253. selector: "ifNotNil:ifNil:",
  2254. protocol: 'testing',
  2255. fn: function (aBlock,anotherBlock){
  2256. var self=this;
  2257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2258. return $core.withContext(function($ctx1) {
  2259. //>>excludeEnd("ctx");
  2260. var $1;
  2261. $1=$recv(aBlock)._value_(self);
  2262. return $1;
  2263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2264. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Object)});
  2265. //>>excludeEnd("ctx");
  2266. },
  2267. //>>excludeStart("ide", pragmas.excludeIdeData);
  2268. args: ["aBlock", "anotherBlock"],
  2269. source: "ifNotNil: aBlock ifNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value: self",
  2270. referencedClasses: [],
  2271. //>>excludeEnd("ide");
  2272. messageSends: ["value:"]
  2273. }),
  2274. $globals.Object);
  2275. $core.addMethod(
  2276. $core.method({
  2277. selector: "inspectOn:",
  2278. protocol: 'inspecting',
  2279. fn: function (anInspector){
  2280. var self=this;
  2281. var variables;
  2282. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  2283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2284. return $core.withContext(function($ctx1) {
  2285. //>>excludeEnd("ctx");
  2286. var $1;
  2287. variables=$recv($Dictionary())._new();
  2288. $recv(variables)._at_put_("#self",self);
  2289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2290. $ctx1.sendIdx["at:put:"]=1;
  2291. //>>excludeEnd("ctx");
  2292. $recv($recv(self._class())._allInstanceVariableNames())._do_((function(each){
  2293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2294. return $core.withContext(function($ctx2) {
  2295. //>>excludeEnd("ctx");
  2296. return $recv(variables)._at_put_(each,self._instVarAt_(each));
  2297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2298. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  2299. //>>excludeEnd("ctx");
  2300. }));
  2301. $recv(anInspector)._setLabel_(self._printString());
  2302. $1=$recv(anInspector)._setVariables_(variables);
  2303. return self;
  2304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2305. }, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables},$globals.Object)});
  2306. //>>excludeEnd("ctx");
  2307. },
  2308. //>>excludeStart("ide", pragmas.excludeIdeData);
  2309. args: ["anInspector"],
  2310. source: "inspectOn: anInspector\x0a\x09| variables |\x0a\x09variables := Dictionary new.\x0a\x09variables at: '#self' put: self.\x0a\x09self class allInstanceVariableNames do: [ :each |\x0a\x09\x09variables at: each put: (self instVarAt: each) ].\x0a\x09anInspector\x0a\x09\x09setLabel: self printString;\x0a\x09\x09setVariables: variables",
  2311. referencedClasses: ["Dictionary"],
  2312. //>>excludeEnd("ide");
  2313. messageSends: ["new", "at:put:", "do:", "allInstanceVariableNames", "class", "instVarAt:", "setLabel:", "printString", "setVariables:"]
  2314. }),
  2315. $globals.Object);
  2316. $core.addMethod(
  2317. $core.method({
  2318. selector: "isBehavior",
  2319. protocol: 'testing',
  2320. fn: function (){
  2321. var self=this;
  2322. return false;
  2323. },
  2324. //>>excludeStart("ide", pragmas.excludeIdeData);
  2325. args: [],
  2326. source: "isBehavior\x0a\x09^ false",
  2327. referencedClasses: [],
  2328. //>>excludeEnd("ide");
  2329. messageSends: []
  2330. }),
  2331. $globals.Object);
  2332. $core.addMethod(
  2333. $core.method({
  2334. selector: "isBoolean",
  2335. protocol: 'testing',
  2336. fn: function (){
  2337. var self=this;
  2338. return false;
  2339. },
  2340. //>>excludeStart("ide", pragmas.excludeIdeData);
  2341. args: [],
  2342. source: "isBoolean\x0a\x09^ false",
  2343. referencedClasses: [],
  2344. //>>excludeEnd("ide");
  2345. messageSends: []
  2346. }),
  2347. $globals.Object);
  2348. $core.addMethod(
  2349. $core.method({
  2350. selector: "isClass",
  2351. protocol: 'testing',
  2352. fn: function (){
  2353. var self=this;
  2354. return false;
  2355. },
  2356. //>>excludeStart("ide", pragmas.excludeIdeData);
  2357. args: [],
  2358. source: "isClass\x0a\x09^ false",
  2359. referencedClasses: [],
  2360. //>>excludeEnd("ide");
  2361. messageSends: []
  2362. }),
  2363. $globals.Object);
  2364. $core.addMethod(
  2365. $core.method({
  2366. selector: "isCompiledMethod",
  2367. protocol: 'testing',
  2368. fn: function (){
  2369. var self=this;
  2370. return false;
  2371. },
  2372. //>>excludeStart("ide", pragmas.excludeIdeData);
  2373. args: [],
  2374. source: "isCompiledMethod\x0a\x09^ false",
  2375. referencedClasses: [],
  2376. //>>excludeEnd("ide");
  2377. messageSends: []
  2378. }),
  2379. $globals.Object);
  2380. $core.addMethod(
  2381. $core.method({
  2382. selector: "isImmutable",
  2383. protocol: 'testing',
  2384. fn: function (){
  2385. var self=this;
  2386. return false;
  2387. },
  2388. //>>excludeStart("ide", pragmas.excludeIdeData);
  2389. args: [],
  2390. source: "isImmutable\x0a\x09^ false",
  2391. referencedClasses: [],
  2392. //>>excludeEnd("ide");
  2393. messageSends: []
  2394. }),
  2395. $globals.Object);
  2396. $core.addMethod(
  2397. $core.method({
  2398. selector: "isMemberOf:",
  2399. protocol: 'testing',
  2400. fn: function (aClass){
  2401. var self=this;
  2402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2403. return $core.withContext(function($ctx1) {
  2404. //>>excludeEnd("ctx");
  2405. var $1;
  2406. $1=$recv(self._class()).__eq(aClass);
  2407. return $1;
  2408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2409. }, function($ctx1) {$ctx1.fill(self,"isMemberOf:",{aClass:aClass},$globals.Object)});
  2410. //>>excludeEnd("ctx");
  2411. },
  2412. //>>excludeStart("ide", pragmas.excludeIdeData);
  2413. args: ["aClass"],
  2414. source: "isMemberOf: aClass\x0a\x09^ self class = aClass",
  2415. referencedClasses: [],
  2416. //>>excludeEnd("ide");
  2417. messageSends: ["=", "class"]
  2418. }),
  2419. $globals.Object);
  2420. $core.addMethod(
  2421. $core.method({
  2422. selector: "isMetaclass",
  2423. protocol: 'testing',
  2424. fn: function (){
  2425. var self=this;
  2426. return false;
  2427. },
  2428. //>>excludeStart("ide", pragmas.excludeIdeData);
  2429. args: [],
  2430. source: "isMetaclass\x0a\x09^ false",
  2431. referencedClasses: [],
  2432. //>>excludeEnd("ide");
  2433. messageSends: []
  2434. }),
  2435. $globals.Object);
  2436. $core.addMethod(
  2437. $core.method({
  2438. selector: "isNil",
  2439. protocol: 'testing',
  2440. fn: function (){
  2441. var self=this;
  2442. return false;
  2443. },
  2444. //>>excludeStart("ide", pragmas.excludeIdeData);
  2445. args: [],
  2446. source: "isNil\x0a\x09^ false",
  2447. referencedClasses: [],
  2448. //>>excludeEnd("ide");
  2449. messageSends: []
  2450. }),
  2451. $globals.Object);
  2452. $core.addMethod(
  2453. $core.method({
  2454. selector: "isNumber",
  2455. protocol: 'testing',
  2456. fn: function (){
  2457. var self=this;
  2458. return false;
  2459. },
  2460. //>>excludeStart("ide", pragmas.excludeIdeData);
  2461. args: [],
  2462. source: "isNumber\x0a\x09^ false",
  2463. referencedClasses: [],
  2464. //>>excludeEnd("ide");
  2465. messageSends: []
  2466. }),
  2467. $globals.Object);
  2468. $core.addMethod(
  2469. $core.method({
  2470. selector: "isPackage",
  2471. protocol: 'testing',
  2472. fn: function (){
  2473. var self=this;
  2474. return false;
  2475. },
  2476. //>>excludeStart("ide", pragmas.excludeIdeData);
  2477. args: [],
  2478. source: "isPackage\x0a\x09^ false",
  2479. referencedClasses: [],
  2480. //>>excludeEnd("ide");
  2481. messageSends: []
  2482. }),
  2483. $globals.Object);
  2484. $core.addMethod(
  2485. $core.method({
  2486. selector: "isParseFailure",
  2487. protocol: 'testing',
  2488. fn: function (){
  2489. var self=this;
  2490. return false;
  2491. },
  2492. //>>excludeStart("ide", pragmas.excludeIdeData);
  2493. args: [],
  2494. source: "isParseFailure\x0a\x09^ false",
  2495. referencedClasses: [],
  2496. //>>excludeEnd("ide");
  2497. messageSends: []
  2498. }),
  2499. $globals.Object);
  2500. $core.addMethod(
  2501. $core.method({
  2502. selector: "isString",
  2503. protocol: 'testing',
  2504. fn: function (){
  2505. var self=this;
  2506. return false;
  2507. },
  2508. //>>excludeStart("ide", pragmas.excludeIdeData);
  2509. args: [],
  2510. source: "isString\x0a\x09^ false",
  2511. referencedClasses: [],
  2512. //>>excludeEnd("ide");
  2513. messageSends: []
  2514. }),
  2515. $globals.Object);
  2516. $core.addMethod(
  2517. $core.method({
  2518. selector: "isSymbol",
  2519. protocol: 'testing',
  2520. fn: function (){
  2521. var self=this;
  2522. return false;
  2523. },
  2524. //>>excludeStart("ide", pragmas.excludeIdeData);
  2525. args: [],
  2526. source: "isSymbol\x0a\x09^ false",
  2527. referencedClasses: [],
  2528. //>>excludeEnd("ide");
  2529. messageSends: []
  2530. }),
  2531. $globals.Object);
  2532. $core.addMethod(
  2533. $core.method({
  2534. selector: "notNil",
  2535. protocol: 'testing',
  2536. fn: function (){
  2537. var self=this;
  2538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2539. return $core.withContext(function($ctx1) {
  2540. //>>excludeEnd("ctx");
  2541. var $1;
  2542. $1=$recv(self._isNil())._not();
  2543. return $1;
  2544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2545. }, function($ctx1) {$ctx1.fill(self,"notNil",{},$globals.Object)});
  2546. //>>excludeEnd("ctx");
  2547. },
  2548. //>>excludeStart("ide", pragmas.excludeIdeData);
  2549. args: [],
  2550. source: "notNil\x0a\x09^ self isNil not",
  2551. referencedClasses: [],
  2552. //>>excludeEnd("ide");
  2553. messageSends: ["not", "isNil"]
  2554. }),
  2555. $globals.Object);
  2556. $core.addMethod(
  2557. $core.method({
  2558. selector: "postCopy",
  2559. protocol: 'copying',
  2560. fn: function (){
  2561. var self=this;
  2562. return self;
  2563. },
  2564. //>>excludeStart("ide", pragmas.excludeIdeData);
  2565. args: [],
  2566. source: "postCopy",
  2567. referencedClasses: [],
  2568. //>>excludeEnd("ide");
  2569. messageSends: []
  2570. }),
  2571. $globals.Object);
  2572. $core.addMethod(
  2573. $core.method({
  2574. selector: "putOn:",
  2575. protocol: 'streaming',
  2576. fn: function (aStream){
  2577. var self=this;
  2578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2579. return $core.withContext(function($ctx1) {
  2580. //>>excludeEnd("ctx");
  2581. $recv(aStream)._nextPut_(self);
  2582. return self;
  2583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2584. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.Object)});
  2585. //>>excludeEnd("ctx");
  2586. },
  2587. //>>excludeStart("ide", pragmas.excludeIdeData);
  2588. args: ["aStream"],
  2589. source: "putOn: aStream\x0a\x09aStream nextPut: self",
  2590. referencedClasses: [],
  2591. //>>excludeEnd("ide");
  2592. messageSends: ["nextPut:"]
  2593. }),
  2594. $globals.Object);
  2595. $core.addMethod(
  2596. $core.method({
  2597. selector: "respondsTo:",
  2598. protocol: 'testing',
  2599. fn: function (aSelector){
  2600. var self=this;
  2601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2602. return $core.withContext(function($ctx1) {
  2603. //>>excludeEnd("ctx");
  2604. var $1;
  2605. $1=$recv(self._class())._canUnderstand_(aSelector);
  2606. return $1;
  2607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2608. }, function($ctx1) {$ctx1.fill(self,"respondsTo:",{aSelector:aSelector},$globals.Object)});
  2609. //>>excludeEnd("ctx");
  2610. },
  2611. //>>excludeStart("ide", pragmas.excludeIdeData);
  2612. args: ["aSelector"],
  2613. source: "respondsTo: aSelector\x0a\x09^ self class canUnderstand: aSelector",
  2614. referencedClasses: [],
  2615. //>>excludeEnd("ide");
  2616. messageSends: ["canUnderstand:", "class"]
  2617. }),
  2618. $globals.Object);
  2619. $core.addMethod(
  2620. $core.method({
  2621. selector: "shallowCopy",
  2622. protocol: 'copying',
  2623. fn: function (){
  2624. var self=this;
  2625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2626. return $core.withContext(function($ctx1) {
  2627. //>>excludeEnd("ctx");
  2628. var copy = self.klass._new();
  2629. Object.keys(self).forEach(function(i) {
  2630. if(/^@.+/.test(i)) {
  2631. copy[i] = self[i];
  2632. }
  2633. });
  2634. return copy;
  2635. ;
  2636. return self;
  2637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2638. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{},$globals.Object)});
  2639. //>>excludeEnd("ctx");
  2640. },
  2641. //>>excludeStart("ide", pragmas.excludeIdeData);
  2642. args: [],
  2643. source: "shallowCopy\x0a\x09<\x0a\x09\x09var copy = self.klass._new();\x0a\x09\x09Object.keys(self).forEach(function(i) {\x0a\x09\x09if(/^@.+/.test(i)) {\x0a\x09\x09\x09copy[i] = self[i];\x0a\x09\x09}\x0a\x09\x09});\x0a\x09\x09return copy;\x0a\x09>",
  2644. referencedClasses: [],
  2645. //>>excludeEnd("ide");
  2646. messageSends: []
  2647. }),
  2648. $globals.Object);
  2649. $core.addMethod(
  2650. $core.method({
  2651. selector: "shouldNotImplement",
  2652. protocol: 'error handling',
  2653. fn: function (){
  2654. var self=this;
  2655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2656. return $core.withContext(function($ctx1) {
  2657. //>>excludeEnd("ctx");
  2658. self._error_("This method should not be implemented in ".__comma($recv(self._class())._name()));
  2659. return self;
  2660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2661. }, function($ctx1) {$ctx1.fill(self,"shouldNotImplement",{},$globals.Object)});
  2662. //>>excludeEnd("ctx");
  2663. },
  2664. //>>excludeStart("ide", pragmas.excludeIdeData);
  2665. args: [],
  2666. source: "shouldNotImplement\x0a\x09self error: 'This method should not be implemented in ', self class name",
  2667. referencedClasses: [],
  2668. //>>excludeEnd("ide");
  2669. messageSends: ["error:", ",", "name", "class"]
  2670. }),
  2671. $globals.Object);
  2672. $core.addMethod(
  2673. $core.method({
  2674. selector: "size",
  2675. protocol: 'accessing',
  2676. fn: function (){
  2677. var self=this;
  2678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2679. return $core.withContext(function($ctx1) {
  2680. //>>excludeEnd("ctx");
  2681. self._error_("Object not indexable");
  2682. return self;
  2683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2684. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Object)});
  2685. //>>excludeEnd("ctx");
  2686. },
  2687. //>>excludeStart("ide", pragmas.excludeIdeData);
  2688. args: [],
  2689. source: "size\x0a\x09self error: 'Object not indexable'",
  2690. referencedClasses: [],
  2691. //>>excludeEnd("ide");
  2692. messageSends: ["error:"]
  2693. }),
  2694. $globals.Object);
  2695. $core.addMethod(
  2696. $core.method({
  2697. selector: "subclassResponsibility",
  2698. protocol: 'error handling',
  2699. fn: function (){
  2700. var self=this;
  2701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2702. return $core.withContext(function($ctx1) {
  2703. //>>excludeEnd("ctx");
  2704. self._error_("This method is a responsibility of a subclass");
  2705. return self;
  2706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2707. }, function($ctx1) {$ctx1.fill(self,"subclassResponsibility",{},$globals.Object)});
  2708. //>>excludeEnd("ctx");
  2709. },
  2710. //>>excludeStart("ide", pragmas.excludeIdeData);
  2711. args: [],
  2712. source: "subclassResponsibility\x0a\x09self error: 'This method is a responsibility of a subclass'",
  2713. referencedClasses: [],
  2714. //>>excludeEnd("ide");
  2715. messageSends: ["error:"]
  2716. }),
  2717. $globals.Object);
  2718. $core.addMethod(
  2719. $core.method({
  2720. selector: "throw:",
  2721. protocol: 'error handling',
  2722. fn: function (anObject){
  2723. var self=this;
  2724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2725. return $core.withContext(function($ctx1) {
  2726. //>>excludeEnd("ctx");
  2727. throw anObject ;
  2728. return self;
  2729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2730. }, function($ctx1) {$ctx1.fill(self,"throw:",{anObject:anObject},$globals.Object)});
  2731. //>>excludeEnd("ctx");
  2732. },
  2733. //>>excludeStart("ide", pragmas.excludeIdeData);
  2734. args: ["anObject"],
  2735. source: "throw: anObject\x0a\x09< throw anObject >",
  2736. referencedClasses: [],
  2737. //>>excludeEnd("ide");
  2738. messageSends: []
  2739. }),
  2740. $globals.Object);
  2741. $core.addMethod(
  2742. $core.method({
  2743. selector: "try:catch:",
  2744. protocol: 'error handling',
  2745. fn: function (aBlock,anotherBlock){
  2746. var self=this;
  2747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2748. return $core.withContext(function($ctx1) {
  2749. //>>excludeEnd("ctx");
  2750. var $1;
  2751. self._deprecatedAPI();
  2752. $1=$recv(aBlock)._tryCatch_(anotherBlock);
  2753. return $1;
  2754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2755. }, function($ctx1) {$ctx1.fill(self,"try:catch:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Object)});
  2756. //>>excludeEnd("ctx");
  2757. },
  2758. //>>excludeStart("ide", pragmas.excludeIdeData);
  2759. args: ["aBlock", "anotherBlock"],
  2760. source: "try: aBlock catch: anotherBlock\x0a\x09self deprecatedAPI.\x0a\x09\x0a\x09^ aBlock tryCatch: anotherBlock",
  2761. referencedClasses: [],
  2762. //>>excludeEnd("ide");
  2763. messageSends: ["deprecatedAPI", "tryCatch:"]
  2764. }),
  2765. $globals.Object);
  2766. $core.addMethod(
  2767. $core.method({
  2768. selector: "value",
  2769. protocol: 'accessing',
  2770. fn: function (){
  2771. var self=this;
  2772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2773. return $core.withContext(function($ctx1) {
  2774. //>>excludeEnd("ctx");
  2775. return self.valueOf();
  2776. return self;
  2777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2778. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.Object)});
  2779. //>>excludeEnd("ctx");
  2780. },
  2781. //>>excludeStart("ide", pragmas.excludeIdeData);
  2782. args: [],
  2783. source: "value\x0a\x09<return self.valueOf()>",
  2784. referencedClasses: [],
  2785. //>>excludeEnd("ide");
  2786. messageSends: []
  2787. }),
  2788. $globals.Object);
  2789. $core.addMethod(
  2790. $core.method({
  2791. selector: "accessorProtocolWith:",
  2792. protocol: 'helios',
  2793. fn: function (aGenerator){
  2794. var self=this;
  2795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2796. return $core.withContext(function($ctx1) {
  2797. //>>excludeEnd("ctx");
  2798. $recv(aGenerator)._accessorProtocolForObject();
  2799. return self;
  2800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2801. }, function($ctx1) {$ctx1.fill(self,"accessorProtocolWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2802. //>>excludeEnd("ctx");
  2803. },
  2804. //>>excludeStart("ide", pragmas.excludeIdeData);
  2805. args: ["aGenerator"],
  2806. source: "accessorProtocolWith: aGenerator\x0a\x09aGenerator accessorProtocolForObject",
  2807. referencedClasses: [],
  2808. //>>excludeEnd("ide");
  2809. messageSends: ["accessorProtocolForObject"]
  2810. }),
  2811. $globals.Object.klass);
  2812. $core.addMethod(
  2813. $core.method({
  2814. selector: "accessorsSourceCodesWith:",
  2815. protocol: 'helios',
  2816. fn: function (aGenerator){
  2817. var self=this;
  2818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2819. return $core.withContext(function($ctx1) {
  2820. //>>excludeEnd("ctx");
  2821. $recv(aGenerator)._accessorsForObject();
  2822. return self;
  2823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2824. }, function($ctx1) {$ctx1.fill(self,"accessorsSourceCodesWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2825. //>>excludeEnd("ctx");
  2826. },
  2827. //>>excludeStart("ide", pragmas.excludeIdeData);
  2828. args: ["aGenerator"],
  2829. source: "accessorsSourceCodesWith: aGenerator\x0a\x09aGenerator accessorsForObject",
  2830. referencedClasses: [],
  2831. //>>excludeEnd("ide");
  2832. messageSends: ["accessorsForObject"]
  2833. }),
  2834. $globals.Object.klass);
  2835. $core.addMethod(
  2836. $core.method({
  2837. selector: "initialize",
  2838. protocol: 'initialization',
  2839. fn: function (){
  2840. var self=this;
  2841. return self;
  2842. },
  2843. //>>excludeStart("ide", pragmas.excludeIdeData);
  2844. args: [],
  2845. source: "initialize\x0a\x09\x22no op\x22",
  2846. referencedClasses: [],
  2847. //>>excludeEnd("ide");
  2848. messageSends: []
  2849. }),
  2850. $globals.Object.klass);
  2851. $core.addMethod(
  2852. $core.method({
  2853. selector: "initializeProtocolWith:",
  2854. protocol: 'helios',
  2855. fn: function (aGenerator){
  2856. var self=this;
  2857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2858. return $core.withContext(function($ctx1) {
  2859. //>>excludeEnd("ctx");
  2860. $recv(aGenerator)._initializeProtocolForObject();
  2861. return self;
  2862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2863. }, function($ctx1) {$ctx1.fill(self,"initializeProtocolWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2864. //>>excludeEnd("ctx");
  2865. },
  2866. //>>excludeStart("ide", pragmas.excludeIdeData);
  2867. args: ["aGenerator"],
  2868. source: "initializeProtocolWith: aGenerator\x0a\x09aGenerator initializeProtocolForObject",
  2869. referencedClasses: [],
  2870. //>>excludeEnd("ide");
  2871. messageSends: ["initializeProtocolForObject"]
  2872. }),
  2873. $globals.Object.klass);
  2874. $core.addMethod(
  2875. $core.method({
  2876. selector: "initializeSourceCodesWith:",
  2877. protocol: 'helios',
  2878. fn: function (aGenerator){
  2879. var self=this;
  2880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2881. return $core.withContext(function($ctx1) {
  2882. //>>excludeEnd("ctx");
  2883. $recv(aGenerator)._initializeForObject();
  2884. return self;
  2885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2886. }, function($ctx1) {$ctx1.fill(self,"initializeSourceCodesWith:",{aGenerator:aGenerator},$globals.Object.klass)});
  2887. //>>excludeEnd("ctx");
  2888. },
  2889. //>>excludeStart("ide", pragmas.excludeIdeData);
  2890. args: ["aGenerator"],
  2891. source: "initializeSourceCodesWith: aGenerator\x0a\x09aGenerator initializeForObject",
  2892. referencedClasses: [],
  2893. //>>excludeEnd("ide");
  2894. messageSends: ["initializeForObject"]
  2895. }),
  2896. $globals.Object.klass);
  2897. $core.addClass('Boolean', $globals.Object, [], 'Kernel-Objects');
  2898. //>>excludeStart("ide", pragmas.excludeIdeData);
  2899. $globals.Boolean.comment="I define the protocol for logic testing operations and conditional control structures for the logical values (see the `controlling` protocol).\x0a\x0aI have two instances, `true` and `false`.\x0a\x0aI am directly mapped to JavaScript Boolean. The `true` and `false` objects are the JavaScript boolean objects.\x0a\x0a## Usage Example:\x0a\x0a aBoolean not ifTrue: [ ... ] ifFalse: [ ... ]";
  2900. //>>excludeEnd("ide");
  2901. $core.addMethod(
  2902. $core.method({
  2903. selector: "&",
  2904. protocol: 'controlling',
  2905. fn: function (aBoolean){
  2906. var self=this;
  2907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2908. return $core.withContext(function($ctx1) {
  2909. //>>excludeEnd("ctx");
  2910. if(self == true) {
  2911. return aBoolean;
  2912. } else {
  2913. return false;
  2914. }
  2915. ;
  2916. return self;
  2917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2918. }, function($ctx1) {$ctx1.fill(self,"&",{aBoolean:aBoolean},$globals.Boolean)});
  2919. //>>excludeEnd("ctx");
  2920. },
  2921. //>>excludeStart("ide", pragmas.excludeIdeData);
  2922. args: ["aBoolean"],
  2923. source: "& aBoolean\x0a\x09<\x0a\x09\x09if(self == true) {\x0a\x09\x09return aBoolean;\x0a\x09\x09} else {\x0a\x09\x09return false;\x0a\x09\x09}\x0a\x09>",
  2924. referencedClasses: [],
  2925. //>>excludeEnd("ide");
  2926. messageSends: []
  2927. }),
  2928. $globals.Boolean);
  2929. $core.addMethod(
  2930. $core.method({
  2931. selector: "=",
  2932. protocol: 'comparing',
  2933. fn: function (aBoolean){
  2934. var self=this;
  2935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2936. return $core.withContext(function($ctx1) {
  2937. //>>excludeEnd("ctx");
  2938. return aBoolean != null &&
  2939. typeof aBoolean._isBoolean === "function" &&
  2940. aBoolean._isBoolean() &&
  2941. Boolean(self == true) == aBoolean
  2942. ;
  2943. return self;
  2944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2945. }, function($ctx1) {$ctx1.fill(self,"=",{aBoolean:aBoolean},$globals.Boolean)});
  2946. //>>excludeEnd("ctx");
  2947. },
  2948. //>>excludeStart("ide", pragmas.excludeIdeData);
  2949. args: ["aBoolean"],
  2950. source: "= aBoolean\x0a\x09<\x0a\x09\x09return aBoolean != null &&\x0a\x09\x09\x09typeof aBoolean._isBoolean === \x22function\x22 &&\x0a\x09\x09\x09aBoolean._isBoolean() &&\x0a\x09\x09\x09Boolean(self == true) == aBoolean\x0a\x09>",
  2951. referencedClasses: [],
  2952. //>>excludeEnd("ide");
  2953. messageSends: []
  2954. }),
  2955. $globals.Boolean);
  2956. $core.addMethod(
  2957. $core.method({
  2958. selector: "==",
  2959. protocol: 'comparing',
  2960. fn: function (aBoolean){
  2961. var self=this;
  2962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2963. return $core.withContext(function($ctx1) {
  2964. //>>excludeEnd("ctx");
  2965. var $1;
  2966. $1=self.__eq(aBoolean);
  2967. return $1;
  2968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2969. }, function($ctx1) {$ctx1.fill(self,"==",{aBoolean:aBoolean},$globals.Boolean)});
  2970. //>>excludeEnd("ctx");
  2971. },
  2972. //>>excludeStart("ide", pragmas.excludeIdeData);
  2973. args: ["aBoolean"],
  2974. source: "== aBoolean\x0a\x09^ self = aBoolean",
  2975. referencedClasses: [],
  2976. //>>excludeEnd("ide");
  2977. messageSends: ["="]
  2978. }),
  2979. $globals.Boolean);
  2980. $core.addMethod(
  2981. $core.method({
  2982. selector: "and:",
  2983. protocol: 'controlling',
  2984. fn: function (aBlock){
  2985. var self=this;
  2986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2987. return $core.withContext(function($ctx1) {
  2988. //>>excludeEnd("ctx");
  2989. var $2,$1;
  2990. $2=self.__eq(true);
  2991. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  2992. return false;
  2993. }));
  2994. return $1;
  2995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  2996. }, function($ctx1) {$ctx1.fill(self,"and:",{aBlock:aBlock},$globals.Boolean)});
  2997. //>>excludeEnd("ctx");
  2998. },
  2999. //>>excludeStart("ide", pragmas.excludeIdeData);
  3000. args: ["aBlock"],
  3001. source: "and: aBlock\x0a\x09^ self = true\x0a\x09\x09ifTrue: aBlock\x0a\x09\x09ifFalse: [ false ]",
  3002. referencedClasses: [],
  3003. //>>excludeEnd("ide");
  3004. messageSends: ["ifTrue:ifFalse:", "="]
  3005. }),
  3006. $globals.Boolean);
  3007. $core.addMethod(
  3008. $core.method({
  3009. selector: "asBit",
  3010. protocol: 'converting',
  3011. fn: function (){
  3012. var self=this;
  3013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3014. return $core.withContext(function($ctx1) {
  3015. //>>excludeEnd("ctx");
  3016. var $1;
  3017. if($core.assert(self)){
  3018. $1=(1);
  3019. } else {
  3020. $1=(0);
  3021. };
  3022. return $1;
  3023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3024. }, function($ctx1) {$ctx1.fill(self,"asBit",{},$globals.Boolean)});
  3025. //>>excludeEnd("ctx");
  3026. },
  3027. //>>excludeStart("ide", pragmas.excludeIdeData);
  3028. args: [],
  3029. source: "asBit\x0a\x09^ self ifTrue: [ 1 ] ifFalse: [ 0 ]",
  3030. referencedClasses: [],
  3031. //>>excludeEnd("ide");
  3032. messageSends: ["ifTrue:ifFalse:"]
  3033. }),
  3034. $globals.Boolean);
  3035. $core.addMethod(
  3036. $core.method({
  3037. selector: "asJSON",
  3038. protocol: 'converting',
  3039. fn: function (){
  3040. var self=this;
  3041. return self;
  3042. },
  3043. //>>excludeStart("ide", pragmas.excludeIdeData);
  3044. args: [],
  3045. source: "asJSON\x0a\x09^ self",
  3046. referencedClasses: [],
  3047. //>>excludeEnd("ide");
  3048. messageSends: []
  3049. }),
  3050. $globals.Boolean);
  3051. $core.addMethod(
  3052. $core.method({
  3053. selector: "asString",
  3054. protocol: 'converting',
  3055. fn: function (){
  3056. var self=this;
  3057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3058. return $core.withContext(function($ctx1) {
  3059. //>>excludeEnd("ctx");
  3060. return self.toString() ;
  3061. return self;
  3062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3063. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Boolean)});
  3064. //>>excludeEnd("ctx");
  3065. },
  3066. //>>excludeStart("ide", pragmas.excludeIdeData);
  3067. args: [],
  3068. source: "asString\x0a\x09< return self.toString() >",
  3069. referencedClasses: [],
  3070. //>>excludeEnd("ide");
  3071. messageSends: []
  3072. }),
  3073. $globals.Boolean);
  3074. $core.addMethod(
  3075. $core.method({
  3076. selector: "deepCopy",
  3077. protocol: 'copying',
  3078. fn: function (){
  3079. var self=this;
  3080. return self;
  3081. },
  3082. //>>excludeStart("ide", pragmas.excludeIdeData);
  3083. args: [],
  3084. source: "deepCopy\x0a\x09^ self",
  3085. referencedClasses: [],
  3086. //>>excludeEnd("ide");
  3087. messageSends: []
  3088. }),
  3089. $globals.Boolean);
  3090. $core.addMethod(
  3091. $core.method({
  3092. selector: "ifFalse:",
  3093. protocol: 'controlling',
  3094. fn: function (aBlock){
  3095. var self=this;
  3096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3097. return $core.withContext(function($ctx1) {
  3098. //>>excludeEnd("ctx");
  3099. var $1;
  3100. $1=self._ifTrue_ifFalse_((function(){
  3101. }),aBlock);
  3102. return $1;
  3103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3104. }, function($ctx1) {$ctx1.fill(self,"ifFalse:",{aBlock:aBlock},$globals.Boolean)});
  3105. //>>excludeEnd("ctx");
  3106. },
  3107. //>>excludeStart("ide", pragmas.excludeIdeData);
  3108. args: ["aBlock"],
  3109. source: "ifFalse: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: [] ifFalse: aBlock",
  3110. referencedClasses: [],
  3111. //>>excludeEnd("ide");
  3112. messageSends: ["ifTrue:ifFalse:"]
  3113. }),
  3114. $globals.Boolean);
  3115. $core.addMethod(
  3116. $core.method({
  3117. selector: "ifFalse:ifTrue:",
  3118. protocol: 'controlling',
  3119. fn: function (aBlock,anotherBlock){
  3120. var self=this;
  3121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3122. return $core.withContext(function($ctx1) {
  3123. //>>excludeEnd("ctx");
  3124. var $1;
  3125. $1=self._ifTrue_ifFalse_(anotherBlock,aBlock);
  3126. return $1;
  3127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3128. }, function($ctx1) {$ctx1.fill(self,"ifFalse:ifTrue:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Boolean)});
  3129. //>>excludeEnd("ctx");
  3130. },
  3131. //>>excludeStart("ide", pragmas.excludeIdeData);
  3132. args: ["aBlock", "anotherBlock"],
  3133. source: "ifFalse: aBlock ifTrue: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: anotherBlock ifFalse: aBlock",
  3134. referencedClasses: [],
  3135. //>>excludeEnd("ide");
  3136. messageSends: ["ifTrue:ifFalse:"]
  3137. }),
  3138. $globals.Boolean);
  3139. $core.addMethod(
  3140. $core.method({
  3141. selector: "ifTrue:",
  3142. protocol: 'controlling',
  3143. fn: function (aBlock){
  3144. var self=this;
  3145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3146. return $core.withContext(function($ctx1) {
  3147. //>>excludeEnd("ctx");
  3148. var $1;
  3149. $1=self._ifTrue_ifFalse_(aBlock,(function(){
  3150. }));
  3151. return $1;
  3152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3153. }, function($ctx1) {$ctx1.fill(self,"ifTrue:",{aBlock:aBlock},$globals.Boolean)});
  3154. //>>excludeEnd("ctx");
  3155. },
  3156. //>>excludeStart("ide", pragmas.excludeIdeData);
  3157. args: ["aBlock"],
  3158. source: "ifTrue: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifTrue: aBlock ifFalse: []",
  3159. referencedClasses: [],
  3160. //>>excludeEnd("ide");
  3161. messageSends: ["ifTrue:ifFalse:"]
  3162. }),
  3163. $globals.Boolean);
  3164. $core.addMethod(
  3165. $core.method({
  3166. selector: "ifTrue:ifFalse:",
  3167. protocol: 'controlling',
  3168. fn: function (aBlock,anotherBlock){
  3169. var self=this;
  3170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3171. return $core.withContext(function($ctx1) {
  3172. //>>excludeEnd("ctx");
  3173. if(self == true) {
  3174. return aBlock._value();
  3175. } else {
  3176. return anotherBlock._value();
  3177. }
  3178. ;
  3179. return self;
  3180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3181. }, function($ctx1) {$ctx1.fill(self,"ifTrue:ifFalse:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Boolean)});
  3182. //>>excludeEnd("ctx");
  3183. },
  3184. //>>excludeStart("ide", pragmas.excludeIdeData);
  3185. args: ["aBlock", "anotherBlock"],
  3186. source: "ifTrue: aBlock ifFalse: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09<\x0a\x09\x09if(self == true) {\x0a\x09\x09return aBlock._value();\x0a\x09\x09} else {\x0a\x09\x09return anotherBlock._value();\x0a\x09\x09}\x0a\x09>",
  3187. referencedClasses: [],
  3188. //>>excludeEnd("ide");
  3189. messageSends: []
  3190. }),
  3191. $globals.Boolean);
  3192. $core.addMethod(
  3193. $core.method({
  3194. selector: "isBoolean",
  3195. protocol: 'testing',
  3196. fn: function (){
  3197. var self=this;
  3198. return true;
  3199. },
  3200. //>>excludeStart("ide", pragmas.excludeIdeData);
  3201. args: [],
  3202. source: "isBoolean\x0a\x09^ true",
  3203. referencedClasses: [],
  3204. //>>excludeEnd("ide");
  3205. messageSends: []
  3206. }),
  3207. $globals.Boolean);
  3208. $core.addMethod(
  3209. $core.method({
  3210. selector: "isImmutable",
  3211. protocol: 'testing',
  3212. fn: function (){
  3213. var self=this;
  3214. return true;
  3215. },
  3216. //>>excludeStart("ide", pragmas.excludeIdeData);
  3217. args: [],
  3218. source: "isImmutable\x0a\x09^ true",
  3219. referencedClasses: [],
  3220. //>>excludeEnd("ide");
  3221. messageSends: []
  3222. }),
  3223. $globals.Boolean);
  3224. $core.addMethod(
  3225. $core.method({
  3226. selector: "not",
  3227. protocol: 'controlling',
  3228. fn: function (){
  3229. var self=this;
  3230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3231. return $core.withContext(function($ctx1) {
  3232. //>>excludeEnd("ctx");
  3233. var $1;
  3234. $1=self.__eq(false);
  3235. return $1;
  3236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3237. }, function($ctx1) {$ctx1.fill(self,"not",{},$globals.Boolean)});
  3238. //>>excludeEnd("ctx");
  3239. },
  3240. //>>excludeStart("ide", pragmas.excludeIdeData);
  3241. args: [],
  3242. source: "not\x0a\x09^ self = false",
  3243. referencedClasses: [],
  3244. //>>excludeEnd("ide");
  3245. messageSends: ["="]
  3246. }),
  3247. $globals.Boolean);
  3248. $core.addMethod(
  3249. $core.method({
  3250. selector: "or:",
  3251. protocol: 'controlling',
  3252. fn: function (aBlock){
  3253. var self=this;
  3254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3255. return $core.withContext(function($ctx1) {
  3256. //>>excludeEnd("ctx");
  3257. var $2,$1;
  3258. $2=self.__eq(true);
  3259. $1=$recv($2)._ifTrue_ifFalse_((function(){
  3260. return true;
  3261. }),aBlock);
  3262. return $1;
  3263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3264. }, function($ctx1) {$ctx1.fill(self,"or:",{aBlock:aBlock},$globals.Boolean)});
  3265. //>>excludeEnd("ctx");
  3266. },
  3267. //>>excludeStart("ide", pragmas.excludeIdeData);
  3268. args: ["aBlock"],
  3269. source: "or: aBlock\x0a\x09^ self = true\x0a\x09\x09ifTrue: [ true ]\x0a\x09\x09ifFalse: aBlock",
  3270. referencedClasses: [],
  3271. //>>excludeEnd("ide");
  3272. messageSends: ["ifTrue:ifFalse:", "="]
  3273. }),
  3274. $globals.Boolean);
  3275. $core.addMethod(
  3276. $core.method({
  3277. selector: "printOn:",
  3278. protocol: 'printing',
  3279. fn: function (aStream){
  3280. var self=this;
  3281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3282. return $core.withContext(function($ctx1) {
  3283. //>>excludeEnd("ctx");
  3284. $recv(aStream)._nextPutAll_(self._asString());
  3285. return self;
  3286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3287. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Boolean)});
  3288. //>>excludeEnd("ctx");
  3289. },
  3290. //>>excludeStart("ide", pragmas.excludeIdeData);
  3291. args: ["aStream"],
  3292. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  3293. referencedClasses: [],
  3294. //>>excludeEnd("ide");
  3295. messageSends: ["nextPutAll:", "asString"]
  3296. }),
  3297. $globals.Boolean);
  3298. $core.addMethod(
  3299. $core.method({
  3300. selector: "shallowCopy",
  3301. protocol: 'copying',
  3302. fn: function (){
  3303. var self=this;
  3304. return self;
  3305. },
  3306. //>>excludeStart("ide", pragmas.excludeIdeData);
  3307. args: [],
  3308. source: "shallowCopy\x0a\x09^ self",
  3309. referencedClasses: [],
  3310. //>>excludeEnd("ide");
  3311. messageSends: []
  3312. }),
  3313. $globals.Boolean);
  3314. $core.addMethod(
  3315. $core.method({
  3316. selector: "|",
  3317. protocol: 'controlling',
  3318. fn: function (aBoolean){
  3319. var self=this;
  3320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3321. return $core.withContext(function($ctx1) {
  3322. //>>excludeEnd("ctx");
  3323. if(self == true) {
  3324. return true;
  3325. } else {
  3326. return aBoolean;
  3327. }
  3328. ;
  3329. return self;
  3330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3331. }, function($ctx1) {$ctx1.fill(self,"|",{aBoolean:aBoolean},$globals.Boolean)});
  3332. //>>excludeEnd("ctx");
  3333. },
  3334. //>>excludeStart("ide", pragmas.excludeIdeData);
  3335. args: ["aBoolean"],
  3336. source: "| aBoolean\x0a\x09<\x0a\x09\x09if(self == true) {\x0a\x09\x09return true;\x0a\x09\x09} else {\x0a\x09\x09return aBoolean;\x0a\x09\x09}\x0a\x09>",
  3337. referencedClasses: [],
  3338. //>>excludeEnd("ide");
  3339. messageSends: []
  3340. }),
  3341. $globals.Boolean);
  3342. $core.addClass('Date', $globals.Object, [], 'Kernel-Objects');
  3343. //>>excludeStart("ide", pragmas.excludeIdeData);
  3344. $globals.Date.comment="I am used to work with both dates and times. Therefore `Date today` and `Date now` are both valid in\x0aAmber and answer the same date object.\x0a\x0aDate directly maps to the `Date()` JavaScript constructor, and Amber date objects are JavaScript date objects.\x0a\x0a## API\x0a\x0aThe class-side `instance creation` protocol contains some convenience methods for creating date/time objects such as `#fromSeconds:`.\x0a\x0aArithmetic and comparison is supported (see the `comparing` and `arithmetic` protocols).\x0a\x0aThe `converting` protocol provides convenience methods for various convertions (to numbers, strings, etc.).";
  3345. //>>excludeEnd("ide");
  3346. $core.addMethod(
  3347. $core.method({
  3348. selector: "+",
  3349. protocol: 'arithmetic',
  3350. fn: function (aDate){
  3351. var self=this;
  3352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3353. return $core.withContext(function($ctx1) {
  3354. //>>excludeEnd("ctx");
  3355. return self + aDate;
  3356. return self;
  3357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3358. }, function($ctx1) {$ctx1.fill(self,"+",{aDate:aDate},$globals.Date)});
  3359. //>>excludeEnd("ctx");
  3360. },
  3361. //>>excludeStart("ide", pragmas.excludeIdeData);
  3362. args: ["aDate"],
  3363. source: "+ aDate\x0a\x09<return self + aDate>",
  3364. referencedClasses: [],
  3365. //>>excludeEnd("ide");
  3366. messageSends: []
  3367. }),
  3368. $globals.Date);
  3369. $core.addMethod(
  3370. $core.method({
  3371. selector: "-",
  3372. protocol: 'arithmetic',
  3373. fn: function (aDate){
  3374. var self=this;
  3375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3376. return $core.withContext(function($ctx1) {
  3377. //>>excludeEnd("ctx");
  3378. return self - aDate;
  3379. return self;
  3380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3381. }, function($ctx1) {$ctx1.fill(self,"-",{aDate:aDate},$globals.Date)});
  3382. //>>excludeEnd("ctx");
  3383. },
  3384. //>>excludeStart("ide", pragmas.excludeIdeData);
  3385. args: ["aDate"],
  3386. source: "- aDate\x0a\x09<return self - aDate>",
  3387. referencedClasses: [],
  3388. //>>excludeEnd("ide");
  3389. messageSends: []
  3390. }),
  3391. $globals.Date);
  3392. $core.addMethod(
  3393. $core.method({
  3394. selector: "<",
  3395. protocol: 'comparing',
  3396. fn: function (aDate){
  3397. var self=this;
  3398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3399. return $core.withContext(function($ctx1) {
  3400. //>>excludeEnd("ctx");
  3401. return self < aDate;
  3402. return self;
  3403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3404. }, function($ctx1) {$ctx1.fill(self,"<",{aDate:aDate},$globals.Date)});
  3405. //>>excludeEnd("ctx");
  3406. },
  3407. //>>excludeStart("ide", pragmas.excludeIdeData);
  3408. args: ["aDate"],
  3409. source: "< aDate\x0a\x09<return self < aDate>",
  3410. referencedClasses: [],
  3411. //>>excludeEnd("ide");
  3412. messageSends: []
  3413. }),
  3414. $globals.Date);
  3415. $core.addMethod(
  3416. $core.method({
  3417. selector: "<=",
  3418. protocol: 'comparing',
  3419. fn: function (aDate){
  3420. var self=this;
  3421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3422. return $core.withContext(function($ctx1) {
  3423. //>>excludeEnd("ctx");
  3424. return self <= aDate;
  3425. return self;
  3426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3427. }, function($ctx1) {$ctx1.fill(self,"<=",{aDate:aDate},$globals.Date)});
  3428. //>>excludeEnd("ctx");
  3429. },
  3430. //>>excludeStart("ide", pragmas.excludeIdeData);
  3431. args: ["aDate"],
  3432. source: "<= aDate\x0a\x09<return self <= aDate>",
  3433. referencedClasses: [],
  3434. //>>excludeEnd("ide");
  3435. messageSends: []
  3436. }),
  3437. $globals.Date);
  3438. $core.addMethod(
  3439. $core.method({
  3440. selector: ">",
  3441. protocol: 'comparing',
  3442. fn: function (aDate){
  3443. var self=this;
  3444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3445. return $core.withContext(function($ctx1) {
  3446. //>>excludeEnd("ctx");
  3447. return self > aDate;
  3448. return self;
  3449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3450. }, function($ctx1) {$ctx1.fill(self,">",{aDate:aDate},$globals.Date)});
  3451. //>>excludeEnd("ctx");
  3452. },
  3453. //>>excludeStart("ide", pragmas.excludeIdeData);
  3454. args: ["aDate"],
  3455. source: "> aDate\x0a\x09<return self >> aDate>",
  3456. referencedClasses: [],
  3457. //>>excludeEnd("ide");
  3458. messageSends: []
  3459. }),
  3460. $globals.Date);
  3461. $core.addMethod(
  3462. $core.method({
  3463. selector: ">=",
  3464. protocol: 'comparing',
  3465. fn: function (aDate){
  3466. var self=this;
  3467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3468. return $core.withContext(function($ctx1) {
  3469. //>>excludeEnd("ctx");
  3470. return self >= aDate;
  3471. return self;
  3472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3473. }, function($ctx1) {$ctx1.fill(self,">=",{aDate:aDate},$globals.Date)});
  3474. //>>excludeEnd("ctx");
  3475. },
  3476. //>>excludeStart("ide", pragmas.excludeIdeData);
  3477. args: ["aDate"],
  3478. source: ">= aDate\x0a\x09<return self >>= aDate>",
  3479. referencedClasses: [],
  3480. //>>excludeEnd("ide");
  3481. messageSends: []
  3482. }),
  3483. $globals.Date);
  3484. $core.addMethod(
  3485. $core.method({
  3486. selector: "asDateString",
  3487. protocol: 'converting',
  3488. fn: function (){
  3489. var self=this;
  3490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3491. return $core.withContext(function($ctx1) {
  3492. //>>excludeEnd("ctx");
  3493. return self.toDateString();
  3494. return self;
  3495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3496. }, function($ctx1) {$ctx1.fill(self,"asDateString",{},$globals.Date)});
  3497. //>>excludeEnd("ctx");
  3498. },
  3499. //>>excludeStart("ide", pragmas.excludeIdeData);
  3500. args: [],
  3501. source: "asDateString\x0a\x09<return self.toDateString()>",
  3502. referencedClasses: [],
  3503. //>>excludeEnd("ide");
  3504. messageSends: []
  3505. }),
  3506. $globals.Date);
  3507. $core.addMethod(
  3508. $core.method({
  3509. selector: "asLocaleString",
  3510. protocol: 'converting',
  3511. fn: function (){
  3512. var self=this;
  3513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3514. return $core.withContext(function($ctx1) {
  3515. //>>excludeEnd("ctx");
  3516. return self.toLocaleString();
  3517. return self;
  3518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3519. }, function($ctx1) {$ctx1.fill(self,"asLocaleString",{},$globals.Date)});
  3520. //>>excludeEnd("ctx");
  3521. },
  3522. //>>excludeStart("ide", pragmas.excludeIdeData);
  3523. args: [],
  3524. source: "asLocaleString\x0a\x09<return self.toLocaleString()>",
  3525. referencedClasses: [],
  3526. //>>excludeEnd("ide");
  3527. messageSends: []
  3528. }),
  3529. $globals.Date);
  3530. $core.addMethod(
  3531. $core.method({
  3532. selector: "asMilliseconds",
  3533. protocol: 'converting',
  3534. fn: function (){
  3535. var self=this;
  3536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3537. return $core.withContext(function($ctx1) {
  3538. //>>excludeEnd("ctx");
  3539. var $1;
  3540. $1=self._time();
  3541. return $1;
  3542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3543. }, function($ctx1) {$ctx1.fill(self,"asMilliseconds",{},$globals.Date)});
  3544. //>>excludeEnd("ctx");
  3545. },
  3546. //>>excludeStart("ide", pragmas.excludeIdeData);
  3547. args: [],
  3548. source: "asMilliseconds\x0a\x09^ self time",
  3549. referencedClasses: [],
  3550. //>>excludeEnd("ide");
  3551. messageSends: ["time"]
  3552. }),
  3553. $globals.Date);
  3554. $core.addMethod(
  3555. $core.method({
  3556. selector: "asNumber",
  3557. protocol: 'converting',
  3558. fn: function (){
  3559. var self=this;
  3560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3561. return $core.withContext(function($ctx1) {
  3562. //>>excludeEnd("ctx");
  3563. var $1;
  3564. $1=self._asMilliseconds();
  3565. return $1;
  3566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3567. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.Date)});
  3568. //>>excludeEnd("ctx");
  3569. },
  3570. //>>excludeStart("ide", pragmas.excludeIdeData);
  3571. args: [],
  3572. source: "asNumber\x0a\x09^ self asMilliseconds",
  3573. referencedClasses: [],
  3574. //>>excludeEnd("ide");
  3575. messageSends: ["asMilliseconds"]
  3576. }),
  3577. $globals.Date);
  3578. $core.addMethod(
  3579. $core.method({
  3580. selector: "asString",
  3581. protocol: 'converting',
  3582. fn: function (){
  3583. var self=this;
  3584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3585. return $core.withContext(function($ctx1) {
  3586. //>>excludeEnd("ctx");
  3587. return self.toString();
  3588. return self;
  3589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3590. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Date)});
  3591. //>>excludeEnd("ctx");
  3592. },
  3593. //>>excludeStart("ide", pragmas.excludeIdeData);
  3594. args: [],
  3595. source: "asString\x0a\x09<return self.toString()>",
  3596. referencedClasses: [],
  3597. //>>excludeEnd("ide");
  3598. messageSends: []
  3599. }),
  3600. $globals.Date);
  3601. $core.addMethod(
  3602. $core.method({
  3603. selector: "asTimeString",
  3604. protocol: 'converting',
  3605. fn: function (){
  3606. var self=this;
  3607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3608. return $core.withContext(function($ctx1) {
  3609. //>>excludeEnd("ctx");
  3610. return self.toTimeString();
  3611. return self;
  3612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3613. }, function($ctx1) {$ctx1.fill(self,"asTimeString",{},$globals.Date)});
  3614. //>>excludeEnd("ctx");
  3615. },
  3616. //>>excludeStart("ide", pragmas.excludeIdeData);
  3617. args: [],
  3618. source: "asTimeString\x0a\x09<return self.toTimeString()>",
  3619. referencedClasses: [],
  3620. //>>excludeEnd("ide");
  3621. messageSends: []
  3622. }),
  3623. $globals.Date);
  3624. $core.addMethod(
  3625. $core.method({
  3626. selector: "day",
  3627. protocol: 'accessing',
  3628. fn: function (){
  3629. var self=this;
  3630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3631. return $core.withContext(function($ctx1) {
  3632. //>>excludeEnd("ctx");
  3633. var $1;
  3634. $1=self._dayOfWeek();
  3635. return $1;
  3636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3637. }, function($ctx1) {$ctx1.fill(self,"day",{},$globals.Date)});
  3638. //>>excludeEnd("ctx");
  3639. },
  3640. //>>excludeStart("ide", pragmas.excludeIdeData);
  3641. args: [],
  3642. source: "day\x0a\x09^ self dayOfWeek",
  3643. referencedClasses: [],
  3644. //>>excludeEnd("ide");
  3645. messageSends: ["dayOfWeek"]
  3646. }),
  3647. $globals.Date);
  3648. $core.addMethod(
  3649. $core.method({
  3650. selector: "day:",
  3651. protocol: 'accessing',
  3652. fn: function (aNumber){
  3653. var self=this;
  3654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3655. return $core.withContext(function($ctx1) {
  3656. //>>excludeEnd("ctx");
  3657. self._dayOfWeek_(aNumber);
  3658. return self;
  3659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3660. }, function($ctx1) {$ctx1.fill(self,"day:",{aNumber:aNumber},$globals.Date)});
  3661. //>>excludeEnd("ctx");
  3662. },
  3663. //>>excludeStart("ide", pragmas.excludeIdeData);
  3664. args: ["aNumber"],
  3665. source: "day: aNumber\x0a\x09self dayOfWeek: aNumber",
  3666. referencedClasses: [],
  3667. //>>excludeEnd("ide");
  3668. messageSends: ["dayOfWeek:"]
  3669. }),
  3670. $globals.Date);
  3671. $core.addMethod(
  3672. $core.method({
  3673. selector: "dayOfMonth",
  3674. protocol: 'accessing',
  3675. fn: function (){
  3676. var self=this;
  3677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3678. return $core.withContext(function($ctx1) {
  3679. //>>excludeEnd("ctx");
  3680. return self.getDate();
  3681. return self;
  3682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3683. }, function($ctx1) {$ctx1.fill(self,"dayOfMonth",{},$globals.Date)});
  3684. //>>excludeEnd("ctx");
  3685. },
  3686. //>>excludeStart("ide", pragmas.excludeIdeData);
  3687. args: [],
  3688. source: "dayOfMonth\x0a\x09<return self.getDate()>",
  3689. referencedClasses: [],
  3690. //>>excludeEnd("ide");
  3691. messageSends: []
  3692. }),
  3693. $globals.Date);
  3694. $core.addMethod(
  3695. $core.method({
  3696. selector: "dayOfMonth:",
  3697. protocol: 'accessing',
  3698. fn: function (aNumber){
  3699. var self=this;
  3700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3701. return $core.withContext(function($ctx1) {
  3702. //>>excludeEnd("ctx");
  3703. self.setDate(aNumber);
  3704. return self;
  3705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3706. }, function($ctx1) {$ctx1.fill(self,"dayOfMonth:",{aNumber:aNumber},$globals.Date)});
  3707. //>>excludeEnd("ctx");
  3708. },
  3709. //>>excludeStart("ide", pragmas.excludeIdeData);
  3710. args: ["aNumber"],
  3711. source: "dayOfMonth: aNumber\x0a\x09<self.setDate(aNumber)>",
  3712. referencedClasses: [],
  3713. //>>excludeEnd("ide");
  3714. messageSends: []
  3715. }),
  3716. $globals.Date);
  3717. $core.addMethod(
  3718. $core.method({
  3719. selector: "dayOfWeek",
  3720. protocol: 'accessing',
  3721. fn: function (){
  3722. var self=this;
  3723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3724. return $core.withContext(function($ctx1) {
  3725. //>>excludeEnd("ctx");
  3726. return self.getDay() + 1;
  3727. return self;
  3728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3729. }, function($ctx1) {$ctx1.fill(self,"dayOfWeek",{},$globals.Date)});
  3730. //>>excludeEnd("ctx");
  3731. },
  3732. //>>excludeStart("ide", pragmas.excludeIdeData);
  3733. args: [],
  3734. source: "dayOfWeek\x0a\x09<return self.getDay() + 1>",
  3735. referencedClasses: [],
  3736. //>>excludeEnd("ide");
  3737. messageSends: []
  3738. }),
  3739. $globals.Date);
  3740. $core.addMethod(
  3741. $core.method({
  3742. selector: "dayOfWeek:",
  3743. protocol: 'accessing',
  3744. fn: function (aNumber){
  3745. var self=this;
  3746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3747. return $core.withContext(function($ctx1) {
  3748. //>>excludeEnd("ctx");
  3749. return self.setDay(aNumber - 1);
  3750. return self;
  3751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3752. }, function($ctx1) {$ctx1.fill(self,"dayOfWeek:",{aNumber:aNumber},$globals.Date)});
  3753. //>>excludeEnd("ctx");
  3754. },
  3755. //>>excludeStart("ide", pragmas.excludeIdeData);
  3756. args: ["aNumber"],
  3757. source: "dayOfWeek: aNumber\x0a\x09<return self.setDay(aNumber - 1)>",
  3758. referencedClasses: [],
  3759. //>>excludeEnd("ide");
  3760. messageSends: []
  3761. }),
  3762. $globals.Date);
  3763. $core.addMethod(
  3764. $core.method({
  3765. selector: "hours",
  3766. protocol: 'accessing',
  3767. fn: function (){
  3768. var self=this;
  3769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3770. return $core.withContext(function($ctx1) {
  3771. //>>excludeEnd("ctx");
  3772. return self.getHours();
  3773. return self;
  3774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3775. }, function($ctx1) {$ctx1.fill(self,"hours",{},$globals.Date)});
  3776. //>>excludeEnd("ctx");
  3777. },
  3778. //>>excludeStart("ide", pragmas.excludeIdeData);
  3779. args: [],
  3780. source: "hours\x0a\x09<return self.getHours()>",
  3781. referencedClasses: [],
  3782. //>>excludeEnd("ide");
  3783. messageSends: []
  3784. }),
  3785. $globals.Date);
  3786. $core.addMethod(
  3787. $core.method({
  3788. selector: "hours:",
  3789. protocol: 'accessing',
  3790. fn: function (aNumber){
  3791. var self=this;
  3792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3793. return $core.withContext(function($ctx1) {
  3794. //>>excludeEnd("ctx");
  3795. self.setHours(aNumber);
  3796. return self;
  3797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3798. }, function($ctx1) {$ctx1.fill(self,"hours:",{aNumber:aNumber},$globals.Date)});
  3799. //>>excludeEnd("ctx");
  3800. },
  3801. //>>excludeStart("ide", pragmas.excludeIdeData);
  3802. args: ["aNumber"],
  3803. source: "hours: aNumber\x0a\x09<self.setHours(aNumber)>",
  3804. referencedClasses: [],
  3805. //>>excludeEnd("ide");
  3806. messageSends: []
  3807. }),
  3808. $globals.Date);
  3809. $core.addMethod(
  3810. $core.method({
  3811. selector: "milliseconds",
  3812. protocol: 'accessing',
  3813. fn: function (){
  3814. var self=this;
  3815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3816. return $core.withContext(function($ctx1) {
  3817. //>>excludeEnd("ctx");
  3818. return self.getMilliseconds();
  3819. return self;
  3820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3821. }, function($ctx1) {$ctx1.fill(self,"milliseconds",{},$globals.Date)});
  3822. //>>excludeEnd("ctx");
  3823. },
  3824. //>>excludeStart("ide", pragmas.excludeIdeData);
  3825. args: [],
  3826. source: "milliseconds\x0a\x09<return self.getMilliseconds()>",
  3827. referencedClasses: [],
  3828. //>>excludeEnd("ide");
  3829. messageSends: []
  3830. }),
  3831. $globals.Date);
  3832. $core.addMethod(
  3833. $core.method({
  3834. selector: "milliseconds:",
  3835. protocol: 'accessing',
  3836. fn: function (aNumber){
  3837. var self=this;
  3838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3839. return $core.withContext(function($ctx1) {
  3840. //>>excludeEnd("ctx");
  3841. self.setMilliseconds(aNumber);
  3842. return self;
  3843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3844. }, function($ctx1) {$ctx1.fill(self,"milliseconds:",{aNumber:aNumber},$globals.Date)});
  3845. //>>excludeEnd("ctx");
  3846. },
  3847. //>>excludeStart("ide", pragmas.excludeIdeData);
  3848. args: ["aNumber"],
  3849. source: "milliseconds: aNumber\x0a\x09<self.setMilliseconds(aNumber)>",
  3850. referencedClasses: [],
  3851. //>>excludeEnd("ide");
  3852. messageSends: []
  3853. }),
  3854. $globals.Date);
  3855. $core.addMethod(
  3856. $core.method({
  3857. selector: "minutes",
  3858. protocol: 'accessing',
  3859. fn: function (){
  3860. var self=this;
  3861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3862. return $core.withContext(function($ctx1) {
  3863. //>>excludeEnd("ctx");
  3864. return self.getMinutes();
  3865. return self;
  3866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3867. }, function($ctx1) {$ctx1.fill(self,"minutes",{},$globals.Date)});
  3868. //>>excludeEnd("ctx");
  3869. },
  3870. //>>excludeStart("ide", pragmas.excludeIdeData);
  3871. args: [],
  3872. source: "minutes\x0a\x09<return self.getMinutes()>",
  3873. referencedClasses: [],
  3874. //>>excludeEnd("ide");
  3875. messageSends: []
  3876. }),
  3877. $globals.Date);
  3878. $core.addMethod(
  3879. $core.method({
  3880. selector: "minutes:",
  3881. protocol: 'accessing',
  3882. fn: function (aNumber){
  3883. var self=this;
  3884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3885. return $core.withContext(function($ctx1) {
  3886. //>>excludeEnd("ctx");
  3887. self.setMinutes(aNumber);
  3888. return self;
  3889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3890. }, function($ctx1) {$ctx1.fill(self,"minutes:",{aNumber:aNumber},$globals.Date)});
  3891. //>>excludeEnd("ctx");
  3892. },
  3893. //>>excludeStart("ide", pragmas.excludeIdeData);
  3894. args: ["aNumber"],
  3895. source: "minutes: aNumber\x0a\x09<self.setMinutes(aNumber)>",
  3896. referencedClasses: [],
  3897. //>>excludeEnd("ide");
  3898. messageSends: []
  3899. }),
  3900. $globals.Date);
  3901. $core.addMethod(
  3902. $core.method({
  3903. selector: "month",
  3904. protocol: 'accessing',
  3905. fn: function (){
  3906. var self=this;
  3907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3908. return $core.withContext(function($ctx1) {
  3909. //>>excludeEnd("ctx");
  3910. return self.getMonth() + 1;
  3911. return self;
  3912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3913. }, function($ctx1) {$ctx1.fill(self,"month",{},$globals.Date)});
  3914. //>>excludeEnd("ctx");
  3915. },
  3916. //>>excludeStart("ide", pragmas.excludeIdeData);
  3917. args: [],
  3918. source: "month\x0a\x09<return self.getMonth() + 1>",
  3919. referencedClasses: [],
  3920. //>>excludeEnd("ide");
  3921. messageSends: []
  3922. }),
  3923. $globals.Date);
  3924. $core.addMethod(
  3925. $core.method({
  3926. selector: "month:",
  3927. protocol: 'accessing',
  3928. fn: function (aNumber){
  3929. var self=this;
  3930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3931. return $core.withContext(function($ctx1) {
  3932. //>>excludeEnd("ctx");
  3933. self.setMonth(aNumber - 1);
  3934. return self;
  3935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3936. }, function($ctx1) {$ctx1.fill(self,"month:",{aNumber:aNumber},$globals.Date)});
  3937. //>>excludeEnd("ctx");
  3938. },
  3939. //>>excludeStart("ide", pragmas.excludeIdeData);
  3940. args: ["aNumber"],
  3941. source: "month: aNumber\x0a\x09<self.setMonth(aNumber - 1)>",
  3942. referencedClasses: [],
  3943. //>>excludeEnd("ide");
  3944. messageSends: []
  3945. }),
  3946. $globals.Date);
  3947. $core.addMethod(
  3948. $core.method({
  3949. selector: "printOn:",
  3950. protocol: 'printing',
  3951. fn: function (aStream){
  3952. var self=this;
  3953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3954. return $core.withContext(function($ctx1) {
  3955. //>>excludeEnd("ctx");
  3956. $recv(aStream)._nextPutAll_(self._asString());
  3957. return self;
  3958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3959. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Date)});
  3960. //>>excludeEnd("ctx");
  3961. },
  3962. //>>excludeStart("ide", pragmas.excludeIdeData);
  3963. args: ["aStream"],
  3964. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  3965. referencedClasses: [],
  3966. //>>excludeEnd("ide");
  3967. messageSends: ["nextPutAll:", "asString"]
  3968. }),
  3969. $globals.Date);
  3970. $core.addMethod(
  3971. $core.method({
  3972. selector: "seconds",
  3973. protocol: 'accessing',
  3974. fn: function (){
  3975. var self=this;
  3976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3977. return $core.withContext(function($ctx1) {
  3978. //>>excludeEnd("ctx");
  3979. return self.getSeconds();
  3980. return self;
  3981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  3982. }, function($ctx1) {$ctx1.fill(self,"seconds",{},$globals.Date)});
  3983. //>>excludeEnd("ctx");
  3984. },
  3985. //>>excludeStart("ide", pragmas.excludeIdeData);
  3986. args: [],
  3987. source: "seconds\x0a\x09<return self.getSeconds()>",
  3988. referencedClasses: [],
  3989. //>>excludeEnd("ide");
  3990. messageSends: []
  3991. }),
  3992. $globals.Date);
  3993. $core.addMethod(
  3994. $core.method({
  3995. selector: "seconds:",
  3996. protocol: 'accessing',
  3997. fn: function (aNumber){
  3998. var self=this;
  3999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4000. return $core.withContext(function($ctx1) {
  4001. //>>excludeEnd("ctx");
  4002. self.setSeconds(aNumber);
  4003. return self;
  4004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4005. }, function($ctx1) {$ctx1.fill(self,"seconds:",{aNumber:aNumber},$globals.Date)});
  4006. //>>excludeEnd("ctx");
  4007. },
  4008. //>>excludeStart("ide", pragmas.excludeIdeData);
  4009. args: ["aNumber"],
  4010. source: "seconds: aNumber\x0a\x09<self.setSeconds(aNumber)>",
  4011. referencedClasses: [],
  4012. //>>excludeEnd("ide");
  4013. messageSends: []
  4014. }),
  4015. $globals.Date);
  4016. $core.addMethod(
  4017. $core.method({
  4018. selector: "time",
  4019. protocol: 'accessing',
  4020. fn: function (){
  4021. var self=this;
  4022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4023. return $core.withContext(function($ctx1) {
  4024. //>>excludeEnd("ctx");
  4025. return self.getTime();
  4026. return self;
  4027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4028. }, function($ctx1) {$ctx1.fill(self,"time",{},$globals.Date)});
  4029. //>>excludeEnd("ctx");
  4030. },
  4031. //>>excludeStart("ide", pragmas.excludeIdeData);
  4032. args: [],
  4033. source: "time\x0a\x09<return self.getTime()>",
  4034. referencedClasses: [],
  4035. //>>excludeEnd("ide");
  4036. messageSends: []
  4037. }),
  4038. $globals.Date);
  4039. $core.addMethod(
  4040. $core.method({
  4041. selector: "time:",
  4042. protocol: 'accessing',
  4043. fn: function (aNumber){
  4044. var self=this;
  4045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4046. return $core.withContext(function($ctx1) {
  4047. //>>excludeEnd("ctx");
  4048. self.setTime(aNumber);
  4049. return self;
  4050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4051. }, function($ctx1) {$ctx1.fill(self,"time:",{aNumber:aNumber},$globals.Date)});
  4052. //>>excludeEnd("ctx");
  4053. },
  4054. //>>excludeStart("ide", pragmas.excludeIdeData);
  4055. args: ["aNumber"],
  4056. source: "time: aNumber\x0a\x09<self.setTime(aNumber)>",
  4057. referencedClasses: [],
  4058. //>>excludeEnd("ide");
  4059. messageSends: []
  4060. }),
  4061. $globals.Date);
  4062. $core.addMethod(
  4063. $core.method({
  4064. selector: "year",
  4065. protocol: 'accessing',
  4066. fn: function (){
  4067. var self=this;
  4068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4069. return $core.withContext(function($ctx1) {
  4070. //>>excludeEnd("ctx");
  4071. return self.getFullYear();
  4072. return self;
  4073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4074. }, function($ctx1) {$ctx1.fill(self,"year",{},$globals.Date)});
  4075. //>>excludeEnd("ctx");
  4076. },
  4077. //>>excludeStart("ide", pragmas.excludeIdeData);
  4078. args: [],
  4079. source: "year\x0a\x09<return self.getFullYear()>",
  4080. referencedClasses: [],
  4081. //>>excludeEnd("ide");
  4082. messageSends: []
  4083. }),
  4084. $globals.Date);
  4085. $core.addMethod(
  4086. $core.method({
  4087. selector: "year:",
  4088. protocol: 'accessing',
  4089. fn: function (aNumber){
  4090. var self=this;
  4091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4092. return $core.withContext(function($ctx1) {
  4093. //>>excludeEnd("ctx");
  4094. self.setFullYear(aNumber);
  4095. return self;
  4096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4097. }, function($ctx1) {$ctx1.fill(self,"year:",{aNumber:aNumber},$globals.Date)});
  4098. //>>excludeEnd("ctx");
  4099. },
  4100. //>>excludeStart("ide", pragmas.excludeIdeData);
  4101. args: ["aNumber"],
  4102. source: "year: aNumber\x0a\x09<self.setFullYear(aNumber)>",
  4103. referencedClasses: [],
  4104. //>>excludeEnd("ide");
  4105. messageSends: []
  4106. }),
  4107. $globals.Date);
  4108. $core.addMethod(
  4109. $core.method({
  4110. selector: "fromMilliseconds:",
  4111. protocol: 'instance creation',
  4112. fn: function (aNumber){
  4113. var self=this;
  4114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4115. return $core.withContext(function($ctx1) {
  4116. //>>excludeEnd("ctx");
  4117. var $1;
  4118. $1=self._new_(aNumber);
  4119. return $1;
  4120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4121. }, function($ctx1) {$ctx1.fill(self,"fromMilliseconds:",{aNumber:aNumber},$globals.Date.klass)});
  4122. //>>excludeEnd("ctx");
  4123. },
  4124. //>>excludeStart("ide", pragmas.excludeIdeData);
  4125. args: ["aNumber"],
  4126. source: "fromMilliseconds: aNumber\x0a\x09^ self new: aNumber",
  4127. referencedClasses: [],
  4128. //>>excludeEnd("ide");
  4129. messageSends: ["new:"]
  4130. }),
  4131. $globals.Date.klass);
  4132. $core.addMethod(
  4133. $core.method({
  4134. selector: "fromSeconds:",
  4135. protocol: 'instance creation',
  4136. fn: function (aNumber){
  4137. var self=this;
  4138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4139. return $core.withContext(function($ctx1) {
  4140. //>>excludeEnd("ctx");
  4141. var $1;
  4142. $1=self._fromMilliseconds_($recv(aNumber).__star((1000)));
  4143. return $1;
  4144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4145. }, function($ctx1) {$ctx1.fill(self,"fromSeconds:",{aNumber:aNumber},$globals.Date.klass)});
  4146. //>>excludeEnd("ctx");
  4147. },
  4148. //>>excludeStart("ide", pragmas.excludeIdeData);
  4149. args: ["aNumber"],
  4150. source: "fromSeconds: aNumber\x0a\x09^ self fromMilliseconds: aNumber * 1000",
  4151. referencedClasses: [],
  4152. //>>excludeEnd("ide");
  4153. messageSends: ["fromMilliseconds:", "*"]
  4154. }),
  4155. $globals.Date.klass);
  4156. $core.addMethod(
  4157. $core.method({
  4158. selector: "fromString:",
  4159. protocol: 'instance creation',
  4160. fn: function (aString){
  4161. var self=this;
  4162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4163. return $core.withContext(function($ctx1) {
  4164. //>>excludeEnd("ctx");
  4165. var $1;
  4166. $1=self._new_(aString);
  4167. return $1;
  4168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4169. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.Date.klass)});
  4170. //>>excludeEnd("ctx");
  4171. },
  4172. //>>excludeStart("ide", pragmas.excludeIdeData);
  4173. args: ["aString"],
  4174. source: "fromString: aString\x0a\x09\x22Example: Date fromString('2011/04/15 00:00:00')\x22\x0a\x09^ self new: aString",
  4175. referencedClasses: [],
  4176. //>>excludeEnd("ide");
  4177. messageSends: ["new:"]
  4178. }),
  4179. $globals.Date.klass);
  4180. $core.addMethod(
  4181. $core.method({
  4182. selector: "heliosClass",
  4183. protocol: 'helios',
  4184. fn: function (){
  4185. var self=this;
  4186. return "magnitude";
  4187. },
  4188. //>>excludeStart("ide", pragmas.excludeIdeData);
  4189. args: [],
  4190. source: "heliosClass\x0a\x09^ 'magnitude'",
  4191. referencedClasses: [],
  4192. //>>excludeEnd("ide");
  4193. messageSends: []
  4194. }),
  4195. $globals.Date.klass);
  4196. $core.addMethod(
  4197. $core.method({
  4198. selector: "millisecondsToRun:",
  4199. protocol: 'instance creation',
  4200. fn: function (aBlock){
  4201. var self=this;
  4202. var t;
  4203. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  4204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4205. return $core.withContext(function($ctx1) {
  4206. //>>excludeEnd("ctx");
  4207. var $1;
  4208. t=$recv($Date())._now();
  4209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4210. $ctx1.sendIdx["now"]=1;
  4211. //>>excludeEnd("ctx");
  4212. $recv(aBlock)._value();
  4213. $1=$recv($recv($Date())._now()).__minus(t);
  4214. return $1;
  4215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4216. }, function($ctx1) {$ctx1.fill(self,"millisecondsToRun:",{aBlock:aBlock,t:t},$globals.Date.klass)});
  4217. //>>excludeEnd("ctx");
  4218. },
  4219. //>>excludeStart("ide", pragmas.excludeIdeData);
  4220. args: ["aBlock"],
  4221. source: "millisecondsToRun: aBlock\x0a\x09| t |\x0a\x09t := Date now.\x0a\x09aBlock value.\x0a\x09^ Date now - t",
  4222. referencedClasses: ["Date"],
  4223. //>>excludeEnd("ide");
  4224. messageSends: ["now", "value", "-"]
  4225. }),
  4226. $globals.Date.klass);
  4227. $core.addMethod(
  4228. $core.method({
  4229. selector: "new:",
  4230. protocol: 'instance creation',
  4231. fn: function (anObject){
  4232. var self=this;
  4233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4234. return $core.withContext(function($ctx1) {
  4235. //>>excludeEnd("ctx");
  4236. return new Date(anObject);
  4237. return self;
  4238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4239. }, function($ctx1) {$ctx1.fill(self,"new:",{anObject:anObject},$globals.Date.klass)});
  4240. //>>excludeEnd("ctx");
  4241. },
  4242. //>>excludeStart("ide", pragmas.excludeIdeData);
  4243. args: ["anObject"],
  4244. source: "new: anObject\x0a\x09<return new Date(anObject)>",
  4245. referencedClasses: [],
  4246. //>>excludeEnd("ide");
  4247. messageSends: []
  4248. }),
  4249. $globals.Date.klass);
  4250. $core.addMethod(
  4251. $core.method({
  4252. selector: "now",
  4253. protocol: 'instance creation',
  4254. fn: function (){
  4255. var self=this;
  4256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4257. return $core.withContext(function($ctx1) {
  4258. //>>excludeEnd("ctx");
  4259. var $1;
  4260. $1=self._today();
  4261. return $1;
  4262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4263. }, function($ctx1) {$ctx1.fill(self,"now",{},$globals.Date.klass)});
  4264. //>>excludeEnd("ctx");
  4265. },
  4266. //>>excludeStart("ide", pragmas.excludeIdeData);
  4267. args: [],
  4268. source: "now\x0a\x09^ self today",
  4269. referencedClasses: [],
  4270. //>>excludeEnd("ide");
  4271. messageSends: ["today"]
  4272. }),
  4273. $globals.Date.klass);
  4274. $core.addMethod(
  4275. $core.method({
  4276. selector: "today",
  4277. protocol: 'instance creation',
  4278. fn: function (){
  4279. var self=this;
  4280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4281. return $core.withContext(function($ctx1) {
  4282. //>>excludeEnd("ctx");
  4283. var $1;
  4284. $1=self._new();
  4285. return $1;
  4286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4287. }, function($ctx1) {$ctx1.fill(self,"today",{},$globals.Date.klass)});
  4288. //>>excludeEnd("ctx");
  4289. },
  4290. //>>excludeStart("ide", pragmas.excludeIdeData);
  4291. args: [],
  4292. source: "today\x0a\x09^ self new",
  4293. referencedClasses: [],
  4294. //>>excludeEnd("ide");
  4295. messageSends: ["new"]
  4296. }),
  4297. $globals.Date.klass);
  4298. $core.addClass('Number', $globals.Object, [], 'Kernel-Objects');
  4299. //>>excludeStart("ide", pragmas.excludeIdeData);
  4300. $globals.Number.comment="I am the Amber representation for all numbers.\x0aI am directly mapped to JavaScript Number.\x0a\x0a## API\x0a\x0aI provide all necessary methods for arithmetic operations, comparison, conversion and so on with numbers.\x0a\x0aMy instances can also be used to evaluate a block a fixed number of times:\x0a\x0a\x095 timesRepeat: [ Transcript show: 'This will be printed 5 times'; cr ].\x0a\x09\x0a\x091 to: 5 do: [ :aNumber| Transcript show: aNumber asString; cr ].\x0a\x09\x0a\x091 to: 10 by: 2 do: [ :aNumber| Transcript show: aNumber asString; cr ].";
  4301. //>>excludeEnd("ide");
  4302. $core.addMethod(
  4303. $core.method({
  4304. selector: "&",
  4305. protocol: 'converting',
  4306. fn: function (aNumber){
  4307. var self=this;
  4308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4309. return $core.withContext(function($ctx1) {
  4310. //>>excludeEnd("ctx");
  4311. return self & aNumber;
  4312. return self;
  4313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4314. }, function($ctx1) {$ctx1.fill(self,"&",{aNumber:aNumber},$globals.Number)});
  4315. //>>excludeEnd("ctx");
  4316. },
  4317. //>>excludeStart("ide", pragmas.excludeIdeData);
  4318. args: ["aNumber"],
  4319. source: "& aNumber\x0a\x09<return self & aNumber>",
  4320. referencedClasses: [],
  4321. //>>excludeEnd("ide");
  4322. messageSends: []
  4323. }),
  4324. $globals.Number);
  4325. $core.addMethod(
  4326. $core.method({
  4327. selector: "*",
  4328. protocol: 'arithmetic',
  4329. fn: function (aNumber){
  4330. var self=this;
  4331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4332. return $core.withContext(function($ctx1) {
  4333. //>>excludeEnd("ctx");
  4334. return self * aNumber;
  4335. return self;
  4336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4337. }, function($ctx1) {$ctx1.fill(self,"*",{aNumber:aNumber},$globals.Number)});
  4338. //>>excludeEnd("ctx");
  4339. },
  4340. //>>excludeStart("ide", pragmas.excludeIdeData);
  4341. args: ["aNumber"],
  4342. source: "* aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self * aNumber>",
  4343. referencedClasses: [],
  4344. //>>excludeEnd("ide");
  4345. messageSends: []
  4346. }),
  4347. $globals.Number);
  4348. $core.addMethod(
  4349. $core.method({
  4350. selector: "**",
  4351. protocol: 'mathematical functions',
  4352. fn: function (exponent){
  4353. var self=this;
  4354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4355. return $core.withContext(function($ctx1) {
  4356. //>>excludeEnd("ctx");
  4357. var $1;
  4358. $1=self._raisedTo_(exponent);
  4359. return $1;
  4360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4361. }, function($ctx1) {$ctx1.fill(self,"**",{exponent:exponent},$globals.Number)});
  4362. //>>excludeEnd("ctx");
  4363. },
  4364. //>>excludeStart("ide", pragmas.excludeIdeData);
  4365. args: ["exponent"],
  4366. source: "** exponent\x0a\x09^ self raisedTo: exponent",
  4367. referencedClasses: [],
  4368. //>>excludeEnd("ide");
  4369. messageSends: ["raisedTo:"]
  4370. }),
  4371. $globals.Number);
  4372. $core.addMethod(
  4373. $core.method({
  4374. selector: "+",
  4375. protocol: 'arithmetic',
  4376. fn: function (aNumber){
  4377. var self=this;
  4378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4379. return $core.withContext(function($ctx1) {
  4380. //>>excludeEnd("ctx");
  4381. return self + aNumber;
  4382. return self;
  4383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4384. }, function($ctx1) {$ctx1.fill(self,"+",{aNumber:aNumber},$globals.Number)});
  4385. //>>excludeEnd("ctx");
  4386. },
  4387. //>>excludeStart("ide", pragmas.excludeIdeData);
  4388. args: ["aNumber"],
  4389. source: "+ aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self + aNumber>",
  4390. referencedClasses: [],
  4391. //>>excludeEnd("ide");
  4392. messageSends: []
  4393. }),
  4394. $globals.Number);
  4395. $core.addMethod(
  4396. $core.method({
  4397. selector: "-",
  4398. protocol: 'arithmetic',
  4399. fn: function (aNumber){
  4400. var self=this;
  4401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4402. return $core.withContext(function($ctx1) {
  4403. //>>excludeEnd("ctx");
  4404. return self - aNumber;
  4405. return self;
  4406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4407. }, function($ctx1) {$ctx1.fill(self,"-",{aNumber:aNumber},$globals.Number)});
  4408. //>>excludeEnd("ctx");
  4409. },
  4410. //>>excludeStart("ide", pragmas.excludeIdeData);
  4411. args: ["aNumber"],
  4412. source: "- aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self - aNumber>",
  4413. referencedClasses: [],
  4414. //>>excludeEnd("ide");
  4415. messageSends: []
  4416. }),
  4417. $globals.Number);
  4418. $core.addMethod(
  4419. $core.method({
  4420. selector: "/",
  4421. protocol: 'arithmetic',
  4422. fn: function (aNumber){
  4423. var self=this;
  4424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4425. return $core.withContext(function($ctx1) {
  4426. //>>excludeEnd("ctx");
  4427. return self / aNumber;
  4428. return self;
  4429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4430. }, function($ctx1) {$ctx1.fill(self,"/",{aNumber:aNumber},$globals.Number)});
  4431. //>>excludeEnd("ctx");
  4432. },
  4433. //>>excludeStart("ide", pragmas.excludeIdeData);
  4434. args: ["aNumber"],
  4435. source: "/ aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self / aNumber>",
  4436. referencedClasses: [],
  4437. //>>excludeEnd("ide");
  4438. messageSends: []
  4439. }),
  4440. $globals.Number);
  4441. $core.addMethod(
  4442. $core.method({
  4443. selector: "//",
  4444. protocol: 'arithmetic',
  4445. fn: function (aNumber){
  4446. var self=this;
  4447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4448. return $core.withContext(function($ctx1) {
  4449. //>>excludeEnd("ctx");
  4450. var $1;
  4451. $1=$recv(self.__slash(aNumber))._floor();
  4452. return $1;
  4453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4454. }, function($ctx1) {$ctx1.fill(self,"//",{aNumber:aNumber},$globals.Number)});
  4455. //>>excludeEnd("ctx");
  4456. },
  4457. //>>excludeStart("ide", pragmas.excludeIdeData);
  4458. args: ["aNumber"],
  4459. source: "// aNumber\x0a\x09^ (self / aNumber) floor",
  4460. referencedClasses: [],
  4461. //>>excludeEnd("ide");
  4462. messageSends: ["floor", "/"]
  4463. }),
  4464. $globals.Number);
  4465. $core.addMethod(
  4466. $core.method({
  4467. selector: "<",
  4468. protocol: 'comparing',
  4469. fn: function (aNumber){
  4470. var self=this;
  4471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4472. return $core.withContext(function($ctx1) {
  4473. //>>excludeEnd("ctx");
  4474. return self < aNumber;
  4475. return self;
  4476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4477. }, function($ctx1) {$ctx1.fill(self,"<",{aNumber:aNumber},$globals.Number)});
  4478. //>>excludeEnd("ctx");
  4479. },
  4480. //>>excludeStart("ide", pragmas.excludeIdeData);
  4481. args: ["aNumber"],
  4482. source: "< aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self < aNumber>",
  4483. referencedClasses: [],
  4484. //>>excludeEnd("ide");
  4485. messageSends: []
  4486. }),
  4487. $globals.Number);
  4488. $core.addMethod(
  4489. $core.method({
  4490. selector: "<=",
  4491. protocol: 'comparing',
  4492. fn: function (aNumber){
  4493. var self=this;
  4494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4495. return $core.withContext(function($ctx1) {
  4496. //>>excludeEnd("ctx");
  4497. return self <= aNumber;
  4498. return self;
  4499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4500. }, function($ctx1) {$ctx1.fill(self,"<=",{aNumber:aNumber},$globals.Number)});
  4501. //>>excludeEnd("ctx");
  4502. },
  4503. //>>excludeStart("ide", pragmas.excludeIdeData);
  4504. args: ["aNumber"],
  4505. source: "<= aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self <= aNumber>",
  4506. referencedClasses: [],
  4507. //>>excludeEnd("ide");
  4508. messageSends: []
  4509. }),
  4510. $globals.Number);
  4511. $core.addMethod(
  4512. $core.method({
  4513. selector: "=",
  4514. protocol: 'comparing',
  4515. fn: function (aNumber){
  4516. var self=this;
  4517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4518. return $core.withContext(function($ctx1) {
  4519. //>>excludeEnd("ctx");
  4520. return aNumber != null &&
  4521. typeof aNumber._isNumber === "function" &&
  4522. aNumber._isNumber() &&
  4523. Number(self) == aNumber
  4524. ;
  4525. return self;
  4526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4527. }, function($ctx1) {$ctx1.fill(self,"=",{aNumber:aNumber},$globals.Number)});
  4528. //>>excludeEnd("ctx");
  4529. },
  4530. //>>excludeStart("ide", pragmas.excludeIdeData);
  4531. args: ["aNumber"],
  4532. source: "= aNumber\x0a\x09<\x0a\x09\x09return aNumber != null &&\x0a\x09\x09\x09typeof aNumber._isNumber === \x22function\x22 &&\x0a\x09\x09\x09aNumber._isNumber() &&\x0a\x09\x09\x09Number(self) == aNumber\x0a\x09>",
  4533. referencedClasses: [],
  4534. //>>excludeEnd("ide");
  4535. messageSends: []
  4536. }),
  4537. $globals.Number);
  4538. $core.addMethod(
  4539. $core.method({
  4540. selector: ">",
  4541. protocol: 'comparing',
  4542. fn: function (aNumber){
  4543. var self=this;
  4544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4545. return $core.withContext(function($ctx1) {
  4546. //>>excludeEnd("ctx");
  4547. return self > aNumber;
  4548. return self;
  4549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4550. }, function($ctx1) {$ctx1.fill(self,">",{aNumber:aNumber},$globals.Number)});
  4551. //>>excludeEnd("ctx");
  4552. },
  4553. //>>excludeStart("ide", pragmas.excludeIdeData);
  4554. args: ["aNumber"],
  4555. source: "> aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self >> aNumber>",
  4556. referencedClasses: [],
  4557. //>>excludeEnd("ide");
  4558. messageSends: []
  4559. }),
  4560. $globals.Number);
  4561. $core.addMethod(
  4562. $core.method({
  4563. selector: ">=",
  4564. protocol: 'comparing',
  4565. fn: function (aNumber){
  4566. var self=this;
  4567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4568. return $core.withContext(function($ctx1) {
  4569. //>>excludeEnd("ctx");
  4570. return self >= aNumber;
  4571. return self;
  4572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4573. }, function($ctx1) {$ctx1.fill(self,">=",{aNumber:aNumber},$globals.Number)});
  4574. //>>excludeEnd("ctx");
  4575. },
  4576. //>>excludeStart("ide", pragmas.excludeIdeData);
  4577. args: ["aNumber"],
  4578. source: ">= aNumber\x0a\x09\x22Inlined in the Compiler\x22\x0a\x09<return self >>= aNumber>",
  4579. referencedClasses: [],
  4580. //>>excludeEnd("ide");
  4581. messageSends: []
  4582. }),
  4583. $globals.Number);
  4584. $core.addMethod(
  4585. $core.method({
  4586. selector: "@",
  4587. protocol: 'converting',
  4588. fn: function (aNumber){
  4589. var self=this;
  4590. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  4591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4592. return $core.withContext(function($ctx1) {
  4593. //>>excludeEnd("ctx");
  4594. var $1;
  4595. $1=$recv($Point())._x_y_(self,aNumber);
  4596. return $1;
  4597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4598. }, function($ctx1) {$ctx1.fill(self,"@",{aNumber:aNumber},$globals.Number)});
  4599. //>>excludeEnd("ctx");
  4600. },
  4601. //>>excludeStart("ide", pragmas.excludeIdeData);
  4602. args: ["aNumber"],
  4603. source: "@ aNumber\x0a\x09^ Point x: self y: aNumber",
  4604. referencedClasses: ["Point"],
  4605. //>>excludeEnd("ide");
  4606. messageSends: ["x:y:"]
  4607. }),
  4608. $globals.Number);
  4609. $core.addMethod(
  4610. $core.method({
  4611. selector: "\x5c\x5c",
  4612. protocol: 'arithmetic',
  4613. fn: function (aNumber){
  4614. var self=this;
  4615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4616. return $core.withContext(function($ctx1) {
  4617. //>>excludeEnd("ctx");
  4618. return self % aNumber;
  4619. return self;
  4620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4621. }, function($ctx1) {$ctx1.fill(self,"\x5c\x5c",{aNumber:aNumber},$globals.Number)});
  4622. //>>excludeEnd("ctx");
  4623. },
  4624. //>>excludeStart("ide", pragmas.excludeIdeData);
  4625. args: ["aNumber"],
  4626. source: "\x5c\x5c aNumber\x0a\x09<return self % aNumber>",
  4627. referencedClasses: [],
  4628. //>>excludeEnd("ide");
  4629. messageSends: []
  4630. }),
  4631. $globals.Number);
  4632. $core.addMethod(
  4633. $core.method({
  4634. selector: "abs",
  4635. protocol: 'arithmetic',
  4636. fn: function (){
  4637. var self=this;
  4638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4639. return $core.withContext(function($ctx1) {
  4640. //>>excludeEnd("ctx");
  4641. return Math.abs(self);;
  4642. return self;
  4643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4644. }, function($ctx1) {$ctx1.fill(self,"abs",{},$globals.Number)});
  4645. //>>excludeEnd("ctx");
  4646. },
  4647. //>>excludeStart("ide", pragmas.excludeIdeData);
  4648. args: [],
  4649. source: "abs\x0a\x09<return Math.abs(self);>",
  4650. referencedClasses: [],
  4651. //>>excludeEnd("ide");
  4652. messageSends: []
  4653. }),
  4654. $globals.Number);
  4655. $core.addMethod(
  4656. $core.method({
  4657. selector: "arcCos",
  4658. protocol: 'mathematical functions',
  4659. fn: function (){
  4660. var self=this;
  4661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4662. return $core.withContext(function($ctx1) {
  4663. //>>excludeEnd("ctx");
  4664. return Math.acos(self);;
  4665. return self;
  4666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4667. }, function($ctx1) {$ctx1.fill(self,"arcCos",{},$globals.Number)});
  4668. //>>excludeEnd("ctx");
  4669. },
  4670. //>>excludeStart("ide", pragmas.excludeIdeData);
  4671. args: [],
  4672. source: "arcCos\x0a\x09<return Math.acos(self);>",
  4673. referencedClasses: [],
  4674. //>>excludeEnd("ide");
  4675. messageSends: []
  4676. }),
  4677. $globals.Number);
  4678. $core.addMethod(
  4679. $core.method({
  4680. selector: "arcSin",
  4681. protocol: 'mathematical functions',
  4682. fn: function (){
  4683. var self=this;
  4684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4685. return $core.withContext(function($ctx1) {
  4686. //>>excludeEnd("ctx");
  4687. return Math.asin(self);;
  4688. return self;
  4689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4690. }, function($ctx1) {$ctx1.fill(self,"arcSin",{},$globals.Number)});
  4691. //>>excludeEnd("ctx");
  4692. },
  4693. //>>excludeStart("ide", pragmas.excludeIdeData);
  4694. args: [],
  4695. source: "arcSin\x0a\x09<return Math.asin(self);>",
  4696. referencedClasses: [],
  4697. //>>excludeEnd("ide");
  4698. messageSends: []
  4699. }),
  4700. $globals.Number);
  4701. $core.addMethod(
  4702. $core.method({
  4703. selector: "arcTan",
  4704. protocol: 'mathematical functions',
  4705. fn: function (){
  4706. var self=this;
  4707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4708. return $core.withContext(function($ctx1) {
  4709. //>>excludeEnd("ctx");
  4710. return Math.atan(self);;
  4711. return self;
  4712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4713. }, function($ctx1) {$ctx1.fill(self,"arcTan",{},$globals.Number)});
  4714. //>>excludeEnd("ctx");
  4715. },
  4716. //>>excludeStart("ide", pragmas.excludeIdeData);
  4717. args: [],
  4718. source: "arcTan\x0a\x09<return Math.atan(self);>",
  4719. referencedClasses: [],
  4720. //>>excludeEnd("ide");
  4721. messageSends: []
  4722. }),
  4723. $globals.Number);
  4724. $core.addMethod(
  4725. $core.method({
  4726. selector: "asJSON",
  4727. protocol: 'converting',
  4728. fn: function (){
  4729. var self=this;
  4730. return self;
  4731. },
  4732. //>>excludeStart("ide", pragmas.excludeIdeData);
  4733. args: [],
  4734. source: "asJSON\x0a\x09^ self",
  4735. referencedClasses: [],
  4736. //>>excludeEnd("ide");
  4737. messageSends: []
  4738. }),
  4739. $globals.Number);
  4740. $core.addMethod(
  4741. $core.method({
  4742. selector: "asJavascript",
  4743. protocol: 'converting',
  4744. fn: function (){
  4745. var self=this;
  4746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4747. return $core.withContext(function($ctx1) {
  4748. //>>excludeEnd("ctx");
  4749. var $1;
  4750. $1=$recv("(".__comma(self._printString())).__comma(")");
  4751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4752. $ctx1.sendIdx[","]=1;
  4753. //>>excludeEnd("ctx");
  4754. return $1;
  4755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4756. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Number)});
  4757. //>>excludeEnd("ctx");
  4758. },
  4759. //>>excludeStart("ide", pragmas.excludeIdeData);
  4760. args: [],
  4761. source: "asJavascript\x0a\x09^ '(', self printString, ')'",
  4762. referencedClasses: [],
  4763. //>>excludeEnd("ide");
  4764. messageSends: [",", "printString"]
  4765. }),
  4766. $globals.Number);
  4767. $core.addMethod(
  4768. $core.method({
  4769. selector: "asNumber",
  4770. protocol: 'converting',
  4771. fn: function (){
  4772. var self=this;
  4773. return self;
  4774. },
  4775. //>>excludeStart("ide", pragmas.excludeIdeData);
  4776. args: [],
  4777. source: "asNumber\x0a\x09^ self",
  4778. referencedClasses: [],
  4779. //>>excludeEnd("ide");
  4780. messageSends: []
  4781. }),
  4782. $globals.Number);
  4783. $core.addMethod(
  4784. $core.method({
  4785. selector: "asPoint",
  4786. protocol: 'converting',
  4787. fn: function (){
  4788. var self=this;
  4789. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  4790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4791. return $core.withContext(function($ctx1) {
  4792. //>>excludeEnd("ctx");
  4793. var $1;
  4794. $1=$recv($Point())._x_y_(self,self);
  4795. return $1;
  4796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4797. }, function($ctx1) {$ctx1.fill(self,"asPoint",{},$globals.Number)});
  4798. //>>excludeEnd("ctx");
  4799. },
  4800. //>>excludeStart("ide", pragmas.excludeIdeData);
  4801. args: [],
  4802. source: "asPoint\x0a\x09^ Point x: self y: self",
  4803. referencedClasses: ["Point"],
  4804. //>>excludeEnd("ide");
  4805. messageSends: ["x:y:"]
  4806. }),
  4807. $globals.Number);
  4808. $core.addMethod(
  4809. $core.method({
  4810. selector: "asString",
  4811. protocol: 'converting',
  4812. fn: function (){
  4813. var self=this;
  4814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4815. return $core.withContext(function($ctx1) {
  4816. //>>excludeEnd("ctx");
  4817. return String(self) ;
  4818. return self;
  4819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4820. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.Number)});
  4821. //>>excludeEnd("ctx");
  4822. },
  4823. //>>excludeStart("ide", pragmas.excludeIdeData);
  4824. args: [],
  4825. source: "asString\x0a\x09< return String(self) >",
  4826. referencedClasses: [],
  4827. //>>excludeEnd("ide");
  4828. messageSends: []
  4829. }),
  4830. $globals.Number);
  4831. $core.addMethod(
  4832. $core.method({
  4833. selector: "atRandom",
  4834. protocol: 'converting',
  4835. fn: function (){
  4836. var self=this;
  4837. function $Random(){return $globals.Random||(typeof Random=="undefined"?nil:Random)}
  4838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4839. return $core.withContext(function($ctx1) {
  4840. //>>excludeEnd("ctx");
  4841. var $1;
  4842. $1=$recv($recv($recv($recv($recv($Random())._new())._next()).__star(self))._truncated()).__plus((1));
  4843. return $1;
  4844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4845. }, function($ctx1) {$ctx1.fill(self,"atRandom",{},$globals.Number)});
  4846. //>>excludeEnd("ctx");
  4847. },
  4848. //>>excludeStart("ide", pragmas.excludeIdeData);
  4849. args: [],
  4850. source: "atRandom\x0a\x09^ (Random new next * self) truncated + 1",
  4851. referencedClasses: ["Random"],
  4852. //>>excludeEnd("ide");
  4853. messageSends: ["+", "truncated", "*", "next", "new"]
  4854. }),
  4855. $globals.Number);
  4856. $core.addMethod(
  4857. $core.method({
  4858. selector: "ceiling",
  4859. protocol: 'converting',
  4860. fn: function (){
  4861. var self=this;
  4862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4863. return $core.withContext(function($ctx1) {
  4864. //>>excludeEnd("ctx");
  4865. return Math.ceil(self);;
  4866. return self;
  4867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4868. }, function($ctx1) {$ctx1.fill(self,"ceiling",{},$globals.Number)});
  4869. //>>excludeEnd("ctx");
  4870. },
  4871. //>>excludeStart("ide", pragmas.excludeIdeData);
  4872. args: [],
  4873. source: "ceiling\x0a\x09<return Math.ceil(self);>",
  4874. referencedClasses: [],
  4875. //>>excludeEnd("ide");
  4876. messageSends: []
  4877. }),
  4878. $globals.Number);
  4879. $core.addMethod(
  4880. $core.method({
  4881. selector: "copy",
  4882. protocol: 'copying',
  4883. fn: function (){
  4884. var self=this;
  4885. return self;
  4886. },
  4887. //>>excludeStart("ide", pragmas.excludeIdeData);
  4888. args: [],
  4889. source: "copy\x0a\x09^ self",
  4890. referencedClasses: [],
  4891. //>>excludeEnd("ide");
  4892. messageSends: []
  4893. }),
  4894. $globals.Number);
  4895. $core.addMethod(
  4896. $core.method({
  4897. selector: "cos",
  4898. protocol: 'mathematical functions',
  4899. fn: function (){
  4900. var self=this;
  4901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4902. return $core.withContext(function($ctx1) {
  4903. //>>excludeEnd("ctx");
  4904. return Math.cos(self);;
  4905. return self;
  4906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4907. }, function($ctx1) {$ctx1.fill(self,"cos",{},$globals.Number)});
  4908. //>>excludeEnd("ctx");
  4909. },
  4910. //>>excludeStart("ide", pragmas.excludeIdeData);
  4911. args: [],
  4912. source: "cos\x0a\x09<return Math.cos(self);>",
  4913. referencedClasses: [],
  4914. //>>excludeEnd("ide");
  4915. messageSends: []
  4916. }),
  4917. $globals.Number);
  4918. $core.addMethod(
  4919. $core.method({
  4920. selector: "deepCopy",
  4921. protocol: 'copying',
  4922. fn: function (){
  4923. var self=this;
  4924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4925. return $core.withContext(function($ctx1) {
  4926. //>>excludeEnd("ctx");
  4927. var $1;
  4928. $1=self._copy();
  4929. return $1;
  4930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4931. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.Number)});
  4932. //>>excludeEnd("ctx");
  4933. },
  4934. //>>excludeStart("ide", pragmas.excludeIdeData);
  4935. args: [],
  4936. source: "deepCopy\x0a\x09^ self copy",
  4937. referencedClasses: [],
  4938. //>>excludeEnd("ide");
  4939. messageSends: ["copy"]
  4940. }),
  4941. $globals.Number);
  4942. $core.addMethod(
  4943. $core.method({
  4944. selector: "even",
  4945. protocol: 'testing',
  4946. fn: function (){
  4947. var self=this;
  4948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4949. return $core.withContext(function($ctx1) {
  4950. //>>excludeEnd("ctx");
  4951. var $1;
  4952. $1=(0).__eq(self.__backslash_backslash((2)));
  4953. return $1;
  4954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4955. }, function($ctx1) {$ctx1.fill(self,"even",{},$globals.Number)});
  4956. //>>excludeEnd("ctx");
  4957. },
  4958. //>>excludeStart("ide", pragmas.excludeIdeData);
  4959. args: [],
  4960. source: "even\x0a\x09^ 0 = (self \x5c\x5c 2)",
  4961. referencedClasses: [],
  4962. //>>excludeEnd("ide");
  4963. messageSends: ["=", "\x5c\x5c"]
  4964. }),
  4965. $globals.Number);
  4966. $core.addMethod(
  4967. $core.method({
  4968. selector: "floor",
  4969. protocol: 'converting',
  4970. fn: function (){
  4971. var self=this;
  4972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4973. return $core.withContext(function($ctx1) {
  4974. //>>excludeEnd("ctx");
  4975. return Math.floor(self);;
  4976. return self;
  4977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4978. }, function($ctx1) {$ctx1.fill(self,"floor",{},$globals.Number)});
  4979. //>>excludeEnd("ctx");
  4980. },
  4981. //>>excludeStart("ide", pragmas.excludeIdeData);
  4982. args: [],
  4983. source: "floor\x0a\x09<return Math.floor(self);>",
  4984. referencedClasses: [],
  4985. //>>excludeEnd("ide");
  4986. messageSends: []
  4987. }),
  4988. $globals.Number);
  4989. $core.addMethod(
  4990. $core.method({
  4991. selector: "identityHash",
  4992. protocol: 'accessing',
  4993. fn: function (){
  4994. var self=this;
  4995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  4996. return $core.withContext(function($ctx1) {
  4997. //>>excludeEnd("ctx");
  4998. var $1;
  4999. $1=$recv(self._asString()).__comma("n");
  5000. return $1;
  5001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5002. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.Number)});
  5003. //>>excludeEnd("ctx");
  5004. },
  5005. //>>excludeStart("ide", pragmas.excludeIdeData);
  5006. args: [],
  5007. source: "identityHash\x0a\x09^ self asString, 'n'",
  5008. referencedClasses: [],
  5009. //>>excludeEnd("ide");
  5010. messageSends: [",", "asString"]
  5011. }),
  5012. $globals.Number);
  5013. $core.addMethod(
  5014. $core.method({
  5015. selector: "isImmutable",
  5016. protocol: 'testing',
  5017. fn: function (){
  5018. var self=this;
  5019. return true;
  5020. },
  5021. //>>excludeStart("ide", pragmas.excludeIdeData);
  5022. args: [],
  5023. source: "isImmutable\x0a\x09^ true",
  5024. referencedClasses: [],
  5025. //>>excludeEnd("ide");
  5026. messageSends: []
  5027. }),
  5028. $globals.Number);
  5029. $core.addMethod(
  5030. $core.method({
  5031. selector: "isNumber",
  5032. protocol: 'testing',
  5033. fn: function (){
  5034. var self=this;
  5035. return true;
  5036. },
  5037. //>>excludeStart("ide", pragmas.excludeIdeData);
  5038. args: [],
  5039. source: "isNumber\x0a\x09^ true",
  5040. referencedClasses: [],
  5041. //>>excludeEnd("ide");
  5042. messageSends: []
  5043. }),
  5044. $globals.Number);
  5045. $core.addMethod(
  5046. $core.method({
  5047. selector: "isZero",
  5048. protocol: 'testing',
  5049. fn: function (){
  5050. var self=this;
  5051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5052. return $core.withContext(function($ctx1) {
  5053. //>>excludeEnd("ctx");
  5054. var $1;
  5055. $1=self.__eq((0));
  5056. return $1;
  5057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5058. }, function($ctx1) {$ctx1.fill(self,"isZero",{},$globals.Number)});
  5059. //>>excludeEnd("ctx");
  5060. },
  5061. //>>excludeStart("ide", pragmas.excludeIdeData);
  5062. args: [],
  5063. source: "isZero\x0a\x09^ self = 0",
  5064. referencedClasses: [],
  5065. //>>excludeEnd("ide");
  5066. messageSends: ["="]
  5067. }),
  5068. $globals.Number);
  5069. $core.addMethod(
  5070. $core.method({
  5071. selector: "ln",
  5072. protocol: 'mathematical functions',
  5073. fn: function (){
  5074. var self=this;
  5075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5076. return $core.withContext(function($ctx1) {
  5077. //>>excludeEnd("ctx");
  5078. return Math.log(self);;
  5079. return self;
  5080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5081. }, function($ctx1) {$ctx1.fill(self,"ln",{},$globals.Number)});
  5082. //>>excludeEnd("ctx");
  5083. },
  5084. //>>excludeStart("ide", pragmas.excludeIdeData);
  5085. args: [],
  5086. source: "ln\x0a\x09<return Math.log(self);>",
  5087. referencedClasses: [],
  5088. //>>excludeEnd("ide");
  5089. messageSends: []
  5090. }),
  5091. $globals.Number);
  5092. $core.addMethod(
  5093. $core.method({
  5094. selector: "log",
  5095. protocol: 'mathematical functions',
  5096. fn: function (){
  5097. var self=this;
  5098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5099. return $core.withContext(function($ctx1) {
  5100. //>>excludeEnd("ctx");
  5101. return Math.log(self) / Math.LN10;;
  5102. return self;
  5103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5104. }, function($ctx1) {$ctx1.fill(self,"log",{},$globals.Number)});
  5105. //>>excludeEnd("ctx");
  5106. },
  5107. //>>excludeStart("ide", pragmas.excludeIdeData);
  5108. args: [],
  5109. source: "log\x0a\x09<return Math.log(self) / Math.LN10;>",
  5110. referencedClasses: [],
  5111. //>>excludeEnd("ide");
  5112. messageSends: []
  5113. }),
  5114. $globals.Number);
  5115. $core.addMethod(
  5116. $core.method({
  5117. selector: "log:",
  5118. protocol: 'mathematical functions',
  5119. fn: function (aNumber){
  5120. var self=this;
  5121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5122. return $core.withContext(function($ctx1) {
  5123. //>>excludeEnd("ctx");
  5124. return Math.log(self) / Math.log(aNumber);;
  5125. return self;
  5126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5127. }, function($ctx1) {$ctx1.fill(self,"log:",{aNumber:aNumber},$globals.Number)});
  5128. //>>excludeEnd("ctx");
  5129. },
  5130. //>>excludeStart("ide", pragmas.excludeIdeData);
  5131. args: ["aNumber"],
  5132. source: "log: aNumber\x0a\x09<return Math.log(self) / Math.log(aNumber);>",
  5133. referencedClasses: [],
  5134. //>>excludeEnd("ide");
  5135. messageSends: []
  5136. }),
  5137. $globals.Number);
  5138. $core.addMethod(
  5139. $core.method({
  5140. selector: "max:",
  5141. protocol: 'arithmetic',
  5142. fn: function (aNumber){
  5143. var self=this;
  5144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5145. return $core.withContext(function($ctx1) {
  5146. //>>excludeEnd("ctx");
  5147. return Math.max(self, aNumber);;
  5148. return self;
  5149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5150. }, function($ctx1) {$ctx1.fill(self,"max:",{aNumber:aNumber},$globals.Number)});
  5151. //>>excludeEnd("ctx");
  5152. },
  5153. //>>excludeStart("ide", pragmas.excludeIdeData);
  5154. args: ["aNumber"],
  5155. source: "max: aNumber\x0a\x09<return Math.max(self, aNumber);>",
  5156. referencedClasses: [],
  5157. //>>excludeEnd("ide");
  5158. messageSends: []
  5159. }),
  5160. $globals.Number);
  5161. $core.addMethod(
  5162. $core.method({
  5163. selector: "min:",
  5164. protocol: 'arithmetic',
  5165. fn: function (aNumber){
  5166. var self=this;
  5167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5168. return $core.withContext(function($ctx1) {
  5169. //>>excludeEnd("ctx");
  5170. return Math.min(self, aNumber);;
  5171. return self;
  5172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5173. }, function($ctx1) {$ctx1.fill(self,"min:",{aNumber:aNumber},$globals.Number)});
  5174. //>>excludeEnd("ctx");
  5175. },
  5176. //>>excludeStart("ide", pragmas.excludeIdeData);
  5177. args: ["aNumber"],
  5178. source: "min: aNumber\x0a\x09<return Math.min(self, aNumber);>",
  5179. referencedClasses: [],
  5180. //>>excludeEnd("ide");
  5181. messageSends: []
  5182. }),
  5183. $globals.Number);
  5184. $core.addMethod(
  5185. $core.method({
  5186. selector: "negated",
  5187. protocol: 'arithmetic',
  5188. fn: function (){
  5189. var self=this;
  5190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5191. return $core.withContext(function($ctx1) {
  5192. //>>excludeEnd("ctx");
  5193. var $1;
  5194. $1=(0).__minus(self);
  5195. return $1;
  5196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5197. }, function($ctx1) {$ctx1.fill(self,"negated",{},$globals.Number)});
  5198. //>>excludeEnd("ctx");
  5199. },
  5200. //>>excludeStart("ide", pragmas.excludeIdeData);
  5201. args: [],
  5202. source: "negated\x0a\x09^ 0 - self",
  5203. referencedClasses: [],
  5204. //>>excludeEnd("ide");
  5205. messageSends: ["-"]
  5206. }),
  5207. $globals.Number);
  5208. $core.addMethod(
  5209. $core.method({
  5210. selector: "negative",
  5211. protocol: 'testing',
  5212. fn: function (){
  5213. var self=this;
  5214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5215. return $core.withContext(function($ctx1) {
  5216. //>>excludeEnd("ctx");
  5217. var $1;
  5218. $1=self.__lt((0));
  5219. return $1;
  5220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5221. }, function($ctx1) {$ctx1.fill(self,"negative",{},$globals.Number)});
  5222. //>>excludeEnd("ctx");
  5223. },
  5224. //>>excludeStart("ide", pragmas.excludeIdeData);
  5225. args: [],
  5226. source: "negative\x0a\x09\x22Answer whether the receiver is mathematically negative.\x22\x0a\x0a\x09^ self < 0",
  5227. referencedClasses: [],
  5228. //>>excludeEnd("ide");
  5229. messageSends: ["<"]
  5230. }),
  5231. $globals.Number);
  5232. $core.addMethod(
  5233. $core.method({
  5234. selector: "odd",
  5235. protocol: 'testing',
  5236. fn: function (){
  5237. var self=this;
  5238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5239. return $core.withContext(function($ctx1) {
  5240. //>>excludeEnd("ctx");
  5241. var $1;
  5242. $1=$recv(self._even())._not();
  5243. return $1;
  5244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5245. }, function($ctx1) {$ctx1.fill(self,"odd",{},$globals.Number)});
  5246. //>>excludeEnd("ctx");
  5247. },
  5248. //>>excludeStart("ide", pragmas.excludeIdeData);
  5249. args: [],
  5250. source: "odd\x0a\x09^ self even not",
  5251. referencedClasses: [],
  5252. //>>excludeEnd("ide");
  5253. messageSends: ["not", "even"]
  5254. }),
  5255. $globals.Number);
  5256. $core.addMethod(
  5257. $core.method({
  5258. selector: "positive",
  5259. protocol: 'testing',
  5260. fn: function (){
  5261. var self=this;
  5262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5263. return $core.withContext(function($ctx1) {
  5264. //>>excludeEnd("ctx");
  5265. var $1;
  5266. $1=self.__gt_eq((0));
  5267. return $1;
  5268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5269. }, function($ctx1) {$ctx1.fill(self,"positive",{},$globals.Number)});
  5270. //>>excludeEnd("ctx");
  5271. },
  5272. //>>excludeStart("ide", pragmas.excludeIdeData);
  5273. args: [],
  5274. source: "positive\x0a\x09\x22Answer whether the receiver is positive or equal to 0. (ST-80 protocol).\x22\x0a\x0a\x09^ self >= 0",
  5275. referencedClasses: [],
  5276. //>>excludeEnd("ide");
  5277. messageSends: [">="]
  5278. }),
  5279. $globals.Number);
  5280. $core.addMethod(
  5281. $core.method({
  5282. selector: "printOn:",
  5283. protocol: 'printing',
  5284. fn: function (aStream){
  5285. var self=this;
  5286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5287. return $core.withContext(function($ctx1) {
  5288. //>>excludeEnd("ctx");
  5289. $recv(aStream)._nextPutAll_(self._asString());
  5290. return self;
  5291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5292. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Number)});
  5293. //>>excludeEnd("ctx");
  5294. },
  5295. //>>excludeStart("ide", pragmas.excludeIdeData);
  5296. args: ["aStream"],
  5297. source: "printOn: aStream\x0a\x09aStream nextPutAll: self asString",
  5298. referencedClasses: [],
  5299. //>>excludeEnd("ide");
  5300. messageSends: ["nextPutAll:", "asString"]
  5301. }),
  5302. $globals.Number);
  5303. $core.addMethod(
  5304. $core.method({
  5305. selector: "printShowingDecimalPlaces:",
  5306. protocol: 'printing',
  5307. fn: function (placesDesired){
  5308. var self=this;
  5309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5310. return $core.withContext(function($ctx1) {
  5311. //>>excludeEnd("ctx");
  5312. return self.toFixed(placesDesired);
  5313. return self;
  5314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5315. }, function($ctx1) {$ctx1.fill(self,"printShowingDecimalPlaces:",{placesDesired:placesDesired},$globals.Number)});
  5316. //>>excludeEnd("ctx");
  5317. },
  5318. //>>excludeStart("ide", pragmas.excludeIdeData);
  5319. args: ["placesDesired"],
  5320. source: "printShowingDecimalPlaces: placesDesired\x0a\x09<return self.toFixed(placesDesired)>",
  5321. referencedClasses: [],
  5322. //>>excludeEnd("ide");
  5323. messageSends: []
  5324. }),
  5325. $globals.Number);
  5326. $core.addMethod(
  5327. $core.method({
  5328. selector: "raisedTo:",
  5329. protocol: 'mathematical functions',
  5330. fn: function (exponent){
  5331. var self=this;
  5332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5333. return $core.withContext(function($ctx1) {
  5334. //>>excludeEnd("ctx");
  5335. return Math.pow(self, exponent);;
  5336. return self;
  5337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5338. }, function($ctx1) {$ctx1.fill(self,"raisedTo:",{exponent:exponent},$globals.Number)});
  5339. //>>excludeEnd("ctx");
  5340. },
  5341. //>>excludeStart("ide", pragmas.excludeIdeData);
  5342. args: ["exponent"],
  5343. source: "raisedTo: exponent\x0a\x09<return Math.pow(self, exponent);>",
  5344. referencedClasses: [],
  5345. //>>excludeEnd("ide");
  5346. messageSends: []
  5347. }),
  5348. $globals.Number);
  5349. $core.addMethod(
  5350. $core.method({
  5351. selector: "rounded",
  5352. protocol: 'converting',
  5353. fn: function (){
  5354. var self=this;
  5355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5356. return $core.withContext(function($ctx1) {
  5357. //>>excludeEnd("ctx");
  5358. return Math.round(self);;
  5359. return self;
  5360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5361. }, function($ctx1) {$ctx1.fill(self,"rounded",{},$globals.Number)});
  5362. //>>excludeEnd("ctx");
  5363. },
  5364. //>>excludeStart("ide", pragmas.excludeIdeData);
  5365. args: [],
  5366. source: "rounded\x0a\x09<return Math.round(self);>",
  5367. referencedClasses: [],
  5368. //>>excludeEnd("ide");
  5369. messageSends: []
  5370. }),
  5371. $globals.Number);
  5372. $core.addMethod(
  5373. $core.method({
  5374. selector: "sign",
  5375. protocol: 'mathematical functions',
  5376. fn: function (){
  5377. var self=this;
  5378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5379. return $core.withContext(function($ctx1) {
  5380. //>>excludeEnd("ctx");
  5381. var $1,$2;
  5382. $1=self._isZero();
  5383. if($core.assert($1)){
  5384. return (0);
  5385. };
  5386. $2=self._positive();
  5387. if($core.assert($2)){
  5388. return (1);
  5389. } else {
  5390. return (-1);
  5391. };
  5392. return self;
  5393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5394. }, function($ctx1) {$ctx1.fill(self,"sign",{},$globals.Number)});
  5395. //>>excludeEnd("ctx");
  5396. },
  5397. //>>excludeStart("ide", pragmas.excludeIdeData);
  5398. args: [],
  5399. source: "sign\x0a\x09self isZero \x0a\x09\x09ifTrue: [ ^ 0 ].\x0a\x09self positive\x0a\x09\x09ifTrue: [ ^ 1 ]\x0a\x09\x09ifFalse: [ ^ -1 ].",
  5400. referencedClasses: [],
  5401. //>>excludeEnd("ide");
  5402. messageSends: ["ifTrue:", "isZero", "ifTrue:ifFalse:", "positive"]
  5403. }),
  5404. $globals.Number);
  5405. $core.addMethod(
  5406. $core.method({
  5407. selector: "sin",
  5408. protocol: 'mathematical functions',
  5409. fn: function (){
  5410. var self=this;
  5411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5412. return $core.withContext(function($ctx1) {
  5413. //>>excludeEnd("ctx");
  5414. return Math.sin(self);;
  5415. return self;
  5416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5417. }, function($ctx1) {$ctx1.fill(self,"sin",{},$globals.Number)});
  5418. //>>excludeEnd("ctx");
  5419. },
  5420. //>>excludeStart("ide", pragmas.excludeIdeData);
  5421. args: [],
  5422. source: "sin\x0a\x09<return Math.sin(self);>",
  5423. referencedClasses: [],
  5424. //>>excludeEnd("ide");
  5425. messageSends: []
  5426. }),
  5427. $globals.Number);
  5428. $core.addMethod(
  5429. $core.method({
  5430. selector: "sqrt",
  5431. protocol: 'mathematical functions',
  5432. fn: function (){
  5433. var self=this;
  5434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5435. return $core.withContext(function($ctx1) {
  5436. //>>excludeEnd("ctx");
  5437. return Math.sqrt(self);
  5438. return self;
  5439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5440. }, function($ctx1) {$ctx1.fill(self,"sqrt",{},$globals.Number)});
  5441. //>>excludeEnd("ctx");
  5442. },
  5443. //>>excludeStart("ide", pragmas.excludeIdeData);
  5444. args: [],
  5445. source: "sqrt\x0a\x09<return Math.sqrt(self)>",
  5446. referencedClasses: [],
  5447. //>>excludeEnd("ide");
  5448. messageSends: []
  5449. }),
  5450. $globals.Number);
  5451. $core.addMethod(
  5452. $core.method({
  5453. selector: "squared",
  5454. protocol: 'mathematical functions',
  5455. fn: function (){
  5456. var self=this;
  5457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5458. return $core.withContext(function($ctx1) {
  5459. //>>excludeEnd("ctx");
  5460. var $1;
  5461. $1=self.__star(self);
  5462. return $1;
  5463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5464. }, function($ctx1) {$ctx1.fill(self,"squared",{},$globals.Number)});
  5465. //>>excludeEnd("ctx");
  5466. },
  5467. //>>excludeStart("ide", pragmas.excludeIdeData);
  5468. args: [],
  5469. source: "squared\x0a\x09^ self * self",
  5470. referencedClasses: [],
  5471. //>>excludeEnd("ide");
  5472. messageSends: ["*"]
  5473. }),
  5474. $globals.Number);
  5475. $core.addMethod(
  5476. $core.method({
  5477. selector: "tan",
  5478. protocol: 'mathematical functions',
  5479. fn: function (){
  5480. var self=this;
  5481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5482. return $core.withContext(function($ctx1) {
  5483. //>>excludeEnd("ctx");
  5484. return Math.tan(self);;
  5485. return self;
  5486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5487. }, function($ctx1) {$ctx1.fill(self,"tan",{},$globals.Number)});
  5488. //>>excludeEnd("ctx");
  5489. },
  5490. //>>excludeStart("ide", pragmas.excludeIdeData);
  5491. args: [],
  5492. source: "tan\x0a\x09<return Math.tan(self);>",
  5493. referencedClasses: [],
  5494. //>>excludeEnd("ide");
  5495. messageSends: []
  5496. }),
  5497. $globals.Number);
  5498. $core.addMethod(
  5499. $core.method({
  5500. selector: "timesRepeat:",
  5501. protocol: 'enumerating',
  5502. fn: function (aBlock){
  5503. var self=this;
  5504. var count;
  5505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5506. return $core.withContext(function($ctx1) {
  5507. //>>excludeEnd("ctx");
  5508. count=(1);
  5509. $recv((function(){
  5510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5511. return $core.withContext(function($ctx2) {
  5512. //>>excludeEnd("ctx");
  5513. return $recv(count).__gt(self);
  5514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5515. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5516. //>>excludeEnd("ctx");
  5517. }))._whileFalse_((function(){
  5518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5519. return $core.withContext(function($ctx2) {
  5520. //>>excludeEnd("ctx");
  5521. $recv(aBlock)._value();
  5522. count=$recv(count).__plus((1));
  5523. return count;
  5524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5525. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  5526. //>>excludeEnd("ctx");
  5527. }));
  5528. return self;
  5529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5530. }, function($ctx1) {$ctx1.fill(self,"timesRepeat:",{aBlock:aBlock,count:count},$globals.Number)});
  5531. //>>excludeEnd("ctx");
  5532. },
  5533. //>>excludeStart("ide", pragmas.excludeIdeData);
  5534. args: ["aBlock"],
  5535. source: "timesRepeat: aBlock\x0a\x09| count |\x0a\x09count := 1.\x0a\x09[ count > self ] whileFalse: [\x0a\x09\x09aBlock value.\x0a\x09\x09count := count + 1 ]",
  5536. referencedClasses: [],
  5537. //>>excludeEnd("ide");
  5538. messageSends: ["whileFalse:", ">", "value", "+"]
  5539. }),
  5540. $globals.Number);
  5541. $core.addMethod(
  5542. $core.method({
  5543. selector: "to:",
  5544. protocol: 'converting',
  5545. fn: function (aNumber){
  5546. var self=this;
  5547. var array,first,last,count;
  5548. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  5549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5550. return $core.withContext(function($ctx1) {
  5551. //>>excludeEnd("ctx");
  5552. var $1;
  5553. first=self._truncated();
  5554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5555. $ctx1.sendIdx["truncated"]=1;
  5556. //>>excludeEnd("ctx");
  5557. last=$recv($recv(aNumber)._truncated()).__plus((1));
  5558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5559. $ctx1.sendIdx["+"]=1;
  5560. //>>excludeEnd("ctx");
  5561. count=(1);
  5562. array=$recv($Array())._new();
  5563. $recv($recv(last).__minus(first))._timesRepeat_((function(){
  5564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5565. return $core.withContext(function($ctx2) {
  5566. //>>excludeEnd("ctx");
  5567. $recv(array)._at_put_(count,first);
  5568. count=$recv(count).__plus((1));
  5569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5570. $ctx2.sendIdx["+"]=2;
  5571. //>>excludeEnd("ctx");
  5572. count;
  5573. first=$recv(first).__plus((1));
  5574. return first;
  5575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5576. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5577. //>>excludeEnd("ctx");
  5578. }));
  5579. $1=array;
  5580. return $1;
  5581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5582. }, function($ctx1) {$ctx1.fill(self,"to:",{aNumber:aNumber,array:array,first:first,last:last,count:count},$globals.Number)});
  5583. //>>excludeEnd("ctx");
  5584. },
  5585. //>>excludeStart("ide", pragmas.excludeIdeData);
  5586. args: ["aNumber"],
  5587. source: "to: aNumber\x0a\x09| array first last count |\x0a\x09first := self truncated.\x0a\x09last := aNumber truncated + 1.\x0a\x09count := 1.\x0a\x09array := Array new.\x0a\x09(last - first) timesRepeat: [\x0a\x09\x09array at: count put: first.\x0a\x09\x09count := count + 1.\x0a\x09\x09first := first + 1 ].\x0a\x09^ array",
  5588. referencedClasses: ["Array"],
  5589. //>>excludeEnd("ide");
  5590. messageSends: ["truncated", "+", "new", "timesRepeat:", "-", "at:put:"]
  5591. }),
  5592. $globals.Number);
  5593. $core.addMethod(
  5594. $core.method({
  5595. selector: "to:by:",
  5596. protocol: 'converting',
  5597. fn: function (stop,step){
  5598. var self=this;
  5599. var array,value,pos;
  5600. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  5601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5602. return $core.withContext(function($ctx1) {
  5603. //>>excludeEnd("ctx");
  5604. var $1,$2,$3;
  5605. value=self;
  5606. array=$recv($Array())._new();
  5607. pos=(1);
  5608. $1=$recv(step).__eq((0));
  5609. if($core.assert($1)){
  5610. self._error_("step must be non-zero");
  5611. };
  5612. $2=$recv(step).__lt((0));
  5613. if($core.assert($2)){
  5614. $recv((function(){
  5615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5616. return $core.withContext(function($ctx2) {
  5617. //>>excludeEnd("ctx");
  5618. return $recv(value).__gt_eq(stop);
  5619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5620. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  5621. //>>excludeEnd("ctx");
  5622. }))._whileTrue_((function(){
  5623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5624. return $core.withContext(function($ctx2) {
  5625. //>>excludeEnd("ctx");
  5626. $recv(array)._at_put_(pos,value);
  5627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5628. $ctx2.sendIdx["at:put:"]=1;
  5629. //>>excludeEnd("ctx");
  5630. pos=$recv(pos).__plus((1));
  5631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5632. $ctx2.sendIdx["+"]=1;
  5633. //>>excludeEnd("ctx");
  5634. pos;
  5635. value=$recv(value).__plus(step);
  5636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5637. $ctx2.sendIdx["+"]=2;
  5638. //>>excludeEnd("ctx");
  5639. return value;
  5640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5641. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  5642. //>>excludeEnd("ctx");
  5643. }));
  5644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5645. $ctx1.sendIdx["whileTrue:"]=1;
  5646. //>>excludeEnd("ctx");
  5647. } else {
  5648. $recv((function(){
  5649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5650. return $core.withContext(function($ctx2) {
  5651. //>>excludeEnd("ctx");
  5652. return $recv(value).__lt_eq(stop);
  5653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5654. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  5655. //>>excludeEnd("ctx");
  5656. }))._whileTrue_((function(){
  5657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5658. return $core.withContext(function($ctx2) {
  5659. //>>excludeEnd("ctx");
  5660. $recv(array)._at_put_(pos,value);
  5661. pos=$recv(pos).__plus((1));
  5662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5663. $ctx2.sendIdx["+"]=3;
  5664. //>>excludeEnd("ctx");
  5665. pos;
  5666. value=$recv(value).__plus(step);
  5667. return value;
  5668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5669. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  5670. //>>excludeEnd("ctx");
  5671. }));
  5672. };
  5673. $3=array;
  5674. return $3;
  5675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5676. }, function($ctx1) {$ctx1.fill(self,"to:by:",{stop:stop,step:step,array:array,value:value,pos:pos},$globals.Number)});
  5677. //>>excludeEnd("ctx");
  5678. },
  5679. //>>excludeStart("ide", pragmas.excludeIdeData);
  5680. args: ["stop", "step"],
  5681. source: "to: stop by: step\x0a\x09| array value pos |\x0a\x09value := self.\x0a\x09array := Array new.\x0a\x09pos := 1.\x0a\x09step = 0 ifTrue: [ self error: 'step must be non-zero' ].\x0a\x09step < 0\x0a\x09\x09ifTrue: [ [ value >= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09array at: pos put: value.\x0a\x09\x09\x09\x09\x09pos := pos + 1.\x0a\x09\x09\x09\x09\x09value := value + step ]]\x0a\x09\x09ifFalse: [ [ value <= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09array at: pos put: value.\x0a\x09\x09\x09\x09pos := pos + 1.\x0a\x09\x09\x09\x09\x09value := value + step ]].\x0a\x09^ array",
  5682. referencedClasses: ["Array"],
  5683. //>>excludeEnd("ide");
  5684. messageSends: ["new", "ifTrue:", "=", "error:", "ifTrue:ifFalse:", "<", "whileTrue:", ">=", "at:put:", "+", "<="]
  5685. }),
  5686. $globals.Number);
  5687. $core.addMethod(
  5688. $core.method({
  5689. selector: "to:by:do:",
  5690. protocol: 'enumerating',
  5691. fn: function (stop,step,aBlock){
  5692. var self=this;
  5693. var value;
  5694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5695. return $core.withContext(function($ctx1) {
  5696. //>>excludeEnd("ctx");
  5697. var $1,$2;
  5698. value=self;
  5699. $1=$recv(step).__eq((0));
  5700. if($core.assert($1)){
  5701. self._error_("step must be non-zero");
  5702. };
  5703. $2=$recv(step).__lt((0));
  5704. if($core.assert($2)){
  5705. $recv((function(){
  5706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5707. return $core.withContext(function($ctx2) {
  5708. //>>excludeEnd("ctx");
  5709. return $recv(value).__gt_eq(stop);
  5710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5711. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  5712. //>>excludeEnd("ctx");
  5713. }))._whileTrue_((function(){
  5714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5715. return $core.withContext(function($ctx2) {
  5716. //>>excludeEnd("ctx");
  5717. $recv(aBlock)._value_(value);
  5718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5719. $ctx2.sendIdx["value:"]=1;
  5720. //>>excludeEnd("ctx");
  5721. value=$recv(value).__plus(step);
  5722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5723. $ctx2.sendIdx["+"]=1;
  5724. //>>excludeEnd("ctx");
  5725. return value;
  5726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5727. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  5728. //>>excludeEnd("ctx");
  5729. }));
  5730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5731. $ctx1.sendIdx["whileTrue:"]=1;
  5732. //>>excludeEnd("ctx");
  5733. } else {
  5734. $recv((function(){
  5735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5736. return $core.withContext(function($ctx2) {
  5737. //>>excludeEnd("ctx");
  5738. return $recv(value).__lt_eq(stop);
  5739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5740. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  5741. //>>excludeEnd("ctx");
  5742. }))._whileTrue_((function(){
  5743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5744. return $core.withContext(function($ctx2) {
  5745. //>>excludeEnd("ctx");
  5746. $recv(aBlock)._value_(value);
  5747. value=$recv(value).__plus(step);
  5748. return value;
  5749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5750. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  5751. //>>excludeEnd("ctx");
  5752. }));
  5753. };
  5754. return self;
  5755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5756. }, function($ctx1) {$ctx1.fill(self,"to:by:do:",{stop:stop,step:step,aBlock:aBlock,value:value},$globals.Number)});
  5757. //>>excludeEnd("ctx");
  5758. },
  5759. //>>excludeStart("ide", pragmas.excludeIdeData);
  5760. args: ["stop", "step", "aBlock"],
  5761. source: "to: stop by: step do: aBlock\x0a\x09| value |\x0a\x09value := self.\x0a\x09step = 0 ifTrue: [ self error: 'step must be non-zero' ].\x0a\x09step < 0\x0a\x09\x09ifTrue: [ [ value >= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09aBlock value: value.\x0a\x09\x09\x09\x09\x09value := value + step ]]\x0a\x09\x09ifFalse: [ [ value <= stop ] whileTrue: [\x0a\x09\x09\x09\x09\x09aBlock value: value.\x0a\x09\x09\x09\x09\x09value := value + step ]]",
  5762. referencedClasses: [],
  5763. //>>excludeEnd("ide");
  5764. messageSends: ["ifTrue:", "=", "error:", "ifTrue:ifFalse:", "<", "whileTrue:", ">=", "value:", "+", "<="]
  5765. }),
  5766. $globals.Number);
  5767. $core.addMethod(
  5768. $core.method({
  5769. selector: "to:do:",
  5770. protocol: 'enumerating',
  5771. fn: function (stop,aBlock){
  5772. var self=this;
  5773. var nextValue;
  5774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5775. return $core.withContext(function($ctx1) {
  5776. //>>excludeEnd("ctx");
  5777. nextValue=self;
  5778. $recv((function(){
  5779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5780. return $core.withContext(function($ctx2) {
  5781. //>>excludeEnd("ctx");
  5782. return $recv(nextValue).__lt_eq(stop);
  5783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5784. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  5785. //>>excludeEnd("ctx");
  5786. }))._whileTrue_((function(){
  5787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5788. return $core.withContext(function($ctx2) {
  5789. //>>excludeEnd("ctx");
  5790. $recv(aBlock)._value_(nextValue);
  5791. nextValue=$recv(nextValue).__plus((1));
  5792. return nextValue;
  5793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5794. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  5795. //>>excludeEnd("ctx");
  5796. }));
  5797. return self;
  5798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5799. }, function($ctx1) {$ctx1.fill(self,"to:do:",{stop:stop,aBlock:aBlock,nextValue:nextValue},$globals.Number)});
  5800. //>>excludeEnd("ctx");
  5801. },
  5802. //>>excludeStart("ide", pragmas.excludeIdeData);
  5803. args: ["stop", "aBlock"],
  5804. source: "to: stop do: aBlock\x0a\x09\x22Evaluate aBlock for each number from self to aNumber.\x22\x0a\x09| nextValue |\x0a\x09nextValue := self.\x0a\x09[ nextValue <= stop ]\x0a\x09\x09whileTrue:\x0a\x09\x09\x09[ aBlock value: nextValue.\x0a\x09\x09\x09nextValue := nextValue + 1 ]",
  5805. referencedClasses: [],
  5806. //>>excludeEnd("ide");
  5807. messageSends: ["whileTrue:", "<=", "value:", "+"]
  5808. }),
  5809. $globals.Number);
  5810. $core.addMethod(
  5811. $core.method({
  5812. selector: "truncated",
  5813. protocol: 'converting',
  5814. fn: function (){
  5815. var self=this;
  5816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5817. return $core.withContext(function($ctx1) {
  5818. //>>excludeEnd("ctx");
  5819. if(self >= 0) {
  5820. return Math.floor(self);
  5821. } else {
  5822. return Math.floor(self * (-1)) * (-1);
  5823. };
  5824. ;
  5825. return self;
  5826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5827. }, function($ctx1) {$ctx1.fill(self,"truncated",{},$globals.Number)});
  5828. //>>excludeEnd("ctx");
  5829. },
  5830. //>>excludeStart("ide", pragmas.excludeIdeData);
  5831. args: [],
  5832. source: "truncated\x0a\x09<\x0a\x09\x09if(self >>= 0) {\x0a\x09\x09\x09return Math.floor(self);\x0a\x09\x09} else {\x0a\x09\x09\x09return Math.floor(self * (-1)) * (-1);\x0a\x09\x09};\x0a\x09>",
  5833. referencedClasses: [],
  5834. //>>excludeEnd("ide");
  5835. messageSends: []
  5836. }),
  5837. $globals.Number);
  5838. $core.addMethod(
  5839. $core.method({
  5840. selector: "|",
  5841. protocol: 'converting',
  5842. fn: function (aNumber){
  5843. var self=this;
  5844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5845. return $core.withContext(function($ctx1) {
  5846. //>>excludeEnd("ctx");
  5847. return self | aNumber;
  5848. return self;
  5849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5850. }, function($ctx1) {$ctx1.fill(self,"|",{aNumber:aNumber},$globals.Number)});
  5851. //>>excludeEnd("ctx");
  5852. },
  5853. //>>excludeStart("ide", pragmas.excludeIdeData);
  5854. args: ["aNumber"],
  5855. source: "| aNumber\x0a\x09<return self | aNumber>",
  5856. referencedClasses: [],
  5857. //>>excludeEnd("ide");
  5858. messageSends: []
  5859. }),
  5860. $globals.Number);
  5861. $core.addMethod(
  5862. $core.method({
  5863. selector: "e",
  5864. protocol: 'instance creation',
  5865. fn: function (){
  5866. var self=this;
  5867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5868. return $core.withContext(function($ctx1) {
  5869. //>>excludeEnd("ctx");
  5870. return Math.E;;
  5871. return self;
  5872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5873. }, function($ctx1) {$ctx1.fill(self,"e",{},$globals.Number.klass)});
  5874. //>>excludeEnd("ctx");
  5875. },
  5876. //>>excludeStart("ide", pragmas.excludeIdeData);
  5877. args: [],
  5878. source: "e\x0a\x09<return Math.E;>",
  5879. referencedClasses: [],
  5880. //>>excludeEnd("ide");
  5881. messageSends: []
  5882. }),
  5883. $globals.Number.klass);
  5884. $core.addMethod(
  5885. $core.method({
  5886. selector: "heliosClass",
  5887. protocol: 'helios',
  5888. fn: function (){
  5889. var self=this;
  5890. return "magnitude";
  5891. },
  5892. //>>excludeStart("ide", pragmas.excludeIdeData);
  5893. args: [],
  5894. source: "heliosClass\x0a\x09^ 'magnitude'",
  5895. referencedClasses: [],
  5896. //>>excludeEnd("ide");
  5897. messageSends: []
  5898. }),
  5899. $globals.Number.klass);
  5900. $core.addMethod(
  5901. $core.method({
  5902. selector: "pi",
  5903. protocol: 'instance creation',
  5904. fn: function (){
  5905. var self=this;
  5906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5907. return $core.withContext(function($ctx1) {
  5908. //>>excludeEnd("ctx");
  5909. return Math.PI;
  5910. return self;
  5911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5912. }, function($ctx1) {$ctx1.fill(self,"pi",{},$globals.Number.klass)});
  5913. //>>excludeEnd("ctx");
  5914. },
  5915. //>>excludeStart("ide", pragmas.excludeIdeData);
  5916. args: [],
  5917. source: "pi\x0a\x09<return Math.PI>",
  5918. referencedClasses: [],
  5919. //>>excludeEnd("ide");
  5920. messageSends: []
  5921. }),
  5922. $globals.Number.klass);
  5923. $core.addClass('Point', $globals.Object, ['x', 'y'], 'Kernel-Objects');
  5924. //>>excludeStart("ide", pragmas.excludeIdeData);
  5925. $globals.Point.comment="I represent an x-y pair of numbers usually designating a geometric coordinate.\x0a\x0a## API\x0a\x0aInstances are traditionally created using the binary `#@` message to a number:\x0a\x0a\x09100@120\x0a\x0aPoints can then be arithmetically manipulated:\x0a\x0a\x09100@100 + (10@10)\x0a\x0a...or for example:\x0a\x0a\x09(100@100) * 2\x0a\x0a**NOTE:** Creating a point with a negative y-value will need a space after `@` in order to avoid a parsing error:\x0a\x0a\x09100@ -100 \x22but 100@-100 would not parse\x22";
  5926. //>>excludeEnd("ide");
  5927. $core.addMethod(
  5928. $core.method({
  5929. selector: "*",
  5930. protocol: 'arithmetic',
  5931. fn: function (aPoint){
  5932. var self=this;
  5933. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  5934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5935. return $core.withContext(function($ctx1) {
  5936. //>>excludeEnd("ctx");
  5937. var $3,$5,$4,$2,$7,$6,$1;
  5938. $3=self._x();
  5939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5940. $ctx1.sendIdx["x"]=1;
  5941. //>>excludeEnd("ctx");
  5942. $5=$recv(aPoint)._asPoint();
  5943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5944. $ctx1.sendIdx["asPoint"]=1;
  5945. //>>excludeEnd("ctx");
  5946. $4=$recv($5)._x();
  5947. $2=$recv($3).__star($4);
  5948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5949. $ctx1.sendIdx["*"]=1;
  5950. //>>excludeEnd("ctx");
  5951. $7=self._y();
  5952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5953. $ctx1.sendIdx["y"]=1;
  5954. //>>excludeEnd("ctx");
  5955. $6=$recv($7).__star($recv($recv(aPoint)._asPoint())._y());
  5956. $1=$recv($Point())._x_y_($2,$6);
  5957. return $1;
  5958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5959. }, function($ctx1) {$ctx1.fill(self,"*",{aPoint:aPoint},$globals.Point)});
  5960. //>>excludeEnd("ctx");
  5961. },
  5962. //>>excludeStart("ide", pragmas.excludeIdeData);
  5963. args: ["aPoint"],
  5964. source: "* aPoint\x0a\x09^ Point x: self x * aPoint asPoint x y: self y * aPoint asPoint y",
  5965. referencedClasses: ["Point"],
  5966. //>>excludeEnd("ide");
  5967. messageSends: ["x:y:", "*", "x", "asPoint", "y"]
  5968. }),
  5969. $globals.Point);
  5970. $core.addMethod(
  5971. $core.method({
  5972. selector: "+",
  5973. protocol: 'arithmetic',
  5974. fn: function (aPoint){
  5975. var self=this;
  5976. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  5977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5978. return $core.withContext(function($ctx1) {
  5979. //>>excludeEnd("ctx");
  5980. var $3,$5,$4,$2,$7,$6,$1;
  5981. $3=self._x();
  5982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5983. $ctx1.sendIdx["x"]=1;
  5984. //>>excludeEnd("ctx");
  5985. $5=$recv(aPoint)._asPoint();
  5986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5987. $ctx1.sendIdx["asPoint"]=1;
  5988. //>>excludeEnd("ctx");
  5989. $4=$recv($5)._x();
  5990. $2=$recv($3).__plus($4);
  5991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5992. $ctx1.sendIdx["+"]=1;
  5993. //>>excludeEnd("ctx");
  5994. $7=self._y();
  5995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  5996. $ctx1.sendIdx["y"]=1;
  5997. //>>excludeEnd("ctx");
  5998. $6=$recv($7).__plus($recv($recv(aPoint)._asPoint())._y());
  5999. $1=$recv($Point())._x_y_($2,$6);
  6000. return $1;
  6001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6002. }, function($ctx1) {$ctx1.fill(self,"+",{aPoint:aPoint},$globals.Point)});
  6003. //>>excludeEnd("ctx");
  6004. },
  6005. //>>excludeStart("ide", pragmas.excludeIdeData);
  6006. args: ["aPoint"],
  6007. source: "+ aPoint\x0a\x09^ Point x: self x + aPoint asPoint x y: self y + aPoint asPoint y",
  6008. referencedClasses: ["Point"],
  6009. //>>excludeEnd("ide");
  6010. messageSends: ["x:y:", "+", "x", "asPoint", "y"]
  6011. }),
  6012. $globals.Point);
  6013. $core.addMethod(
  6014. $core.method({
  6015. selector: "-",
  6016. protocol: 'arithmetic',
  6017. fn: function (aPoint){
  6018. var self=this;
  6019. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  6020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6021. return $core.withContext(function($ctx1) {
  6022. //>>excludeEnd("ctx");
  6023. var $3,$5,$4,$2,$7,$6,$1;
  6024. $3=self._x();
  6025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6026. $ctx1.sendIdx["x"]=1;
  6027. //>>excludeEnd("ctx");
  6028. $5=$recv(aPoint)._asPoint();
  6029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6030. $ctx1.sendIdx["asPoint"]=1;
  6031. //>>excludeEnd("ctx");
  6032. $4=$recv($5)._x();
  6033. $2=$recv($3).__minus($4);
  6034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6035. $ctx1.sendIdx["-"]=1;
  6036. //>>excludeEnd("ctx");
  6037. $7=self._y();
  6038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6039. $ctx1.sendIdx["y"]=1;
  6040. //>>excludeEnd("ctx");
  6041. $6=$recv($7).__minus($recv($recv(aPoint)._asPoint())._y());
  6042. $1=$recv($Point())._x_y_($2,$6);
  6043. return $1;
  6044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6045. }, function($ctx1) {$ctx1.fill(self,"-",{aPoint:aPoint},$globals.Point)});
  6046. //>>excludeEnd("ctx");
  6047. },
  6048. //>>excludeStart("ide", pragmas.excludeIdeData);
  6049. args: ["aPoint"],
  6050. source: "- aPoint\x0a\x09^ Point x: self x - aPoint asPoint x y: self y - aPoint asPoint y",
  6051. referencedClasses: ["Point"],
  6052. //>>excludeEnd("ide");
  6053. messageSends: ["x:y:", "-", "x", "asPoint", "y"]
  6054. }),
  6055. $globals.Point);
  6056. $core.addMethod(
  6057. $core.method({
  6058. selector: "/",
  6059. protocol: 'arithmetic',
  6060. fn: function (aPoint){
  6061. var self=this;
  6062. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  6063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6064. return $core.withContext(function($ctx1) {
  6065. //>>excludeEnd("ctx");
  6066. var $3,$5,$4,$2,$7,$6,$1;
  6067. $3=self._x();
  6068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6069. $ctx1.sendIdx["x"]=1;
  6070. //>>excludeEnd("ctx");
  6071. $5=$recv(aPoint)._asPoint();
  6072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6073. $ctx1.sendIdx["asPoint"]=1;
  6074. //>>excludeEnd("ctx");
  6075. $4=$recv($5)._x();
  6076. $2=$recv($3).__slash($4);
  6077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6078. $ctx1.sendIdx["/"]=1;
  6079. //>>excludeEnd("ctx");
  6080. $7=self._y();
  6081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6082. $ctx1.sendIdx["y"]=1;
  6083. //>>excludeEnd("ctx");
  6084. $6=$recv($7).__slash($recv($recv(aPoint)._asPoint())._y());
  6085. $1=$recv($Point())._x_y_($2,$6);
  6086. return $1;
  6087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6088. }, function($ctx1) {$ctx1.fill(self,"/",{aPoint:aPoint},$globals.Point)});
  6089. //>>excludeEnd("ctx");
  6090. },
  6091. //>>excludeStart("ide", pragmas.excludeIdeData);
  6092. args: ["aPoint"],
  6093. source: "/ aPoint\x0a\x09^ Point x: self x / aPoint asPoint x y: self y / aPoint asPoint y",
  6094. referencedClasses: ["Point"],
  6095. //>>excludeEnd("ide");
  6096. messageSends: ["x:y:", "/", "x", "asPoint", "y"]
  6097. }),
  6098. $globals.Point);
  6099. $core.addMethod(
  6100. $core.method({
  6101. selector: "<",
  6102. protocol: 'comparing',
  6103. fn: function (aPoint){
  6104. var self=this;
  6105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6106. return $core.withContext(function($ctx1) {
  6107. //>>excludeEnd("ctx");
  6108. var $3,$2,$4,$1;
  6109. $3=self._x();
  6110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6111. $ctx1.sendIdx["x"]=1;
  6112. //>>excludeEnd("ctx");
  6113. $2=$recv($3).__lt($recv(aPoint)._x());
  6114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6115. $ctx1.sendIdx["<"]=1;
  6116. //>>excludeEnd("ctx");
  6117. $1=$recv($2)._and_((function(){
  6118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6119. return $core.withContext(function($ctx2) {
  6120. //>>excludeEnd("ctx");
  6121. $4=self._y();
  6122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6123. $ctx2.sendIdx["y"]=1;
  6124. //>>excludeEnd("ctx");
  6125. return $recv($4).__lt($recv(aPoint)._y());
  6126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6127. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6128. //>>excludeEnd("ctx");
  6129. }));
  6130. return $1;
  6131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6132. }, function($ctx1) {$ctx1.fill(self,"<",{aPoint:aPoint},$globals.Point)});
  6133. //>>excludeEnd("ctx");
  6134. },
  6135. //>>excludeStart("ide", pragmas.excludeIdeData);
  6136. args: ["aPoint"],
  6137. source: "< aPoint\x0a\x09^ self x < aPoint x and: [\x0a\x09\x09self y < aPoint y ]",
  6138. referencedClasses: [],
  6139. //>>excludeEnd("ide");
  6140. messageSends: ["and:", "<", "x", "y"]
  6141. }),
  6142. $globals.Point);
  6143. $core.addMethod(
  6144. $core.method({
  6145. selector: "<=",
  6146. protocol: 'comparing',
  6147. fn: function (aPoint){
  6148. var self=this;
  6149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6150. return $core.withContext(function($ctx1) {
  6151. //>>excludeEnd("ctx");
  6152. var $3,$2,$4,$1;
  6153. $3=self._x();
  6154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6155. $ctx1.sendIdx["x"]=1;
  6156. //>>excludeEnd("ctx");
  6157. $2=$recv($3).__lt_eq($recv(aPoint)._x());
  6158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6159. $ctx1.sendIdx["<="]=1;
  6160. //>>excludeEnd("ctx");
  6161. $1=$recv($2)._and_((function(){
  6162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6163. return $core.withContext(function($ctx2) {
  6164. //>>excludeEnd("ctx");
  6165. $4=self._y();
  6166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6167. $ctx2.sendIdx["y"]=1;
  6168. //>>excludeEnd("ctx");
  6169. return $recv($4).__lt_eq($recv(aPoint)._y());
  6170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6171. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6172. //>>excludeEnd("ctx");
  6173. }));
  6174. return $1;
  6175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6176. }, function($ctx1) {$ctx1.fill(self,"<=",{aPoint:aPoint},$globals.Point)});
  6177. //>>excludeEnd("ctx");
  6178. },
  6179. //>>excludeStart("ide", pragmas.excludeIdeData);
  6180. args: ["aPoint"],
  6181. source: "<= aPoint\x0a\x09^ self x <= aPoint x and: [\x0a\x09\x09self y <= aPoint y ]",
  6182. referencedClasses: [],
  6183. //>>excludeEnd("ide");
  6184. messageSends: ["and:", "<=", "x", "y"]
  6185. }),
  6186. $globals.Point);
  6187. $core.addMethod(
  6188. $core.method({
  6189. selector: "=",
  6190. protocol: 'comparing',
  6191. fn: function (aPoint){
  6192. var self=this;
  6193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6194. return $core.withContext(function($ctx1) {
  6195. //>>excludeEnd("ctx");
  6196. var $3,$2,$5,$4,$7,$6,$1;
  6197. $3=$recv(aPoint)._class();
  6198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6199. $ctx1.sendIdx["class"]=1;
  6200. //>>excludeEnd("ctx");
  6201. $2=$recv($3).__eq(self._class());
  6202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6203. $ctx1.sendIdx["="]=1;
  6204. //>>excludeEnd("ctx");
  6205. $1=$recv($2)._and_((function(){
  6206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6207. return $core.withContext(function($ctx2) {
  6208. //>>excludeEnd("ctx");
  6209. $5=$recv(aPoint)._x();
  6210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6211. $ctx2.sendIdx["x"]=1;
  6212. //>>excludeEnd("ctx");
  6213. $4=$recv($5).__eq(self._x());
  6214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6215. $ctx2.sendIdx["="]=2;
  6216. //>>excludeEnd("ctx");
  6217. $7=$recv(aPoint)._y();
  6218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6219. $ctx2.sendIdx["y"]=1;
  6220. //>>excludeEnd("ctx");
  6221. $6=$recv($7).__eq(self._y());
  6222. return $recv($4).__and($6);
  6223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6224. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6225. //>>excludeEnd("ctx");
  6226. }));
  6227. return $1;
  6228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6229. }, function($ctx1) {$ctx1.fill(self,"=",{aPoint:aPoint},$globals.Point)});
  6230. //>>excludeEnd("ctx");
  6231. },
  6232. //>>excludeStart("ide", pragmas.excludeIdeData);
  6233. args: ["aPoint"],
  6234. source: "= aPoint\x0a\x09^ aPoint class = self class and: [\x0a\x09\x09(aPoint x = self x) & (aPoint y = self y) ]",
  6235. referencedClasses: [],
  6236. //>>excludeEnd("ide");
  6237. messageSends: ["and:", "=", "class", "&", "x", "y"]
  6238. }),
  6239. $globals.Point);
  6240. $core.addMethod(
  6241. $core.method({
  6242. selector: ">",
  6243. protocol: 'comparing',
  6244. fn: function (aPoint){
  6245. var self=this;
  6246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6247. return $core.withContext(function($ctx1) {
  6248. //>>excludeEnd("ctx");
  6249. var $3,$2,$4,$1;
  6250. $3=self._x();
  6251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6252. $ctx1.sendIdx["x"]=1;
  6253. //>>excludeEnd("ctx");
  6254. $2=$recv($3).__gt($recv(aPoint)._x());
  6255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6256. $ctx1.sendIdx[">"]=1;
  6257. //>>excludeEnd("ctx");
  6258. $1=$recv($2)._and_((function(){
  6259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6260. return $core.withContext(function($ctx2) {
  6261. //>>excludeEnd("ctx");
  6262. $4=self._y();
  6263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6264. $ctx2.sendIdx["y"]=1;
  6265. //>>excludeEnd("ctx");
  6266. return $recv($4).__gt($recv(aPoint)._y());
  6267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6268. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6269. //>>excludeEnd("ctx");
  6270. }));
  6271. return $1;
  6272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6273. }, function($ctx1) {$ctx1.fill(self,">",{aPoint:aPoint},$globals.Point)});
  6274. //>>excludeEnd("ctx");
  6275. },
  6276. //>>excludeStart("ide", pragmas.excludeIdeData);
  6277. args: ["aPoint"],
  6278. source: "> aPoint\x0a\x09^ self x > aPoint x and: [\x0a\x09\x09self y > aPoint y ]",
  6279. referencedClasses: [],
  6280. //>>excludeEnd("ide");
  6281. messageSends: ["and:", ">", "x", "y"]
  6282. }),
  6283. $globals.Point);
  6284. $core.addMethod(
  6285. $core.method({
  6286. selector: ">=",
  6287. protocol: 'comparing',
  6288. fn: function (aPoint){
  6289. var self=this;
  6290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6291. return $core.withContext(function($ctx1) {
  6292. //>>excludeEnd("ctx");
  6293. var $3,$2,$4,$1;
  6294. $3=self._x();
  6295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6296. $ctx1.sendIdx["x"]=1;
  6297. //>>excludeEnd("ctx");
  6298. $2=$recv($3).__gt_eq($recv(aPoint)._x());
  6299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6300. $ctx1.sendIdx[">="]=1;
  6301. //>>excludeEnd("ctx");
  6302. $1=$recv($2)._and_((function(){
  6303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6304. return $core.withContext(function($ctx2) {
  6305. //>>excludeEnd("ctx");
  6306. $4=self._y();
  6307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6308. $ctx2.sendIdx["y"]=1;
  6309. //>>excludeEnd("ctx");
  6310. return $recv($4).__gt_eq($recv(aPoint)._y());
  6311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6312. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6313. //>>excludeEnd("ctx");
  6314. }));
  6315. return $1;
  6316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6317. }, function($ctx1) {$ctx1.fill(self,">=",{aPoint:aPoint},$globals.Point)});
  6318. //>>excludeEnd("ctx");
  6319. },
  6320. //>>excludeStart("ide", pragmas.excludeIdeData);
  6321. args: ["aPoint"],
  6322. source: ">= aPoint\x0a\x09^ self x >= aPoint x and: [\x0a\x09\x09self y >= aPoint y ]",
  6323. referencedClasses: [],
  6324. //>>excludeEnd("ide");
  6325. messageSends: ["and:", ">=", "x", "y"]
  6326. }),
  6327. $globals.Point);
  6328. $core.addMethod(
  6329. $core.method({
  6330. selector: "asPoint",
  6331. protocol: 'converting',
  6332. fn: function (){
  6333. var self=this;
  6334. return self;
  6335. },
  6336. //>>excludeStart("ide", pragmas.excludeIdeData);
  6337. args: [],
  6338. source: "asPoint\x0a\x09^ self",
  6339. referencedClasses: [],
  6340. //>>excludeEnd("ide");
  6341. messageSends: []
  6342. }),
  6343. $globals.Point);
  6344. $core.addMethod(
  6345. $core.method({
  6346. selector: "dist:",
  6347. protocol: 'transforming',
  6348. fn: function (aPoint){
  6349. var self=this;
  6350. var dx,dy;
  6351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6352. return $core.withContext(function($ctx1) {
  6353. //>>excludeEnd("ctx");
  6354. var $3,$2,$1;
  6355. dx=$recv($recv(aPoint)._x()).__minus(self["@x"]);
  6356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6357. $ctx1.sendIdx["-"]=1;
  6358. //>>excludeEnd("ctx");
  6359. dy=$recv($recv(aPoint)._y()).__minus(self["@y"]);
  6360. $3=$recv(dx).__star(dx);
  6361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6362. $ctx1.sendIdx["*"]=1;
  6363. //>>excludeEnd("ctx");
  6364. $2=$recv($3).__plus($recv(dy).__star(dy));
  6365. $1=$recv($2)._sqrt();
  6366. return $1;
  6367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6368. }, function($ctx1) {$ctx1.fill(self,"dist:",{aPoint:aPoint,dx:dx,dy:dy},$globals.Point)});
  6369. //>>excludeEnd("ctx");
  6370. },
  6371. //>>excludeStart("ide", pragmas.excludeIdeData);
  6372. args: ["aPoint"],
  6373. source: "dist: aPoint \x0a\x09\x22Answer the distance between aPoint and the receiver.\x22\x0a\x09| dx dy |\x0a\x09dx := aPoint x - x.\x0a\x09dy := aPoint y - y.\x0a\x09^ (dx * dx + (dy * dy)) sqrt",
  6374. referencedClasses: [],
  6375. //>>excludeEnd("ide");
  6376. messageSends: ["-", "x", "y", "sqrt", "+", "*"]
  6377. }),
  6378. $globals.Point);
  6379. $core.addMethod(
  6380. $core.method({
  6381. selector: "printOn:",
  6382. protocol: 'printing',
  6383. fn: function (aStream){
  6384. var self=this;
  6385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6386. return $core.withContext(function($ctx1) {
  6387. //>>excludeEnd("ctx");
  6388. var $1;
  6389. $recv(self["@x"])._printOn_(aStream);
  6390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6391. $ctx1.sendIdx["printOn:"]=1;
  6392. //>>excludeEnd("ctx");
  6393. $recv(aStream)._nextPutAll_("@");
  6394. $1=$recv($recv(self["@y"])._notNil())._and_((function(){
  6395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6396. return $core.withContext(function($ctx2) {
  6397. //>>excludeEnd("ctx");
  6398. return $recv(self["@y"])._negative();
  6399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6400. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  6401. //>>excludeEnd("ctx");
  6402. }));
  6403. if($core.assert($1)){
  6404. $recv(aStream)._space();
  6405. };
  6406. $recv(self["@y"])._printOn_(aStream);
  6407. return self;
  6408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6409. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Point)});
  6410. //>>excludeEnd("ctx");
  6411. },
  6412. //>>excludeStart("ide", pragmas.excludeIdeData);
  6413. args: ["aStream"],
  6414. source: "printOn: aStream\x0a\x09\x22Print receiver in classic x@y notation.\x22\x0a\x0a\x09x printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: '@'.\x0a\x09(y notNil and: [ y negative ]) ifTrue: [\x0a\x09\x09\x09\x22Avoid ambiguous @- construct\x22\x0a\x09\x09\x09aStream space ].\x0a\x09\x0a\x09y printOn: aStream",
  6415. referencedClasses: [],
  6416. //>>excludeEnd("ide");
  6417. messageSends: ["printOn:", "nextPutAll:", "ifTrue:", "and:", "notNil", "negative", "space"]
  6418. }),
  6419. $globals.Point);
  6420. $core.addMethod(
  6421. $core.method({
  6422. selector: "translateBy:",
  6423. protocol: 'transforming',
  6424. fn: function (delta){
  6425. var self=this;
  6426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6427. return $core.withContext(function($ctx1) {
  6428. //>>excludeEnd("ctx");
  6429. var $2,$1;
  6430. $2=$recv($recv(delta)._x()).__plus(self["@x"]);
  6431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6432. $ctx1.sendIdx["+"]=1;
  6433. //>>excludeEnd("ctx");
  6434. $1=$recv($2).__at($recv($recv(delta)._y()).__plus(self["@y"]));
  6435. return $1;
  6436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6437. }, function($ctx1) {$ctx1.fill(self,"translateBy:",{delta:delta},$globals.Point)});
  6438. //>>excludeEnd("ctx");
  6439. },
  6440. //>>excludeStart("ide", pragmas.excludeIdeData);
  6441. args: ["delta"],
  6442. source: "translateBy: delta\x0a\x09\x22Answer a Point translated by delta (an instance of Point).\x22\x0a\x09^ (delta x + x) @ (delta y + y)",
  6443. referencedClasses: [],
  6444. //>>excludeEnd("ide");
  6445. messageSends: ["@", "+", "x", "y"]
  6446. }),
  6447. $globals.Point);
  6448. $core.addMethod(
  6449. $core.method({
  6450. selector: "x",
  6451. protocol: 'accessing',
  6452. fn: function (){
  6453. var self=this;
  6454. var $1;
  6455. $1=self["@x"];
  6456. return $1;
  6457. },
  6458. //>>excludeStart("ide", pragmas.excludeIdeData);
  6459. args: [],
  6460. source: "x\x0a\x09^ x",
  6461. referencedClasses: [],
  6462. //>>excludeEnd("ide");
  6463. messageSends: []
  6464. }),
  6465. $globals.Point);
  6466. $core.addMethod(
  6467. $core.method({
  6468. selector: "x:",
  6469. protocol: 'accessing',
  6470. fn: function (aNumber){
  6471. var self=this;
  6472. self["@x"]=aNumber;
  6473. return self;
  6474. },
  6475. //>>excludeStart("ide", pragmas.excludeIdeData);
  6476. args: ["aNumber"],
  6477. source: "x: aNumber\x0a\x09x := aNumber",
  6478. referencedClasses: [],
  6479. //>>excludeEnd("ide");
  6480. messageSends: []
  6481. }),
  6482. $globals.Point);
  6483. $core.addMethod(
  6484. $core.method({
  6485. selector: "y",
  6486. protocol: 'accessing',
  6487. fn: function (){
  6488. var self=this;
  6489. var $1;
  6490. $1=self["@y"];
  6491. return $1;
  6492. },
  6493. //>>excludeStart("ide", pragmas.excludeIdeData);
  6494. args: [],
  6495. source: "y\x0a\x09^ y",
  6496. referencedClasses: [],
  6497. //>>excludeEnd("ide");
  6498. messageSends: []
  6499. }),
  6500. $globals.Point);
  6501. $core.addMethod(
  6502. $core.method({
  6503. selector: "y:",
  6504. protocol: 'accessing',
  6505. fn: function (aNumber){
  6506. var self=this;
  6507. self["@y"]=aNumber;
  6508. return self;
  6509. },
  6510. //>>excludeStart("ide", pragmas.excludeIdeData);
  6511. args: ["aNumber"],
  6512. source: "y: aNumber\x0a\x09y := aNumber",
  6513. referencedClasses: [],
  6514. //>>excludeEnd("ide");
  6515. messageSends: []
  6516. }),
  6517. $globals.Point);
  6518. $core.addMethod(
  6519. $core.method({
  6520. selector: "heliosClass",
  6521. protocol: 'helios',
  6522. fn: function (){
  6523. var self=this;
  6524. return "magnitude";
  6525. },
  6526. //>>excludeStart("ide", pragmas.excludeIdeData);
  6527. args: [],
  6528. source: "heliosClass\x0a\x09^ 'magnitude'",
  6529. referencedClasses: [],
  6530. //>>excludeEnd("ide");
  6531. messageSends: []
  6532. }),
  6533. $globals.Point.klass);
  6534. $core.addMethod(
  6535. $core.method({
  6536. selector: "x:y:",
  6537. protocol: 'instance creation',
  6538. fn: function (aNumber,anotherNumber){
  6539. var self=this;
  6540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6541. return $core.withContext(function($ctx1) {
  6542. //>>excludeEnd("ctx");
  6543. var $2,$3,$1;
  6544. $2=self._new();
  6545. $recv($2)._x_(aNumber);
  6546. $recv($2)._y_(anotherNumber);
  6547. $3=$recv($2)._yourself();
  6548. $1=$3;
  6549. return $1;
  6550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6551. }, function($ctx1) {$ctx1.fill(self,"x:y:",{aNumber:aNumber,anotherNumber:anotherNumber},$globals.Point.klass)});
  6552. //>>excludeEnd("ctx");
  6553. },
  6554. //>>excludeStart("ide", pragmas.excludeIdeData);
  6555. args: ["aNumber", "anotherNumber"],
  6556. source: "x: aNumber y: anotherNumber\x0a\x09^ self new\x0a\x09\x09x: aNumber;\x0a\x09\x09y: anotherNumber;\x0a\x09\x09yourself",
  6557. referencedClasses: [],
  6558. //>>excludeEnd("ide");
  6559. messageSends: ["x:", "new", "y:", "yourself"]
  6560. }),
  6561. $globals.Point.klass);
  6562. $core.addClass('Random', $globals.Object, [], 'Kernel-Objects');
  6563. //>>excludeStart("ide", pragmas.excludeIdeData);
  6564. $globals.Random.comment="I an used to generate a random number and I am implemented as a trivial wrapper around javascript `Math.random()`.\x0a\x0a## API\x0a\x0aThe typical use case it to use the `#next` method like the following:\x0a\x0a\x09Random new next\x0a\x0aThis will return a float x where x < 1 and x > 0. If you want a random integer from 1 to 10 you can use `#atRandom`\x0a\x0a\x0910 atRandom\x0a\x0aA random number in a specific interval can be obtained with the following:\x0a\x0a\x09(3 to: 7) atRandom\x0a\x0aBe aware that `#to:` does not create an Interval as in other Smalltalk implementations but in fact an `Array` of numbers, so it's better to use:\x0a\x0a\x095 atRandom + 2\x0a\x0aSince `#atRandom` is implemented in `SequencableCollection` you can easy pick an element at random:\x0a\x0a\x09#('a' 'b' 'c') atRandom\x0a\x0aAs well as letter from a `String`:\x0a\x0a\x09'abc' atRandom\x0a\x0aSince Amber does not have Characters this will return a `String` of length 1 like for example `'b'`.";
  6565. //>>excludeEnd("ide");
  6566. $core.addMethod(
  6567. $core.method({
  6568. selector: "next",
  6569. protocol: 'accessing',
  6570. fn: function (){
  6571. var self=this;
  6572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6573. return $core.withContext(function($ctx1) {
  6574. //>>excludeEnd("ctx");
  6575. return Math.random();
  6576. return self;
  6577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6578. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Random)});
  6579. //>>excludeEnd("ctx");
  6580. },
  6581. //>>excludeStart("ide", pragmas.excludeIdeData);
  6582. args: [],
  6583. source: "next\x0a\x09<return Math.random()>",
  6584. referencedClasses: [],
  6585. //>>excludeEnd("ide");
  6586. messageSends: []
  6587. }),
  6588. $globals.Random);
  6589. $core.addMethod(
  6590. $core.method({
  6591. selector: "next:",
  6592. protocol: 'accessing',
  6593. fn: function (anInteger){
  6594. var self=this;
  6595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6596. return $core.withContext(function($ctx1) {
  6597. //>>excludeEnd("ctx");
  6598. var $1;
  6599. $1=$recv((1)._to_(anInteger))._collect_((function(each){
  6600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6601. return $core.withContext(function($ctx2) {
  6602. //>>excludeEnd("ctx");
  6603. return self._next();
  6604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6605. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  6606. //>>excludeEnd("ctx");
  6607. }));
  6608. return $1;
  6609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6610. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger},$globals.Random)});
  6611. //>>excludeEnd("ctx");
  6612. },
  6613. //>>excludeStart("ide", pragmas.excludeIdeData);
  6614. args: ["anInteger"],
  6615. source: "next: anInteger\x0a\x09^ (1 to: anInteger) collect: [ :each | self next ]",
  6616. referencedClasses: [],
  6617. //>>excludeEnd("ide");
  6618. messageSends: ["collect:", "to:", "next"]
  6619. }),
  6620. $globals.Random);
  6621. $core.addClass('UndefinedObject', $globals.Object, [], 'Kernel-Objects');
  6622. //>>excludeStart("ide", pragmas.excludeIdeData);
  6623. $globals.UndefinedObject.comment="I describe the behavior of my sole instance, `nil`. `nil` represents a prior value for variables that have not been initialized, or for results which are meaningless.\x0a\x0a`nil` is the Smalltalk equivalent of the `undefined` JavaScript object.\x0a\x0a__note:__ When sending messages to the `undefined` JavaScript object, it will be replaced by `nil`.";
  6624. //>>excludeEnd("ide");
  6625. $core.addMethod(
  6626. $core.method({
  6627. selector: "asJSON",
  6628. protocol: 'converting',
  6629. fn: function (){
  6630. var self=this;
  6631. var $1;
  6632. $1=null;
  6633. return $1;
  6634. },
  6635. //>>excludeStart("ide", pragmas.excludeIdeData);
  6636. args: [],
  6637. source: "asJSON\x0a\x09^ null",
  6638. referencedClasses: [],
  6639. //>>excludeEnd("ide");
  6640. messageSends: []
  6641. }),
  6642. $globals.UndefinedObject);
  6643. $core.addMethod(
  6644. $core.method({
  6645. selector: "deepCopy",
  6646. protocol: 'copying',
  6647. fn: function (){
  6648. var self=this;
  6649. return self;
  6650. },
  6651. //>>excludeStart("ide", pragmas.excludeIdeData);
  6652. args: [],
  6653. source: "deepCopy\x0a\x09^ self",
  6654. referencedClasses: [],
  6655. //>>excludeEnd("ide");
  6656. messageSends: []
  6657. }),
  6658. $globals.UndefinedObject);
  6659. $core.addMethod(
  6660. $core.method({
  6661. selector: "ifNil:",
  6662. protocol: 'testing',
  6663. fn: function (aBlock){
  6664. var self=this;
  6665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6666. return $core.withContext(function($ctx1) {
  6667. //>>excludeEnd("ctx");
  6668. var $1;
  6669. $1=self._ifNil_ifNotNil_(aBlock,(function(){
  6670. }));
  6671. return $1;
  6672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6673. }, function($ctx1) {$ctx1.fill(self,"ifNil:",{aBlock:aBlock},$globals.UndefinedObject)});
  6674. //>>excludeEnd("ctx");
  6675. },
  6676. //>>excludeStart("ide", pragmas.excludeIdeData);
  6677. args: ["aBlock"],
  6678. source: "ifNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self ifNil: aBlock ifNotNil: []",
  6679. referencedClasses: [],
  6680. //>>excludeEnd("ide");
  6681. messageSends: ["ifNil:ifNotNil:"]
  6682. }),
  6683. $globals.UndefinedObject);
  6684. $core.addMethod(
  6685. $core.method({
  6686. selector: "ifNil:ifNotNil:",
  6687. protocol: 'testing',
  6688. fn: function (aBlock,anotherBlock){
  6689. var self=this;
  6690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6691. return $core.withContext(function($ctx1) {
  6692. //>>excludeEnd("ctx");
  6693. var $1;
  6694. $1=$recv(aBlock)._value();
  6695. return $1;
  6696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6697. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.UndefinedObject)});
  6698. //>>excludeEnd("ctx");
  6699. },
  6700. //>>excludeStart("ide", pragmas.excludeIdeData);
  6701. args: ["aBlock", "anotherBlock"],
  6702. source: "ifNil: aBlock ifNotNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ aBlock value",
  6703. referencedClasses: [],
  6704. //>>excludeEnd("ide");
  6705. messageSends: ["value"]
  6706. }),
  6707. $globals.UndefinedObject);
  6708. $core.addMethod(
  6709. $core.method({
  6710. selector: "ifNotNil:",
  6711. protocol: 'testing',
  6712. fn: function (aBlock){
  6713. var self=this;
  6714. return self;
  6715. },
  6716. //>>excludeStart("ide", pragmas.excludeIdeData);
  6717. args: ["aBlock"],
  6718. source: "ifNotNil: aBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ self",
  6719. referencedClasses: [],
  6720. //>>excludeEnd("ide");
  6721. messageSends: []
  6722. }),
  6723. $globals.UndefinedObject);
  6724. $core.addMethod(
  6725. $core.method({
  6726. selector: "ifNotNil:ifNil:",
  6727. protocol: 'testing',
  6728. fn: function (aBlock,anotherBlock){
  6729. var self=this;
  6730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6731. return $core.withContext(function($ctx1) {
  6732. //>>excludeEnd("ctx");
  6733. var $1;
  6734. $1=$recv(anotherBlock)._value();
  6735. return $1;
  6736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6737. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.UndefinedObject)});
  6738. //>>excludeEnd("ctx");
  6739. },
  6740. //>>excludeStart("ide", pragmas.excludeIdeData);
  6741. args: ["aBlock", "anotherBlock"],
  6742. source: "ifNotNil: aBlock ifNil: anotherBlock\x0a\x09\x22inlined in the Compiler\x22\x0a\x09^ anotherBlock value",
  6743. referencedClasses: [],
  6744. //>>excludeEnd("ide");
  6745. messageSends: ["value"]
  6746. }),
  6747. $globals.UndefinedObject);
  6748. $core.addMethod(
  6749. $core.method({
  6750. selector: "isImmutable",
  6751. protocol: 'testing',
  6752. fn: function (){
  6753. var self=this;
  6754. return true;
  6755. },
  6756. //>>excludeStart("ide", pragmas.excludeIdeData);
  6757. args: [],
  6758. source: "isImmutable\x0a\x09^ true",
  6759. referencedClasses: [],
  6760. //>>excludeEnd("ide");
  6761. messageSends: []
  6762. }),
  6763. $globals.UndefinedObject);
  6764. $core.addMethod(
  6765. $core.method({
  6766. selector: "isNil",
  6767. protocol: 'testing',
  6768. fn: function (){
  6769. var self=this;
  6770. return true;
  6771. },
  6772. //>>excludeStart("ide", pragmas.excludeIdeData);
  6773. args: [],
  6774. source: "isNil\x0a\x09^ true",
  6775. referencedClasses: [],
  6776. //>>excludeEnd("ide");
  6777. messageSends: []
  6778. }),
  6779. $globals.UndefinedObject);
  6780. $core.addMethod(
  6781. $core.method({
  6782. selector: "notNil",
  6783. protocol: 'testing',
  6784. fn: function (){
  6785. var self=this;
  6786. return false;
  6787. },
  6788. //>>excludeStart("ide", pragmas.excludeIdeData);
  6789. args: [],
  6790. source: "notNil\x0a\x09^ false",
  6791. referencedClasses: [],
  6792. //>>excludeEnd("ide");
  6793. messageSends: []
  6794. }),
  6795. $globals.UndefinedObject);
  6796. $core.addMethod(
  6797. $core.method({
  6798. selector: "printOn:",
  6799. protocol: 'printing',
  6800. fn: function (aStream){
  6801. var self=this;
  6802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6803. return $core.withContext(function($ctx1) {
  6804. //>>excludeEnd("ctx");
  6805. $recv(aStream)._nextPutAll_("nil");
  6806. return self;
  6807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6808. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.UndefinedObject)});
  6809. //>>excludeEnd("ctx");
  6810. },
  6811. //>>excludeStart("ide", pragmas.excludeIdeData);
  6812. args: ["aStream"],
  6813. source: "printOn: aStream\x0a\x09aStream nextPutAll: 'nil'",
  6814. referencedClasses: [],
  6815. //>>excludeEnd("ide");
  6816. messageSends: ["nextPutAll:"]
  6817. }),
  6818. $globals.UndefinedObject);
  6819. $core.addMethod(
  6820. $core.method({
  6821. selector: "shallowCopy",
  6822. protocol: 'copying',
  6823. fn: function (){
  6824. var self=this;
  6825. return self;
  6826. },
  6827. //>>excludeStart("ide", pragmas.excludeIdeData);
  6828. args: [],
  6829. source: "shallowCopy\x0a\x09^ self",
  6830. referencedClasses: [],
  6831. //>>excludeEnd("ide");
  6832. messageSends: []
  6833. }),
  6834. $globals.UndefinedObject);
  6835. $core.addMethod(
  6836. $core.method({
  6837. selector: "subclass:instanceVariableNames:",
  6838. protocol: 'class creation',
  6839. fn: function (aString,anotherString){
  6840. var self=this;
  6841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6842. return $core.withContext(function($ctx1) {
  6843. //>>excludeEnd("ctx");
  6844. var $1;
  6845. $1=self._subclass_instanceVariableNames_package_(aString,anotherString,nil);
  6846. return $1;
  6847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6848. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:",{aString:aString,anotherString:anotherString},$globals.UndefinedObject)});
  6849. //>>excludeEnd("ctx");
  6850. },
  6851. //>>excludeStart("ide", pragmas.excludeIdeData);
  6852. args: ["aString", "anotherString"],
  6853. source: "subclass: aString instanceVariableNames: anotherString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: anotherString package: nil",
  6854. referencedClasses: [],
  6855. //>>excludeEnd("ide");
  6856. messageSends: ["subclass:instanceVariableNames:package:"]
  6857. }),
  6858. $globals.UndefinedObject);
  6859. $core.addMethod(
  6860. $core.method({
  6861. selector: "subclass:instanceVariableNames:category:",
  6862. protocol: 'class creation',
  6863. fn: function (aString,aString2,aString3){
  6864. var self=this;
  6865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6866. return $core.withContext(function($ctx1) {
  6867. //>>excludeEnd("ctx");
  6868. var $1;
  6869. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  6870. return $1;
  6871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6872. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:category:",{aString:aString,aString2:aString2,aString3:aString3},$globals.UndefinedObject)});
  6873. //>>excludeEnd("ctx");
  6874. },
  6875. //>>excludeStart("ide", pragmas.excludeIdeData);
  6876. args: ["aString", "aString2", "aString3"],
  6877. source: "subclass: aString instanceVariableNames: aString2 category: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  6878. referencedClasses: [],
  6879. //>>excludeEnd("ide");
  6880. messageSends: ["subclass:instanceVariableNames:package:"]
  6881. }),
  6882. $globals.UndefinedObject);
  6883. $core.addMethod(
  6884. $core.method({
  6885. selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",
  6886. protocol: 'class creation',
  6887. fn: function (aString,aString2,classVars,pools,aString3){
  6888. var self=this;
  6889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6890. return $core.withContext(function($ctx1) {
  6891. //>>excludeEnd("ctx");
  6892. var $1;
  6893. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  6894. return $1;
  6895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6896. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",{aString:aString,aString2:aString2,classVars:classVars,pools:pools,aString3:aString3},$globals.UndefinedObject)});
  6897. //>>excludeEnd("ctx");
  6898. },
  6899. //>>excludeStart("ide", pragmas.excludeIdeData);
  6900. args: ["aString", "aString2", "classVars", "pools", "aString3"],
  6901. source: "subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3\x0a\x09\x22Kept for file-in compatibility. ignores class variables and pools.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  6902. referencedClasses: [],
  6903. //>>excludeEnd("ide");
  6904. messageSends: ["subclass:instanceVariableNames:package:"]
  6905. }),
  6906. $globals.UndefinedObject);
  6907. $core.addMethod(
  6908. $core.method({
  6909. selector: "subclass:instanceVariableNames:package:",
  6910. protocol: 'class creation',
  6911. fn: function (aString,aString2,aString3){
  6912. var self=this;
  6913. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  6914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6915. return $core.withContext(function($ctx1) {
  6916. //>>excludeEnd("ctx");
  6917. var $1;
  6918. $1=$recv($recv($ClassBuilder())._new())._superclass_subclass_instanceVariableNames_package_(self,$recv(aString)._asString(),aString2,aString3);
  6919. return $1;
  6920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6921. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:package:",{aString:aString,aString2:aString2,aString3:aString3},$globals.UndefinedObject)});
  6922. //>>excludeEnd("ctx");
  6923. },
  6924. //>>excludeStart("ide", pragmas.excludeIdeData);
  6925. args: ["aString", "aString2", "aString3"],
  6926. source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3",
  6927. referencedClasses: ["ClassBuilder"],
  6928. //>>excludeEnd("ide");
  6929. messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"]
  6930. }),
  6931. $globals.UndefinedObject);
  6932. $core.addMethod(
  6933. $core.method({
  6934. selector: "new",
  6935. protocol: 'instance creation',
  6936. fn: function (){
  6937. var self=this;
  6938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6939. return $core.withContext(function($ctx1) {
  6940. //>>excludeEnd("ctx");
  6941. self._error_("You cannot create new instances of UndefinedObject. Use nil");
  6942. return self;
  6943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6944. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.UndefinedObject.klass)});
  6945. //>>excludeEnd("ctx");
  6946. },
  6947. //>>excludeStart("ide", pragmas.excludeIdeData);
  6948. args: [],
  6949. source: "new\x0a\x09\x09self error: 'You cannot create new instances of UndefinedObject. Use nil'",
  6950. referencedClasses: [],
  6951. //>>excludeEnd("ide");
  6952. messageSends: ["error:"]
  6953. }),
  6954. $globals.UndefinedObject.klass);
  6955. });
  6956. define("amber_core/Kernel-Classes", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  6957. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  6958. var smalltalk=$core,_st=$recv,globals=$globals;
  6959. $core.addPackage('Kernel-Classes');
  6960. $core.packages["Kernel-Classes"].transport = {"type":"amd","amdNamespace":"amber_core"};
  6961. $core.addClass('Behavior', $globals.Object, [], 'Kernel-Classes');
  6962. //>>excludeStart("ide", pragmas.excludeIdeData);
  6963. $globals.Behavior.comment="I am the superclass of all class objects.\x0a\x0aI define the protocol for creating instances of a class with `#basicNew` and `#new` (see `boot.js` for class constructors details).\x0a\x0aMy instances know about the subclass/superclass relationships between classes, contain the description that instances are created from,\x0aand hold the method dictionary that's associated with each class.\x0a\x0aI also provides methods for compiling methods, examining the method dictionary, and iterating over the class hierarchy.";
  6964. //>>excludeEnd("ide");
  6965. $core.addMethod(
  6966. $core.method({
  6967. selector: ">>",
  6968. protocol: 'accessing',
  6969. fn: function (aString){
  6970. var self=this;
  6971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6972. return $core.withContext(function($ctx1) {
  6973. //>>excludeEnd("ctx");
  6974. var $1;
  6975. $1=self._methodAt_(aString);
  6976. return $1;
  6977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  6978. }, function($ctx1) {$ctx1.fill(self,">>",{aString:aString},$globals.Behavior)});
  6979. //>>excludeEnd("ctx");
  6980. },
  6981. //>>excludeStart("ide", pragmas.excludeIdeData);
  6982. args: ["aString"],
  6983. source: ">> aString\x0a\x09^ self methodAt: aString",
  6984. referencedClasses: [],
  6985. //>>excludeEnd("ide");
  6986. messageSends: ["methodAt:"]
  6987. }),
  6988. $globals.Behavior);
  6989. $core.addMethod(
  6990. $core.method({
  6991. selector: "addCompiledMethod:",
  6992. protocol: 'compiling',
  6993. fn: function (aMethod){
  6994. var self=this;
  6995. var oldMethod,announcement;
  6996. function $MethodAdded(){return $globals.MethodAdded||(typeof MethodAdded=="undefined"?nil:MethodAdded)}
  6997. function $MethodModified(){return $globals.MethodModified||(typeof MethodModified=="undefined"?nil:MethodModified)}
  6998. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  6999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7000. return $core.withContext(function($ctx1) {
  7001. //>>excludeEnd("ctx");
  7002. var $2,$3,$1,$4,$5,$6,$7,$8,$9,$10,$11,$receiver;
  7003. oldMethod=$recv(self._methodDictionary())._at_ifAbsent_($recv(aMethod)._selector(),(function(){
  7004. return nil;
  7005. }));
  7006. $2=self._protocols();
  7007. $3=$recv(aMethod)._protocol();
  7008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7009. $ctx1.sendIdx["protocol"]=1;
  7010. //>>excludeEnd("ctx");
  7011. $1=$recv($2)._includes_($3);
  7012. if(!$core.assert($1)){
  7013. $4=self._organization();
  7014. $5=$recv(aMethod)._protocol();
  7015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7016. $ctx1.sendIdx["protocol"]=2;
  7017. //>>excludeEnd("ctx");
  7018. $recv($4)._addElement_($5);
  7019. };
  7020. self._basicAddCompiledMethod_(aMethod);
  7021. $6=oldMethod;
  7022. if(($receiver = $6) == null || $receiver.isNil){
  7023. $6;
  7024. } else {
  7025. self._removeProtocolIfEmpty_($recv(oldMethod)._protocol());
  7026. };
  7027. $7=oldMethod;
  7028. if(($receiver = $7) == null || $receiver.isNil){
  7029. $8=$recv($MethodAdded())._new();
  7030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7031. $ctx1.sendIdx["new"]=1;
  7032. //>>excludeEnd("ctx");
  7033. $recv($8)._method_(aMethod);
  7034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7035. $ctx1.sendIdx["method:"]=1;
  7036. //>>excludeEnd("ctx");
  7037. $9=$recv($8)._yourself();
  7038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7039. $ctx1.sendIdx["yourself"]=1;
  7040. //>>excludeEnd("ctx");
  7041. announcement=$9;
  7042. } else {
  7043. $10=$recv($MethodModified())._new();
  7044. $recv($10)._oldMethod_(oldMethod);
  7045. $recv($10)._method_(aMethod);
  7046. $11=$recv($10)._yourself();
  7047. announcement=$11;
  7048. };
  7049. $recv($recv($SystemAnnouncer())._current())._announce_(announcement);
  7050. return self;
  7051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7052. }, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod,oldMethod:oldMethod,announcement:announcement},$globals.Behavior)});
  7053. //>>excludeEnd("ctx");
  7054. },
  7055. //>>excludeStart("ide", pragmas.excludeIdeData);
  7056. args: ["aMethod"],
  7057. source: "addCompiledMethod: aMethod\x0a\x09| oldMethod announcement |\x0a\x09\x0a\x09oldMethod := self methodDictionary\x0a\x09\x09at: aMethod selector\x0a\x09\x09ifAbsent: [ nil ].\x0a\x09\x0a\x09(self protocols includes: aMethod protocol)\x0a\x09\x09ifFalse: [ self organization addElement: aMethod protocol ].\x0a\x0a\x09self basicAddCompiledMethod: aMethod.\x0a\x09\x0a\x09oldMethod ifNotNil: [\x0a\x09\x09self removeProtocolIfEmpty: oldMethod protocol ].\x0a\x09\x0a\x09announcement := oldMethod\x0a\x09\x09ifNil: [\x0a\x09\x09\x09MethodAdded new\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ]\x0a\x09\x09ifNotNil: [\x0a\x09\x09\x09MethodModified new\x0a\x09\x09\x09\x09\x09oldMethod: oldMethod;\x0a\x09\x09\x09\x09\x09method: aMethod;\x0a\x09\x09\x09\x09\x09yourself ].\x0a\x09\x09\x09\x09\x09\x0a\x09\x09\x09\x09\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09\x09\x09announce: announcement",
  7058. referencedClasses: ["MethodAdded", "MethodModified", "SystemAnnouncer"],
  7059. //>>excludeEnd("ide");
  7060. messageSends: ["at:ifAbsent:", "methodDictionary", "selector", "ifFalse:", "includes:", "protocols", "protocol", "addElement:", "organization", "basicAddCompiledMethod:", "ifNotNil:", "removeProtocolIfEmpty:", "ifNil:ifNotNil:", "method:", "new", "yourself", "oldMethod:", "announce:", "current"]
  7061. }),
  7062. $globals.Behavior);
  7063. $core.addMethod(
  7064. $core.method({
  7065. selector: "allInstanceVariableNames",
  7066. protocol: 'accessing',
  7067. fn: function (){
  7068. var self=this;
  7069. var result;
  7070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7071. return $core.withContext(function($ctx1) {
  7072. //>>excludeEnd("ctx");
  7073. var $1,$2,$receiver;
  7074. result=$recv(self._instanceVariableNames())._copy();
  7075. $1=self._superclass();
  7076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7077. $ctx1.sendIdx["superclass"]=1;
  7078. //>>excludeEnd("ctx");
  7079. if(($receiver = $1) == null || $receiver.isNil){
  7080. $1;
  7081. } else {
  7082. $recv(result)._addAll_($recv(self._superclass())._allInstanceVariableNames());
  7083. };
  7084. $2=result;
  7085. return $2;
  7086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7087. }, function($ctx1) {$ctx1.fill(self,"allInstanceVariableNames",{result:result},$globals.Behavior)});
  7088. //>>excludeEnd("ctx");
  7089. },
  7090. //>>excludeStart("ide", pragmas.excludeIdeData);
  7091. args: [],
  7092. source: "allInstanceVariableNames\x0a\x09| result |\x0a\x09result := self instanceVariableNames copy.\x0a\x09self superclass ifNotNil: [\x0a\x09\x09result addAll: self superclass allInstanceVariableNames ].\x0a\x09^ result",
  7093. referencedClasses: [],
  7094. //>>excludeEnd("ide");
  7095. messageSends: ["copy", "instanceVariableNames", "ifNotNil:", "superclass", "addAll:", "allInstanceVariableNames"]
  7096. }),
  7097. $globals.Behavior);
  7098. $core.addMethod(
  7099. $core.method({
  7100. selector: "allSelectors",
  7101. protocol: 'accessing',
  7102. fn: function (){
  7103. var self=this;
  7104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7105. return $core.withContext(function($ctx1) {
  7106. //>>excludeEnd("ctx");
  7107. var $2,$3,$4,$1;
  7108. $2=self._allSuperclasses();
  7109. $3=self._selectors();
  7110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7111. $ctx1.sendIdx["selectors"]=1;
  7112. //>>excludeEnd("ctx");
  7113. $1=$recv($2)._inject_into_($3,(function(acc,each){
  7114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7115. return $core.withContext(function($ctx2) {
  7116. //>>excludeEnd("ctx");
  7117. $recv(acc)._addAll_($recv(each)._selectors());
  7118. $4=$recv(acc)._yourself();
  7119. return $4;
  7120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7121. }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)});
  7122. //>>excludeEnd("ctx");
  7123. }));
  7124. return $1;
  7125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7126. }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},$globals.Behavior)});
  7127. //>>excludeEnd("ctx");
  7128. },
  7129. //>>excludeStart("ide", pragmas.excludeIdeData);
  7130. args: [],
  7131. source: "allSelectors\x0a\x09^ self allSuperclasses\x0a\x09\x09inject: self selectors\x0a\x09\x09into: [ :acc :each | acc addAll: each selectors; yourself ]",
  7132. referencedClasses: [],
  7133. //>>excludeEnd("ide");
  7134. messageSends: ["inject:into:", "allSuperclasses", "selectors", "addAll:", "yourself"]
  7135. }),
  7136. $globals.Behavior);
  7137. $core.addMethod(
  7138. $core.method({
  7139. selector: "allSubclasses",
  7140. protocol: 'accessing',
  7141. fn: function (){
  7142. var self=this;
  7143. var subclasses,index;
  7144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7145. return $core.withContext(function($ctx1) {
  7146. //>>excludeEnd("ctx");
  7147. var $1;
  7148. subclasses=self._subclasses();
  7149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7150. $ctx1.sendIdx["subclasses"]=1;
  7151. //>>excludeEnd("ctx");
  7152. index=(1);
  7153. $recv((function(){
  7154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7155. return $core.withContext(function($ctx2) {
  7156. //>>excludeEnd("ctx");
  7157. return $recv(index).__gt($recv(subclasses)._size());
  7158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7159. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7160. //>>excludeEnd("ctx");
  7161. }))._whileFalse_((function(){
  7162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7163. return $core.withContext(function($ctx2) {
  7164. //>>excludeEnd("ctx");
  7165. $recv(subclasses)._addAll_($recv($recv(subclasses)._at_(index))._subclasses());
  7166. index=$recv(index).__plus((1));
  7167. return index;
  7168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7169. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7170. //>>excludeEnd("ctx");
  7171. }));
  7172. $1=subclasses;
  7173. return $1;
  7174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7175. }, function($ctx1) {$ctx1.fill(self,"allSubclasses",{subclasses:subclasses,index:index},$globals.Behavior)});
  7176. //>>excludeEnd("ctx");
  7177. },
  7178. //>>excludeStart("ide", pragmas.excludeIdeData);
  7179. args: [],
  7180. source: "allSubclasses\x0a\x09\x22Answer an collection of the receiver's and the receiver's descendent's subclasses. \x22\x0a\x0a\x09| subclasses index |\x0a\x09\x0a\x09subclasses := self subclasses.\x0a\x09index := 1.\x0a\x09[ index > subclasses size ]\x0a\x09\x09whileFalse: [ subclasses addAll: (subclasses at: index) subclasses.\x0a\x09\x09\x09index := index + 1 ].\x0a\x0a\x09^ subclasses",
  7181. referencedClasses: [],
  7182. //>>excludeEnd("ide");
  7183. messageSends: ["subclasses", "whileFalse:", ">", "size", "addAll:", "at:", "+"]
  7184. }),
  7185. $globals.Behavior);
  7186. $core.addMethod(
  7187. $core.method({
  7188. selector: "allSubclassesDo:",
  7189. protocol: 'enumerating',
  7190. fn: function (aBlock){
  7191. var self=this;
  7192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7193. return $core.withContext(function($ctx1) {
  7194. //>>excludeEnd("ctx");
  7195. $recv(self._allSubclasses())._do_((function(each){
  7196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7197. return $core.withContext(function($ctx2) {
  7198. //>>excludeEnd("ctx");
  7199. return $recv(aBlock)._value_(each);
  7200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7201. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  7202. //>>excludeEnd("ctx");
  7203. }));
  7204. return self;
  7205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7206. }, function($ctx1) {$ctx1.fill(self,"allSubclassesDo:",{aBlock:aBlock},$globals.Behavior)});
  7207. //>>excludeEnd("ctx");
  7208. },
  7209. //>>excludeStart("ide", pragmas.excludeIdeData);
  7210. args: ["aBlock"],
  7211. source: "allSubclassesDo: aBlock\x0a\x09\x22Evaluate the argument, aBlock, for each of the receiver's subclasses.\x22\x0a\x0a\x09self allSubclasses do: [ :each |\x0a \x09aBlock value: each ]",
  7212. referencedClasses: [],
  7213. //>>excludeEnd("ide");
  7214. messageSends: ["do:", "allSubclasses", "value:"]
  7215. }),
  7216. $globals.Behavior);
  7217. $core.addMethod(
  7218. $core.method({
  7219. selector: "allSuperclasses",
  7220. protocol: 'accessing',
  7221. fn: function (){
  7222. var self=this;
  7223. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  7224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7225. return $core.withContext(function($ctx1) {
  7226. //>>excludeEnd("ctx");
  7227. var $1,$2,$5,$4,$6,$3,$receiver;
  7228. $1=self._superclass();
  7229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7230. $ctx1.sendIdx["superclass"]=1;
  7231. //>>excludeEnd("ctx");
  7232. if(($receiver = $1) == null || $receiver.isNil){
  7233. $2=[];
  7234. return $2;
  7235. } else {
  7236. $1;
  7237. };
  7238. $5=self._superclass();
  7239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7240. $ctx1.sendIdx["superclass"]=2;
  7241. //>>excludeEnd("ctx");
  7242. $4=$recv($OrderedCollection())._with_($5);
  7243. $recv($4)._addAll_($recv(self._superclass())._allSuperclasses());
  7244. $6=$recv($4)._yourself();
  7245. $3=$6;
  7246. return $3;
  7247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7248. }, function($ctx1) {$ctx1.fill(self,"allSuperclasses",{},$globals.Behavior)});
  7249. //>>excludeEnd("ctx");
  7250. },
  7251. //>>excludeStart("ide", pragmas.excludeIdeData);
  7252. args: [],
  7253. source: "allSuperclasses\x0a\x09\x0a\x09self superclass ifNil: [ ^ #() ].\x0a\x09\x0a\x09^ (OrderedCollection with: self superclass)\x0a\x09\x09addAll: self superclass allSuperclasses;\x0a\x09\x09yourself",
  7254. referencedClasses: ["OrderedCollection"],
  7255. //>>excludeEnd("ide");
  7256. messageSends: ["ifNil:", "superclass", "addAll:", "with:", "allSuperclasses", "yourself"]
  7257. }),
  7258. $globals.Behavior);
  7259. $core.addMethod(
  7260. $core.method({
  7261. selector: "basicAddCompiledMethod:",
  7262. protocol: 'private',
  7263. fn: function (aMethod){
  7264. var self=this;
  7265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7266. return $core.withContext(function($ctx1) {
  7267. //>>excludeEnd("ctx");
  7268. $core.addMethod(aMethod, self);
  7269. return self;
  7270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7271. }, function($ctx1) {$ctx1.fill(self,"basicAddCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  7272. //>>excludeEnd("ctx");
  7273. },
  7274. //>>excludeStart("ide", pragmas.excludeIdeData);
  7275. args: ["aMethod"],
  7276. source: "basicAddCompiledMethod: aMethod\x0a\x09<$core.addMethod(aMethod, self)>",
  7277. referencedClasses: [],
  7278. //>>excludeEnd("ide");
  7279. messageSends: []
  7280. }),
  7281. $globals.Behavior);
  7282. $core.addMethod(
  7283. $core.method({
  7284. selector: "basicNew",
  7285. protocol: 'instance creation',
  7286. fn: function (){
  7287. var self=this;
  7288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7289. return $core.withContext(function($ctx1) {
  7290. //>>excludeEnd("ctx");
  7291. return new self.fn();
  7292. return self;
  7293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7294. }, function($ctx1) {$ctx1.fill(self,"basicNew",{},$globals.Behavior)});
  7295. //>>excludeEnd("ctx");
  7296. },
  7297. //>>excludeStart("ide", pragmas.excludeIdeData);
  7298. args: [],
  7299. source: "basicNew\x0a\x09<return new self.fn()>",
  7300. referencedClasses: [],
  7301. //>>excludeEnd("ide");
  7302. messageSends: []
  7303. }),
  7304. $globals.Behavior);
  7305. $core.addMethod(
  7306. $core.method({
  7307. selector: "basicRemoveCompiledMethod:",
  7308. protocol: 'private',
  7309. fn: function (aMethod){
  7310. var self=this;
  7311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7312. return $core.withContext(function($ctx1) {
  7313. //>>excludeEnd("ctx");
  7314. $core.removeMethod(aMethod,self);
  7315. return self;
  7316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7317. }, function($ctx1) {$ctx1.fill(self,"basicRemoveCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  7318. //>>excludeEnd("ctx");
  7319. },
  7320. //>>excludeStart("ide", pragmas.excludeIdeData);
  7321. args: ["aMethod"],
  7322. source: "basicRemoveCompiledMethod: aMethod\x0a\x09<$core.removeMethod(aMethod,self)>",
  7323. referencedClasses: [],
  7324. //>>excludeEnd("ide");
  7325. messageSends: []
  7326. }),
  7327. $globals.Behavior);
  7328. $core.addMethod(
  7329. $core.method({
  7330. selector: "canUnderstand:",
  7331. protocol: 'testing',
  7332. fn: function (aSelector){
  7333. var self=this;
  7334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7335. return $core.withContext(function($ctx1) {
  7336. //>>excludeEnd("ctx");
  7337. var $3,$2,$1;
  7338. $1=$recv(self._includesSelector_($recv(aSelector)._asString()))._or_((function(){
  7339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7340. return $core.withContext(function($ctx2) {
  7341. //>>excludeEnd("ctx");
  7342. $3=self._superclass();
  7343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7344. $ctx2.sendIdx["superclass"]=1;
  7345. //>>excludeEnd("ctx");
  7346. $2=$recv($3)._notNil();
  7347. return $recv($2)._and_((function(){
  7348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7349. return $core.withContext(function($ctx3) {
  7350. //>>excludeEnd("ctx");
  7351. return $recv(self._superclass())._canUnderstand_(aSelector);
  7352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7353. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  7354. //>>excludeEnd("ctx");
  7355. }));
  7356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7357. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7358. //>>excludeEnd("ctx");
  7359. }));
  7360. return $1;
  7361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7362. }, function($ctx1) {$ctx1.fill(self,"canUnderstand:",{aSelector:aSelector},$globals.Behavior)});
  7363. //>>excludeEnd("ctx");
  7364. },
  7365. //>>excludeStart("ide", pragmas.excludeIdeData);
  7366. args: ["aSelector"],
  7367. source: "canUnderstand: aSelector\x0a\x09^ (self includesSelector: aSelector asString) or: [\x0a\x09\x09self superclass notNil and: [ self superclass canUnderstand: aSelector ]]",
  7368. referencedClasses: [],
  7369. //>>excludeEnd("ide");
  7370. messageSends: ["or:", "includesSelector:", "asString", "and:", "notNil", "superclass", "canUnderstand:"]
  7371. }),
  7372. $globals.Behavior);
  7373. $core.addMethod(
  7374. $core.method({
  7375. selector: "comment",
  7376. protocol: 'accessing',
  7377. fn: function (){
  7378. var self=this;
  7379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7380. return $core.withContext(function($ctx1) {
  7381. //>>excludeEnd("ctx");
  7382. var $2,$1,$receiver;
  7383. $2=self._basicAt_("comment");
  7384. if(($receiver = $2) == null || $receiver.isNil){
  7385. $1="";
  7386. } else {
  7387. $1=$2;
  7388. };
  7389. return $1;
  7390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7391. }, function($ctx1) {$ctx1.fill(self,"comment",{},$globals.Behavior)});
  7392. //>>excludeEnd("ctx");
  7393. },
  7394. //>>excludeStart("ide", pragmas.excludeIdeData);
  7395. args: [],
  7396. source: "comment\x0a\x09^ (self basicAt: 'comment') ifNil: [ '' ]",
  7397. referencedClasses: [],
  7398. //>>excludeEnd("ide");
  7399. messageSends: ["ifNil:", "basicAt:"]
  7400. }),
  7401. $globals.Behavior);
  7402. $core.addMethod(
  7403. $core.method({
  7404. selector: "comment:",
  7405. protocol: 'accessing',
  7406. fn: function (aString){
  7407. var self=this;
  7408. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  7409. function $ClassCommentChanged(){return $globals.ClassCommentChanged||(typeof ClassCommentChanged=="undefined"?nil:ClassCommentChanged)}
  7410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7411. return $core.withContext(function($ctx1) {
  7412. //>>excludeEnd("ctx");
  7413. var $1,$2;
  7414. self._basicAt_put_("comment",aString);
  7415. $1=$recv($ClassCommentChanged())._new();
  7416. $recv($1)._theClass_(self);
  7417. $2=$recv($1)._yourself();
  7418. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  7419. return self;
  7420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7421. }, function($ctx1) {$ctx1.fill(self,"comment:",{aString:aString},$globals.Behavior)});
  7422. //>>excludeEnd("ctx");
  7423. },
  7424. //>>excludeStart("ide", pragmas.excludeIdeData);
  7425. args: ["aString"],
  7426. source: "comment: aString\x0a\x09self basicAt: 'comment' put: aString.\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassCommentChanged new\x0a\x09\x09\x09theClass: self;\x0a\x09\x09\x09yourself)",
  7427. referencedClasses: ["SystemAnnouncer", "ClassCommentChanged"],
  7428. //>>excludeEnd("ide");
  7429. messageSends: ["basicAt:put:", "announce:", "current", "theClass:", "new", "yourself"]
  7430. }),
  7431. $globals.Behavior);
  7432. $core.addMethod(
  7433. $core.method({
  7434. selector: "commentStamp",
  7435. protocol: 'accessing',
  7436. fn: function (){
  7437. var self=this;
  7438. function $ClassCommentReader(){return $globals.ClassCommentReader||(typeof ClassCommentReader=="undefined"?nil:ClassCommentReader)}
  7439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7440. return $core.withContext(function($ctx1) {
  7441. //>>excludeEnd("ctx");
  7442. var $2,$3,$1;
  7443. $2=$recv($ClassCommentReader())._new();
  7444. $recv($2)._class_(self);
  7445. $3=$recv($2)._yourself();
  7446. $1=$3;
  7447. return $1;
  7448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7449. }, function($ctx1) {$ctx1.fill(self,"commentStamp",{},$globals.Behavior)});
  7450. //>>excludeEnd("ctx");
  7451. },
  7452. //>>excludeStart("ide", pragmas.excludeIdeData);
  7453. args: [],
  7454. source: "commentStamp\x0a\x09^ ClassCommentReader new\x0a\x09class: self;\x0a\x09yourself",
  7455. referencedClasses: ["ClassCommentReader"],
  7456. //>>excludeEnd("ide");
  7457. messageSends: ["class:", "new", "yourself"]
  7458. }),
  7459. $globals.Behavior);
  7460. $core.addMethod(
  7461. $core.method({
  7462. selector: "commentStamp:prior:",
  7463. protocol: 'accessing',
  7464. fn: function (aStamp,prior){
  7465. var self=this;
  7466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7467. return $core.withContext(function($ctx1) {
  7468. //>>excludeEnd("ctx");
  7469. var $1;
  7470. $1=self._commentStamp();
  7471. return $1;
  7472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7473. }, function($ctx1) {$ctx1.fill(self,"commentStamp:prior:",{aStamp:aStamp,prior:prior},$globals.Behavior)});
  7474. //>>excludeEnd("ctx");
  7475. },
  7476. //>>excludeStart("ide", pragmas.excludeIdeData);
  7477. args: ["aStamp", "prior"],
  7478. source: "commentStamp: aStamp prior: prior\x0a\x09\x09^ self commentStamp",
  7479. referencedClasses: [],
  7480. //>>excludeEnd("ide");
  7481. messageSends: ["commentStamp"]
  7482. }),
  7483. $globals.Behavior);
  7484. $core.addMethod(
  7485. $core.method({
  7486. selector: "compile:",
  7487. protocol: 'compiling',
  7488. fn: function (aString){
  7489. var self=this;
  7490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7491. return $core.withContext(function($ctx1) {
  7492. //>>excludeEnd("ctx");
  7493. var $1;
  7494. $1=self._compile_protocol_(aString,"");
  7495. return $1;
  7496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7497. }, function($ctx1) {$ctx1.fill(self,"compile:",{aString:aString},$globals.Behavior)});
  7498. //>>excludeEnd("ctx");
  7499. },
  7500. //>>excludeStart("ide", pragmas.excludeIdeData);
  7501. args: ["aString"],
  7502. source: "compile: aString\x0a\x09^ self compile: aString protocol: ''",
  7503. referencedClasses: [],
  7504. //>>excludeEnd("ide");
  7505. messageSends: ["compile:protocol:"]
  7506. }),
  7507. $globals.Behavior);
  7508. $core.addMethod(
  7509. $core.method({
  7510. selector: "compile:protocol:",
  7511. protocol: 'compiling',
  7512. fn: function (aString,anotherString){
  7513. var self=this;
  7514. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  7515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7516. return $core.withContext(function($ctx1) {
  7517. //>>excludeEnd("ctx");
  7518. var $1;
  7519. $1=$recv($recv($Compiler())._new())._install_forClass_protocol_(aString,self,anotherString);
  7520. return $1;
  7521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7522. }, function($ctx1) {$ctx1.fill(self,"compile:protocol:",{aString:aString,anotherString:anotherString},$globals.Behavior)});
  7523. //>>excludeEnd("ctx");
  7524. },
  7525. //>>excludeStart("ide", pragmas.excludeIdeData);
  7526. args: ["aString", "anotherString"],
  7527. source: "compile: aString protocol: anotherString\x0a\x09^ Compiler new\x0a\x09\x09install: aString\x0a\x09\x09forClass: self\x0a\x09\x09protocol: anotherString",
  7528. referencedClasses: ["Compiler"],
  7529. //>>excludeEnd("ide");
  7530. messageSends: ["install:forClass:protocol:", "new"]
  7531. }),
  7532. $globals.Behavior);
  7533. $core.addMethod(
  7534. $core.method({
  7535. selector: "definition",
  7536. protocol: 'accessing',
  7537. fn: function (){
  7538. var self=this;
  7539. return "";
  7540. },
  7541. //>>excludeStart("ide", pragmas.excludeIdeData);
  7542. args: [],
  7543. source: "definition\x0a\x09^ ''",
  7544. referencedClasses: [],
  7545. //>>excludeEnd("ide");
  7546. messageSends: []
  7547. }),
  7548. $globals.Behavior);
  7549. $core.addMethod(
  7550. $core.method({
  7551. selector: "includesBehavior:",
  7552. protocol: 'testing',
  7553. fn: function (aClass){
  7554. var self=this;
  7555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7556. return $core.withContext(function($ctx1) {
  7557. //>>excludeEnd("ctx");
  7558. var $1;
  7559. $1=$recv(self.__eq_eq(aClass))._or_((function(){
  7560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7561. return $core.withContext(function($ctx2) {
  7562. //>>excludeEnd("ctx");
  7563. return self._inheritsFrom_(aClass);
  7564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7565. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7566. //>>excludeEnd("ctx");
  7567. }));
  7568. return $1;
  7569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7570. }, function($ctx1) {$ctx1.fill(self,"includesBehavior:",{aClass:aClass},$globals.Behavior)});
  7571. //>>excludeEnd("ctx");
  7572. },
  7573. //>>excludeStart("ide", pragmas.excludeIdeData);
  7574. args: ["aClass"],
  7575. source: "includesBehavior: aClass\x0a\x09^ self == aClass or: [\x0a\x09\x09\x09self inheritsFrom: aClass ]",
  7576. referencedClasses: [],
  7577. //>>excludeEnd("ide");
  7578. messageSends: ["or:", "==", "inheritsFrom:"]
  7579. }),
  7580. $globals.Behavior);
  7581. $core.addMethod(
  7582. $core.method({
  7583. selector: "includesSelector:",
  7584. protocol: 'testing',
  7585. fn: function (aString){
  7586. var self=this;
  7587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7588. return $core.withContext(function($ctx1) {
  7589. //>>excludeEnd("ctx");
  7590. var $1;
  7591. $1=$recv(self._methodDictionary())._includesKey_(aString);
  7592. return $1;
  7593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7594. }, function($ctx1) {$ctx1.fill(self,"includesSelector:",{aString:aString},$globals.Behavior)});
  7595. //>>excludeEnd("ctx");
  7596. },
  7597. //>>excludeStart("ide", pragmas.excludeIdeData);
  7598. args: ["aString"],
  7599. source: "includesSelector: aString\x0a\x09^ self methodDictionary includesKey: aString",
  7600. referencedClasses: [],
  7601. //>>excludeEnd("ide");
  7602. messageSends: ["includesKey:", "methodDictionary"]
  7603. }),
  7604. $globals.Behavior);
  7605. $core.addMethod(
  7606. $core.method({
  7607. selector: "inheritsFrom:",
  7608. protocol: 'testing',
  7609. fn: function (aClass){
  7610. var self=this;
  7611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7612. return $core.withContext(function($ctx1) {
  7613. //>>excludeEnd("ctx");
  7614. var $1,$4,$3,$2,$receiver;
  7615. $1=self._superclass();
  7616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7617. $ctx1.sendIdx["superclass"]=1;
  7618. //>>excludeEnd("ctx");
  7619. if(($receiver = $1) == null || $receiver.isNil){
  7620. return false;
  7621. } else {
  7622. $1;
  7623. };
  7624. $4=self._superclass();
  7625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7626. $ctx1.sendIdx["superclass"]=2;
  7627. //>>excludeEnd("ctx");
  7628. $3=$recv(aClass).__eq_eq($4);
  7629. $2=$recv($3)._or_((function(){
  7630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7631. return $core.withContext(function($ctx2) {
  7632. //>>excludeEnd("ctx");
  7633. return $recv(self._superclass())._inheritsFrom_(aClass);
  7634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7635. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7636. //>>excludeEnd("ctx");
  7637. }));
  7638. return $2;
  7639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7640. }, function($ctx1) {$ctx1.fill(self,"inheritsFrom:",{aClass:aClass},$globals.Behavior)});
  7641. //>>excludeEnd("ctx");
  7642. },
  7643. //>>excludeStart("ide", pragmas.excludeIdeData);
  7644. args: ["aClass"],
  7645. source: "inheritsFrom: aClass\x0a\x09self superclass ifNil: [ ^ false ].\x0a\x0a\x09^ aClass == self superclass or: [ \x0a\x09\x09self superclass inheritsFrom: aClass ]",
  7646. referencedClasses: [],
  7647. //>>excludeEnd("ide");
  7648. messageSends: ["ifNil:", "superclass", "or:", "==", "inheritsFrom:"]
  7649. }),
  7650. $globals.Behavior);
  7651. $core.addMethod(
  7652. $core.method({
  7653. selector: "instanceVariableNames",
  7654. protocol: 'accessing',
  7655. fn: function (){
  7656. var self=this;
  7657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7658. return $core.withContext(function($ctx1) {
  7659. //>>excludeEnd("ctx");
  7660. return self.iVarNames;
  7661. return self;
  7662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7663. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames",{},$globals.Behavior)});
  7664. //>>excludeEnd("ctx");
  7665. },
  7666. //>>excludeStart("ide", pragmas.excludeIdeData);
  7667. args: [],
  7668. source: "instanceVariableNames\x0a\x09<return self.iVarNames>",
  7669. referencedClasses: [],
  7670. //>>excludeEnd("ide");
  7671. messageSends: []
  7672. }),
  7673. $globals.Behavior);
  7674. $core.addMethod(
  7675. $core.method({
  7676. selector: "isBehavior",
  7677. protocol: 'testing',
  7678. fn: function (){
  7679. var self=this;
  7680. return true;
  7681. },
  7682. //>>excludeStart("ide", pragmas.excludeIdeData);
  7683. args: [],
  7684. source: "isBehavior\x0a\x09^ true",
  7685. referencedClasses: [],
  7686. //>>excludeEnd("ide");
  7687. messageSends: []
  7688. }),
  7689. $globals.Behavior);
  7690. $core.addMethod(
  7691. $core.method({
  7692. selector: "javascriptConstructor",
  7693. protocol: 'accessing',
  7694. fn: function (){
  7695. var self=this;
  7696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7697. return $core.withContext(function($ctx1) {
  7698. //>>excludeEnd("ctx");
  7699. return self.fn;
  7700. return self;
  7701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7702. }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor",{},$globals.Behavior)});
  7703. //>>excludeEnd("ctx");
  7704. },
  7705. //>>excludeStart("ide", pragmas.excludeIdeData);
  7706. args: [],
  7707. source: "javascriptConstructor\x0a\x09\x22Answer the JS constructor used to instantiate. See boot.js\x22\x0a\x09\x0a\x09<return self.fn>",
  7708. referencedClasses: [],
  7709. //>>excludeEnd("ide");
  7710. messageSends: []
  7711. }),
  7712. $globals.Behavior);
  7713. $core.addMethod(
  7714. $core.method({
  7715. selector: "javascriptConstructor:",
  7716. protocol: 'accessing',
  7717. fn: function (aJavaScriptFunction){
  7718. var self=this;
  7719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7720. return $core.withContext(function($ctx1) {
  7721. //>>excludeEnd("ctx");
  7722. $core.setClassConstructor(self, aJavaScriptFunction);;
  7723. return self;
  7724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7725. }, function($ctx1) {$ctx1.fill(self,"javascriptConstructor:",{aJavaScriptFunction:aJavaScriptFunction},$globals.Behavior)});
  7726. //>>excludeEnd("ctx");
  7727. },
  7728. //>>excludeStart("ide", pragmas.excludeIdeData);
  7729. args: ["aJavaScriptFunction"],
  7730. source: "javascriptConstructor: aJavaScriptFunction\x0a\x09\x22Set the JS constructor used to instantiate.\x0a\x09See the JS counter-part in boot.js `$core.setClassConstructor'\x22\x0a\x09\x0a\x09<$core.setClassConstructor(self, aJavaScriptFunction);>",
  7731. referencedClasses: [],
  7732. //>>excludeEnd("ide");
  7733. messageSends: []
  7734. }),
  7735. $globals.Behavior);
  7736. $core.addMethod(
  7737. $core.method({
  7738. selector: "lookupSelector:",
  7739. protocol: 'accessing',
  7740. fn: function (selector){
  7741. var self=this;
  7742. var lookupClass;
  7743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7744. return $core.withContext(function($ctx1) {
  7745. //>>excludeEnd("ctx");
  7746. var $1,$2;
  7747. var $early={};
  7748. try {
  7749. lookupClass=self;
  7750. $recv((function(){
  7751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7752. return $core.withContext(function($ctx2) {
  7753. //>>excludeEnd("ctx");
  7754. return $recv(lookupClass).__eq(nil);
  7755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7756. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  7757. //>>excludeEnd("ctx");
  7758. }))._whileFalse_((function(){
  7759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7760. return $core.withContext(function($ctx2) {
  7761. //>>excludeEnd("ctx");
  7762. $1=$recv(lookupClass)._includesSelector_(selector);
  7763. if($core.assert($1)){
  7764. $2=$recv(lookupClass)._methodAt_(selector);
  7765. throw $early=[$2];
  7766. };
  7767. lookupClass=$recv(lookupClass)._superclass();
  7768. return lookupClass;
  7769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7770. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  7771. //>>excludeEnd("ctx");
  7772. }));
  7773. return nil;
  7774. }
  7775. catch(e) {if(e===$early)return e[0]; throw e}
  7776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7777. }, function($ctx1) {$ctx1.fill(self,"lookupSelector:",{selector:selector,lookupClass:lookupClass},$globals.Behavior)});
  7778. //>>excludeEnd("ctx");
  7779. },
  7780. //>>excludeStart("ide", pragmas.excludeIdeData);
  7781. args: ["selector"],
  7782. source: "lookupSelector: selector\x0a\x09\x22Look up the given selector in my methodDictionary.\x0a\x09Return the corresponding method if found.\x0a\x09Otherwise chase the superclass chain and try again.\x0a\x09Return nil if no method is found.\x22\x0a\x09\x0a\x09| lookupClass |\x0a\x09\x0a\x09lookupClass := self.\x0a\x09[ lookupClass = nil ] whileFalse: [\x0a\x09\x09(lookupClass includesSelector: selector)\x0a\x09\x09\x09\x09ifTrue: [ ^ lookupClass methodAt: selector ].\x0a\x09\x09\x09lookupClass := lookupClass superclass ].\x0a\x09^ nil",
  7783. referencedClasses: [],
  7784. //>>excludeEnd("ide");
  7785. messageSends: ["whileFalse:", "=", "ifTrue:", "includesSelector:", "methodAt:", "superclass"]
  7786. }),
  7787. $globals.Behavior);
  7788. $core.addMethod(
  7789. $core.method({
  7790. selector: "methodAt:",
  7791. protocol: 'accessing',
  7792. fn: function (aString){
  7793. var self=this;
  7794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7795. return $core.withContext(function($ctx1) {
  7796. //>>excludeEnd("ctx");
  7797. var $1;
  7798. $1=$recv(self._methodDictionary())._at_(aString);
  7799. return $1;
  7800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7801. }, function($ctx1) {$ctx1.fill(self,"methodAt:",{aString:aString},$globals.Behavior)});
  7802. //>>excludeEnd("ctx");
  7803. },
  7804. //>>excludeStart("ide", pragmas.excludeIdeData);
  7805. args: ["aString"],
  7806. source: "methodAt: aString\x0a\x09^ self methodDictionary at: aString",
  7807. referencedClasses: [],
  7808. //>>excludeEnd("ide");
  7809. messageSends: ["at:", "methodDictionary"]
  7810. }),
  7811. $globals.Behavior);
  7812. $core.addMethod(
  7813. $core.method({
  7814. selector: "methodDictionary",
  7815. protocol: 'accessing',
  7816. fn: function (){
  7817. var self=this;
  7818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7819. return $core.withContext(function($ctx1) {
  7820. //>>excludeEnd("ctx");
  7821. var dict = $globals.HashedCollection._new();
  7822. var methods = self.methods;
  7823. Object.keys(methods).forEach(function(i) {
  7824. if(methods[i].selector) {
  7825. dict._at_put_(methods[i].selector, methods[i]);
  7826. }
  7827. });
  7828. return dict;
  7829. return self;
  7830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7831. }, function($ctx1) {$ctx1.fill(self,"methodDictionary",{},$globals.Behavior)});
  7832. //>>excludeEnd("ctx");
  7833. },
  7834. //>>excludeStart("ide", pragmas.excludeIdeData);
  7835. args: [],
  7836. source: "methodDictionary\x0a\x09<var dict = $globals.HashedCollection._new();\x0a\x09var methods = self.methods;\x0a\x09Object.keys(methods).forEach(function(i) {\x0a\x09\x09if(methods[i].selector) {\x0a\x09\x09\x09dict._at_put_(methods[i].selector, methods[i]);\x0a\x09\x09}\x0a\x09});\x0a\x09return dict>",
  7837. referencedClasses: [],
  7838. //>>excludeEnd("ide");
  7839. messageSends: []
  7840. }),
  7841. $globals.Behavior);
  7842. $core.addMethod(
  7843. $core.method({
  7844. selector: "methodTemplate",
  7845. protocol: 'accessing',
  7846. fn: function (){
  7847. var self=this;
  7848. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  7849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7850. return $core.withContext(function($ctx1) {
  7851. //>>excludeEnd("ctx");
  7852. var $3,$4,$2,$7,$8,$6,$9,$5,$10,$1;
  7853. $1=$recv($String())._streamContents_((function(stream){
  7854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7855. return $core.withContext(function($ctx2) {
  7856. //>>excludeEnd("ctx");
  7857. $recv(stream)._nextPutAll_("messageSelectorAndArgumentNames");
  7858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7859. $ctx2.sendIdx["nextPutAll:"]=1;
  7860. //>>excludeEnd("ctx");
  7861. $3=$recv($String())._lf();
  7862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7863. $ctx2.sendIdx["lf"]=1;
  7864. //>>excludeEnd("ctx");
  7865. $4=$recv($String())._tab();
  7866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7867. $ctx2.sendIdx["tab"]=1;
  7868. //>>excludeEnd("ctx");
  7869. $2=$recv($3).__comma($4);
  7870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7871. $ctx2.sendIdx[","]=1;
  7872. //>>excludeEnd("ctx");
  7873. $recv(stream)._nextPutAll_($2);
  7874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7875. $ctx2.sendIdx["nextPutAll:"]=2;
  7876. //>>excludeEnd("ctx");
  7877. $recv(stream)._nextPutAll_("\x22comment stating purpose of message\x22");
  7878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7879. $ctx2.sendIdx["nextPutAll:"]=3;
  7880. //>>excludeEnd("ctx");
  7881. $7=$recv($String())._lf();
  7882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7883. $ctx2.sendIdx["lf"]=2;
  7884. //>>excludeEnd("ctx");
  7885. $8=$recv($String())._lf();
  7886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7887. $ctx2.sendIdx["lf"]=3;
  7888. //>>excludeEnd("ctx");
  7889. $6=$recv($7).__comma($8);
  7890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7891. $ctx2.sendIdx[","]=3;
  7892. //>>excludeEnd("ctx");
  7893. $9=$recv($String())._tab();
  7894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7895. $ctx2.sendIdx["tab"]=2;
  7896. //>>excludeEnd("ctx");
  7897. $5=$recv($6).__comma($9);
  7898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7899. $ctx2.sendIdx[","]=2;
  7900. //>>excludeEnd("ctx");
  7901. $recv(stream)._nextPutAll_($5);
  7902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7903. $ctx2.sendIdx["nextPutAll:"]=4;
  7904. //>>excludeEnd("ctx");
  7905. $recv(stream)._nextPutAll_("| temporary variable names |");
  7906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7907. $ctx2.sendIdx["nextPutAll:"]=5;
  7908. //>>excludeEnd("ctx");
  7909. $recv(stream)._nextPutAll_($recv($recv($String())._lf()).__comma($recv($String())._tab()));
  7910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7911. $ctx2.sendIdx["nextPutAll:"]=6;
  7912. //>>excludeEnd("ctx");
  7913. $10=$recv(stream)._nextPutAll_("statements");
  7914. return $10;
  7915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7916. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  7917. //>>excludeEnd("ctx");
  7918. }));
  7919. return $1;
  7920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7921. }, function($ctx1) {$ctx1.fill(self,"methodTemplate",{},$globals.Behavior)});
  7922. //>>excludeEnd("ctx");
  7923. },
  7924. //>>excludeStart("ide", pragmas.excludeIdeData);
  7925. args: [],
  7926. source: "methodTemplate\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream \x0a\x09\x09\x09nextPutAll: 'messageSelectorAndArgumentNames';\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: '\x22comment stating purpose of message\x22';\x0a\x09\x09\x09nextPutAll: String lf, String lf, String tab;\x0a\x09\x09\x09nextPutAll: '| temporary variable names |';\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'statements' ]",
  7927. referencedClasses: ["String"],
  7928. //>>excludeEnd("ide");
  7929. messageSends: ["streamContents:", "nextPutAll:", ",", "lf", "tab"]
  7930. }),
  7931. $globals.Behavior);
  7932. $core.addMethod(
  7933. $core.method({
  7934. selector: "methods",
  7935. protocol: 'accessing',
  7936. fn: function (){
  7937. var self=this;
  7938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7939. return $core.withContext(function($ctx1) {
  7940. //>>excludeEnd("ctx");
  7941. var $1;
  7942. $1=$recv(self._methodDictionary())._values();
  7943. return $1;
  7944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7945. }, function($ctx1) {$ctx1.fill(self,"methods",{},$globals.Behavior)});
  7946. //>>excludeEnd("ctx");
  7947. },
  7948. //>>excludeStart("ide", pragmas.excludeIdeData);
  7949. args: [],
  7950. source: "methods\x0a\x09^ self methodDictionary values",
  7951. referencedClasses: [],
  7952. //>>excludeEnd("ide");
  7953. messageSends: ["values", "methodDictionary"]
  7954. }),
  7955. $globals.Behavior);
  7956. $core.addMethod(
  7957. $core.method({
  7958. selector: "methodsFor:",
  7959. protocol: 'accessing',
  7960. fn: function (aString){
  7961. var self=this;
  7962. function $ClassCategoryReader(){return $globals.ClassCategoryReader||(typeof ClassCategoryReader=="undefined"?nil:ClassCategoryReader)}
  7963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7964. return $core.withContext(function($ctx1) {
  7965. //>>excludeEnd("ctx");
  7966. var $2,$3,$1;
  7967. $2=$recv($ClassCategoryReader())._new();
  7968. $recv($2)._class_category_(self,aString);
  7969. $3=$recv($2)._yourself();
  7970. $1=$3;
  7971. return $1;
  7972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7973. }, function($ctx1) {$ctx1.fill(self,"methodsFor:",{aString:aString},$globals.Behavior)});
  7974. //>>excludeEnd("ctx");
  7975. },
  7976. //>>excludeStart("ide", pragmas.excludeIdeData);
  7977. args: ["aString"],
  7978. source: "methodsFor: aString\x0a\x09^ ClassCategoryReader new\x0a\x09\x09class: self category: aString;\x0a\x09\x09yourself",
  7979. referencedClasses: ["ClassCategoryReader"],
  7980. //>>excludeEnd("ide");
  7981. messageSends: ["class:category:", "new", "yourself"]
  7982. }),
  7983. $globals.Behavior);
  7984. $core.addMethod(
  7985. $core.method({
  7986. selector: "methodsFor:stamp:",
  7987. protocol: 'accessing',
  7988. fn: function (aString,aStamp){
  7989. var self=this;
  7990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7991. return $core.withContext(function($ctx1) {
  7992. //>>excludeEnd("ctx");
  7993. var $1;
  7994. $1=self._methodsFor_(aString);
  7995. return $1;
  7996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  7997. }, function($ctx1) {$ctx1.fill(self,"methodsFor:stamp:",{aString:aString,aStamp:aStamp},$globals.Behavior)});
  7998. //>>excludeEnd("ctx");
  7999. },
  8000. //>>excludeStart("ide", pragmas.excludeIdeData);
  8001. args: ["aString", "aStamp"],
  8002. source: "methodsFor: aString stamp: aStamp\x0a\x09\x22Added for file-in compatibility, ignores stamp.\x22\x0a\x09^ self methodsFor: aString",
  8003. referencedClasses: [],
  8004. //>>excludeEnd("ide");
  8005. messageSends: ["methodsFor:"]
  8006. }),
  8007. $globals.Behavior);
  8008. $core.addMethod(
  8009. $core.method({
  8010. selector: "methodsInProtocol:",
  8011. protocol: 'accessing',
  8012. fn: function (aString){
  8013. var self=this;
  8014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8015. return $core.withContext(function($ctx1) {
  8016. //>>excludeEnd("ctx");
  8017. var $1;
  8018. $1=$recv(self._methods())._select_((function(each){
  8019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8020. return $core.withContext(function($ctx2) {
  8021. //>>excludeEnd("ctx");
  8022. return $recv($recv(each)._protocol()).__eq(aString);
  8023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8024. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  8025. //>>excludeEnd("ctx");
  8026. }));
  8027. return $1;
  8028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8029. }, function($ctx1) {$ctx1.fill(self,"methodsInProtocol:",{aString:aString},$globals.Behavior)});
  8030. //>>excludeEnd("ctx");
  8031. },
  8032. //>>excludeStart("ide", pragmas.excludeIdeData);
  8033. args: ["aString"],
  8034. source: "methodsInProtocol: aString\x0a\x09^ self methods select: [ :each | each protocol = aString ]",
  8035. referencedClasses: [],
  8036. //>>excludeEnd("ide");
  8037. messageSends: ["select:", "methods", "=", "protocol"]
  8038. }),
  8039. $globals.Behavior);
  8040. $core.addMethod(
  8041. $core.method({
  8042. selector: "name",
  8043. protocol: 'accessing',
  8044. fn: function (){
  8045. var self=this;
  8046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8047. return $core.withContext(function($ctx1) {
  8048. //>>excludeEnd("ctx");
  8049. return self.className || nil;
  8050. return self;
  8051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8052. }, function($ctx1) {$ctx1.fill(self,"name",{},$globals.Behavior)});
  8053. //>>excludeEnd("ctx");
  8054. },
  8055. //>>excludeStart("ide", pragmas.excludeIdeData);
  8056. args: [],
  8057. source: "name\x0a\x09<return self.className || nil>",
  8058. referencedClasses: [],
  8059. //>>excludeEnd("ide");
  8060. messageSends: []
  8061. }),
  8062. $globals.Behavior);
  8063. $core.addMethod(
  8064. $core.method({
  8065. selector: "new",
  8066. protocol: 'instance creation',
  8067. fn: function (){
  8068. var self=this;
  8069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8070. return $core.withContext(function($ctx1) {
  8071. //>>excludeEnd("ctx");
  8072. var $1;
  8073. $1=$recv(self._basicNew())._initialize();
  8074. return $1;
  8075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8076. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Behavior)});
  8077. //>>excludeEnd("ctx");
  8078. },
  8079. //>>excludeStart("ide", pragmas.excludeIdeData);
  8080. args: [],
  8081. source: "new\x0a\x09^ self basicNew initialize",
  8082. referencedClasses: [],
  8083. //>>excludeEnd("ide");
  8084. messageSends: ["initialize", "basicNew"]
  8085. }),
  8086. $globals.Behavior);
  8087. $core.addMethod(
  8088. $core.method({
  8089. selector: "organization",
  8090. protocol: 'accessing',
  8091. fn: function (){
  8092. var self=this;
  8093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8094. return $core.withContext(function($ctx1) {
  8095. //>>excludeEnd("ctx");
  8096. var $1;
  8097. $1=self._basicAt_("organization");
  8098. return $1;
  8099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8100. }, function($ctx1) {$ctx1.fill(self,"organization",{},$globals.Behavior)});
  8101. //>>excludeEnd("ctx");
  8102. },
  8103. //>>excludeStart("ide", pragmas.excludeIdeData);
  8104. args: [],
  8105. source: "organization\x0a\x09^ self basicAt: 'organization'",
  8106. referencedClasses: [],
  8107. //>>excludeEnd("ide");
  8108. messageSends: ["basicAt:"]
  8109. }),
  8110. $globals.Behavior);
  8111. $core.addMethod(
  8112. $core.method({
  8113. selector: "ownMethods",
  8114. protocol: 'accessing',
  8115. fn: function (){
  8116. var self=this;
  8117. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  8118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8119. return $core.withContext(function($ctx1) {
  8120. //>>excludeEnd("ctx");
  8121. var $2,$1;
  8122. $1=$recv($recv(self._ownProtocols())._inject_into_($recv($OrderedCollection())._new(),(function(acc,each){
  8123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8124. return $core.withContext(function($ctx2) {
  8125. //>>excludeEnd("ctx");
  8126. return $recv(acc).__comma(self._methodsInProtocol_(each));
  8127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8128. }, function($ctx2) {$ctx2.fillBlock({acc:acc,each:each},$ctx1,1)});
  8129. //>>excludeEnd("ctx");
  8130. })))._sorted_((function(a,b){
  8131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8132. return $core.withContext(function($ctx2) {
  8133. //>>excludeEnd("ctx");
  8134. $2=$recv(a)._selector();
  8135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8136. $ctx2.sendIdx["selector"]=1;
  8137. //>>excludeEnd("ctx");
  8138. return $recv($2).__lt_eq($recv(b)._selector());
  8139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8140. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,2)});
  8141. //>>excludeEnd("ctx");
  8142. }));
  8143. return $1;
  8144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8145. }, function($ctx1) {$ctx1.fill(self,"ownMethods",{},$globals.Behavior)});
  8146. //>>excludeEnd("ctx");
  8147. },
  8148. //>>excludeStart("ide", pragmas.excludeIdeData);
  8149. args: [],
  8150. source: "ownMethods\x0a\x09\x22Answer the methods of the receiver that are not package extensions\x22\x0a\x0a\x09^ (self ownProtocols \x0a\x09\x09inject: OrderedCollection new\x0a\x09\x09into: [ :acc :each | acc, (self methodsInProtocol: each) ])\x0a\x09\x09\x09sorted: [ :a :b | a selector <= b selector ]",
  8151. referencedClasses: ["OrderedCollection"],
  8152. //>>excludeEnd("ide");
  8153. messageSends: ["sorted:", "inject:into:", "ownProtocols", "new", ",", "methodsInProtocol:", "<=", "selector"]
  8154. }),
  8155. $globals.Behavior);
  8156. $core.addMethod(
  8157. $core.method({
  8158. selector: "ownProtocols",
  8159. protocol: 'accessing',
  8160. fn: function (){
  8161. var self=this;
  8162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8163. return $core.withContext(function($ctx1) {
  8164. //>>excludeEnd("ctx");
  8165. var $1;
  8166. $1=$recv(self._protocols())._reject_((function(each){
  8167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8168. return $core.withContext(function($ctx2) {
  8169. //>>excludeEnd("ctx");
  8170. return $recv(each)._match_("^\x5c*");
  8171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8172. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  8173. //>>excludeEnd("ctx");
  8174. }));
  8175. return $1;
  8176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8177. }, function($ctx1) {$ctx1.fill(self,"ownProtocols",{},$globals.Behavior)});
  8178. //>>excludeEnd("ctx");
  8179. },
  8180. //>>excludeStart("ide", pragmas.excludeIdeData);
  8181. args: [],
  8182. source: "ownProtocols\x0a\x09\x22Answer the protocols of the receiver that are not package extensions\x22\x0a\x0a\x09^ self protocols reject: [ :each |\x0a\x09\x09each match: '^\x5c*' ]",
  8183. referencedClasses: [],
  8184. //>>excludeEnd("ide");
  8185. messageSends: ["reject:", "protocols", "match:"]
  8186. }),
  8187. $globals.Behavior);
  8188. $core.addMethod(
  8189. $core.method({
  8190. selector: "protocols",
  8191. protocol: 'accessing',
  8192. fn: function (){
  8193. var self=this;
  8194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8195. return $core.withContext(function($ctx1) {
  8196. //>>excludeEnd("ctx");
  8197. var $1;
  8198. $1=$recv($recv(self._organization())._elements())._sorted();
  8199. return $1;
  8200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8201. }, function($ctx1) {$ctx1.fill(self,"protocols",{},$globals.Behavior)});
  8202. //>>excludeEnd("ctx");
  8203. },
  8204. //>>excludeStart("ide", pragmas.excludeIdeData);
  8205. args: [],
  8206. source: "protocols\x0a\x09^ self organization elements sorted",
  8207. referencedClasses: [],
  8208. //>>excludeEnd("ide");
  8209. messageSends: ["sorted", "elements", "organization"]
  8210. }),
  8211. $globals.Behavior);
  8212. $core.addMethod(
  8213. $core.method({
  8214. selector: "protocolsDo:",
  8215. protocol: 'enumerating',
  8216. fn: function (aBlock){
  8217. var self=this;
  8218. var methodsByProtocol;
  8219. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  8220. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  8221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8222. return $core.withContext(function($ctx1) {
  8223. //>>excludeEnd("ctx");
  8224. methodsByProtocol=$recv($HashedCollection())._new();
  8225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8226. $ctx1.sendIdx["new"]=1;
  8227. //>>excludeEnd("ctx");
  8228. $recv(self._methodDictionary())._valuesDo_((function(m){
  8229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8230. return $core.withContext(function($ctx2) {
  8231. //>>excludeEnd("ctx");
  8232. return $recv($recv(methodsByProtocol)._at_ifAbsentPut_($recv(m)._protocol(),(function(){
  8233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8234. return $core.withContext(function($ctx3) {
  8235. //>>excludeEnd("ctx");
  8236. return $recv($Array())._new();
  8237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8238. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  8239. //>>excludeEnd("ctx");
  8240. })))._add_(m);
  8241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8242. }, function($ctx2) {$ctx2.fillBlock({m:m},$ctx1,1)});
  8243. //>>excludeEnd("ctx");
  8244. }));
  8245. $recv(self._protocols())._do_((function(protocol){
  8246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8247. return $core.withContext(function($ctx2) {
  8248. //>>excludeEnd("ctx");
  8249. return $recv(aBlock)._value_value_(protocol,$recv(methodsByProtocol)._at_(protocol));
  8250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8251. }, function($ctx2) {$ctx2.fillBlock({protocol:protocol},$ctx1,3)});
  8252. //>>excludeEnd("ctx");
  8253. }));
  8254. return self;
  8255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8256. }, function($ctx1) {$ctx1.fill(self,"protocolsDo:",{aBlock:aBlock,methodsByProtocol:methodsByProtocol},$globals.Behavior)});
  8257. //>>excludeEnd("ctx");
  8258. },
  8259. //>>excludeStart("ide", pragmas.excludeIdeData);
  8260. args: ["aBlock"],
  8261. source: "protocolsDo: aBlock\x0a\x09\x22Execute aBlock for each method protocol with\x0a\x09its collection of methods in the sort order of protocol name.\x22\x0a\x0a\x09| methodsByProtocol |\x0a\x09methodsByProtocol := HashedCollection new.\x0a\x09self methodDictionary valuesDo: [ :m |\x0a\x09\x09(methodsByProtocol at: m protocol ifAbsentPut: [ Array new ])\x0a\x09\x09\x09add: m ].\x0a\x09self protocols do: [ :protocol |\x0a\x09\x09aBlock value: protocol value: (methodsByProtocol at: protocol) ]",
  8262. referencedClasses: ["HashedCollection", "Array"],
  8263. //>>excludeEnd("ide");
  8264. messageSends: ["new", "valuesDo:", "methodDictionary", "add:", "at:ifAbsentPut:", "protocol", "do:", "protocols", "value:value:", "at:"]
  8265. }),
  8266. $globals.Behavior);
  8267. $core.addMethod(
  8268. $core.method({
  8269. selector: "prototype",
  8270. protocol: 'accessing',
  8271. fn: function (){
  8272. var self=this;
  8273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8274. return $core.withContext(function($ctx1) {
  8275. //>>excludeEnd("ctx");
  8276. return self.fn.prototype;
  8277. return self;
  8278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8279. }, function($ctx1) {$ctx1.fill(self,"prototype",{},$globals.Behavior)});
  8280. //>>excludeEnd("ctx");
  8281. },
  8282. //>>excludeStart("ide", pragmas.excludeIdeData);
  8283. args: [],
  8284. source: "prototype\x0a\x09<return self.fn.prototype>",
  8285. referencedClasses: [],
  8286. //>>excludeEnd("ide");
  8287. messageSends: []
  8288. }),
  8289. $globals.Behavior);
  8290. $core.addMethod(
  8291. $core.method({
  8292. selector: "recompile",
  8293. protocol: 'compiling',
  8294. fn: function (){
  8295. var self=this;
  8296. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  8297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8298. return $core.withContext(function($ctx1) {
  8299. //>>excludeEnd("ctx");
  8300. var $1;
  8301. $1=$recv($recv($Compiler())._new())._recompile_(self);
  8302. return $1;
  8303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8304. }, function($ctx1) {$ctx1.fill(self,"recompile",{},$globals.Behavior)});
  8305. //>>excludeEnd("ctx");
  8306. },
  8307. //>>excludeStart("ide", pragmas.excludeIdeData);
  8308. args: [],
  8309. source: "recompile\x0a\x09^ Compiler new recompile: self",
  8310. referencedClasses: ["Compiler"],
  8311. //>>excludeEnd("ide");
  8312. messageSends: ["recompile:", "new"]
  8313. }),
  8314. $globals.Behavior);
  8315. $core.addMethod(
  8316. $core.method({
  8317. selector: "removeCompiledMethod:",
  8318. protocol: 'compiling',
  8319. fn: function (aMethod){
  8320. var self=this;
  8321. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  8322. function $MethodRemoved(){return $globals.MethodRemoved||(typeof MethodRemoved=="undefined"?nil:MethodRemoved)}
  8323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8324. return $core.withContext(function($ctx1) {
  8325. //>>excludeEnd("ctx");
  8326. var $1,$2;
  8327. self._basicRemoveCompiledMethod_(aMethod);
  8328. self._removeProtocolIfEmpty_($recv(aMethod)._protocol());
  8329. $1=$recv($MethodRemoved())._new();
  8330. $recv($1)._method_(aMethod);
  8331. $2=$recv($1)._yourself();
  8332. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  8333. return self;
  8334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8335. }, function($ctx1) {$ctx1.fill(self,"removeCompiledMethod:",{aMethod:aMethod},$globals.Behavior)});
  8336. //>>excludeEnd("ctx");
  8337. },
  8338. //>>excludeStart("ide", pragmas.excludeIdeData);
  8339. args: ["aMethod"],
  8340. source: "removeCompiledMethod: aMethod\x0a\x09self basicRemoveCompiledMethod: aMethod.\x0a\x09\x0a\x09self removeProtocolIfEmpty: aMethod protocol.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (MethodRemoved new\x0a\x09\x09\x09method: aMethod;\x0a\x09\x09\x09yourself)",
  8341. referencedClasses: ["SystemAnnouncer", "MethodRemoved"],
  8342. //>>excludeEnd("ide");
  8343. messageSends: ["basicRemoveCompiledMethod:", "removeProtocolIfEmpty:", "protocol", "announce:", "current", "method:", "new", "yourself"]
  8344. }),
  8345. $globals.Behavior);
  8346. $core.addMethod(
  8347. $core.method({
  8348. selector: "removeProtocolIfEmpty:",
  8349. protocol: 'accessing',
  8350. fn: function (aString){
  8351. var self=this;
  8352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8353. return $core.withContext(function($ctx1) {
  8354. //>>excludeEnd("ctx");
  8355. $recv(self._methods())._detect_ifNone_((function(each){
  8356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8357. return $core.withContext(function($ctx2) {
  8358. //>>excludeEnd("ctx");
  8359. return $recv($recv(each)._protocol()).__eq(aString);
  8360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8361. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  8362. //>>excludeEnd("ctx");
  8363. }),(function(){
  8364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8365. return $core.withContext(function($ctx2) {
  8366. //>>excludeEnd("ctx");
  8367. return $recv(self._organization())._removeElement_(aString);
  8368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8369. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  8370. //>>excludeEnd("ctx");
  8371. }));
  8372. return self;
  8373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8374. }, function($ctx1) {$ctx1.fill(self,"removeProtocolIfEmpty:",{aString:aString},$globals.Behavior)});
  8375. //>>excludeEnd("ctx");
  8376. },
  8377. //>>excludeStart("ide", pragmas.excludeIdeData);
  8378. args: ["aString"],
  8379. source: "removeProtocolIfEmpty: aString\x0a\x09self methods\x0a\x09\x09detect: [ :each | each protocol = aString ]\x0a\x09\x09ifNone: [ self organization removeElement: aString ]",
  8380. referencedClasses: [],
  8381. //>>excludeEnd("ide");
  8382. messageSends: ["detect:ifNone:", "methods", "=", "protocol", "removeElement:", "organization"]
  8383. }),
  8384. $globals.Behavior);
  8385. $core.addMethod(
  8386. $core.method({
  8387. selector: "selectors",
  8388. protocol: 'accessing',
  8389. fn: function (){
  8390. var self=this;
  8391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8392. return $core.withContext(function($ctx1) {
  8393. //>>excludeEnd("ctx");
  8394. var $1;
  8395. $1=$recv(self._methodDictionary())._keys();
  8396. return $1;
  8397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8398. }, function($ctx1) {$ctx1.fill(self,"selectors",{},$globals.Behavior)});
  8399. //>>excludeEnd("ctx");
  8400. },
  8401. //>>excludeStart("ide", pragmas.excludeIdeData);
  8402. args: [],
  8403. source: "selectors\x0a\x09^ self methodDictionary keys",
  8404. referencedClasses: [],
  8405. //>>excludeEnd("ide");
  8406. messageSends: ["keys", "methodDictionary"]
  8407. }),
  8408. $globals.Behavior);
  8409. $core.addMethod(
  8410. $core.method({
  8411. selector: "subclasses",
  8412. protocol: 'accessing',
  8413. fn: function (){
  8414. var self=this;
  8415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8416. return $core.withContext(function($ctx1) {
  8417. //>>excludeEnd("ctx");
  8418. self._subclassResponsibility();
  8419. return self;
  8420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8421. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Behavior)});
  8422. //>>excludeEnd("ctx");
  8423. },
  8424. //>>excludeStart("ide", pragmas.excludeIdeData);
  8425. args: [],
  8426. source: "subclasses\x0a\x09self subclassResponsibility",
  8427. referencedClasses: [],
  8428. //>>excludeEnd("ide");
  8429. messageSends: ["subclassResponsibility"]
  8430. }),
  8431. $globals.Behavior);
  8432. $core.addMethod(
  8433. $core.method({
  8434. selector: "superclass",
  8435. protocol: 'accessing',
  8436. fn: function (){
  8437. var self=this;
  8438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8439. return $core.withContext(function($ctx1) {
  8440. //>>excludeEnd("ctx");
  8441. return self.superclass || nil;
  8442. return self;
  8443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8444. }, function($ctx1) {$ctx1.fill(self,"superclass",{},$globals.Behavior)});
  8445. //>>excludeEnd("ctx");
  8446. },
  8447. //>>excludeStart("ide", pragmas.excludeIdeData);
  8448. args: [],
  8449. source: "superclass\x0a\x09<return self.superclass || nil>",
  8450. referencedClasses: [],
  8451. //>>excludeEnd("ide");
  8452. messageSends: []
  8453. }),
  8454. $globals.Behavior);
  8455. $core.addMethod(
  8456. $core.method({
  8457. selector: "theMetaClass",
  8458. protocol: 'accessing',
  8459. fn: function (){
  8460. var self=this;
  8461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8462. return $core.withContext(function($ctx1) {
  8463. //>>excludeEnd("ctx");
  8464. var $1;
  8465. $1=self._class();
  8466. return $1;
  8467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8468. }, function($ctx1) {$ctx1.fill(self,"theMetaClass",{},$globals.Behavior)});
  8469. //>>excludeEnd("ctx");
  8470. },
  8471. //>>excludeStart("ide", pragmas.excludeIdeData);
  8472. args: [],
  8473. source: "theMetaClass\x0a\x09^ self class",
  8474. referencedClasses: [],
  8475. //>>excludeEnd("ide");
  8476. messageSends: ["class"]
  8477. }),
  8478. $globals.Behavior);
  8479. $core.addMethod(
  8480. $core.method({
  8481. selector: "theNonMetaClass",
  8482. protocol: 'accessing',
  8483. fn: function (){
  8484. var self=this;
  8485. return self;
  8486. },
  8487. //>>excludeStart("ide", pragmas.excludeIdeData);
  8488. args: [],
  8489. source: "theNonMetaClass\x0a\x09^ self",
  8490. referencedClasses: [],
  8491. //>>excludeEnd("ide");
  8492. messageSends: []
  8493. }),
  8494. $globals.Behavior);
  8495. $core.addMethod(
  8496. $core.method({
  8497. selector: "withAllSubclasses",
  8498. protocol: 'accessing',
  8499. fn: function (){
  8500. var self=this;
  8501. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  8502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8503. return $core.withContext(function($ctx1) {
  8504. //>>excludeEnd("ctx");
  8505. var $2,$3,$1;
  8506. $2=$recv($Array())._with_(self);
  8507. $recv($2)._addAll_(self._allSubclasses());
  8508. $3=$recv($2)._yourself();
  8509. $1=$3;
  8510. return $1;
  8511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8512. }, function($ctx1) {$ctx1.fill(self,"withAllSubclasses",{},$globals.Behavior)});
  8513. //>>excludeEnd("ctx");
  8514. },
  8515. //>>excludeStart("ide", pragmas.excludeIdeData);
  8516. args: [],
  8517. source: "withAllSubclasses\x0a\x09^ (Array with: self) addAll: self allSubclasses; yourself",
  8518. referencedClasses: ["Array"],
  8519. //>>excludeEnd("ide");
  8520. messageSends: ["addAll:", "with:", "allSubclasses", "yourself"]
  8521. }),
  8522. $globals.Behavior);
  8523. $core.addClass('Class', $globals.Behavior, [], 'Kernel-Classes');
  8524. //>>excludeStart("ide", pragmas.excludeIdeData);
  8525. $globals.Class.comment="I am __the__ class object.\x0a\x0aMy instances are the classes of the system.\x0aClass creation is done throught a `ClassBuilder` instance.";
  8526. //>>excludeEnd("ide");
  8527. $core.addMethod(
  8528. $core.method({
  8529. selector: "asJavascript",
  8530. protocol: 'converting',
  8531. fn: function (){
  8532. var self=this;
  8533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8534. return $core.withContext(function($ctx1) {
  8535. //>>excludeEnd("ctx");
  8536. var $1;
  8537. $1="$globals.".__comma(self._name());
  8538. return $1;
  8539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8540. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Class)});
  8541. //>>excludeEnd("ctx");
  8542. },
  8543. //>>excludeStart("ide", pragmas.excludeIdeData);
  8544. args: [],
  8545. source: "asJavascript\x0a\x09^ '$globals.', self name",
  8546. referencedClasses: [],
  8547. //>>excludeEnd("ide");
  8548. messageSends: [",", "name"]
  8549. }),
  8550. $globals.Class);
  8551. $core.addMethod(
  8552. $core.method({
  8553. selector: "browse",
  8554. protocol: 'browsing',
  8555. fn: function (){
  8556. var self=this;
  8557. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  8558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8559. return $core.withContext(function($ctx1) {
  8560. //>>excludeEnd("ctx");
  8561. $recv($Finder())._findClass_(self);
  8562. return self;
  8563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8564. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.Class)});
  8565. //>>excludeEnd("ctx");
  8566. },
  8567. //>>excludeStart("ide", pragmas.excludeIdeData);
  8568. args: [],
  8569. source: "browse\x0a\x09Finder findClass: self",
  8570. referencedClasses: ["Finder"],
  8571. //>>excludeEnd("ide");
  8572. messageSends: ["findClass:"]
  8573. }),
  8574. $globals.Class);
  8575. $core.addMethod(
  8576. $core.method({
  8577. selector: "category",
  8578. protocol: 'accessing',
  8579. fn: function (){
  8580. var self=this;
  8581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8582. return $core.withContext(function($ctx1) {
  8583. //>>excludeEnd("ctx");
  8584. var $2,$1,$receiver;
  8585. $2=self._package();
  8586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8587. $ctx1.sendIdx["package"]=1;
  8588. //>>excludeEnd("ctx");
  8589. if(($receiver = $2) == null || $receiver.isNil){
  8590. $1="Unclassified";
  8591. } else {
  8592. $1=$recv(self._package())._name();
  8593. };
  8594. return $1;
  8595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8596. }, function($ctx1) {$ctx1.fill(self,"category",{},$globals.Class)});
  8597. //>>excludeEnd("ctx");
  8598. },
  8599. //>>excludeStart("ide", pragmas.excludeIdeData);
  8600. args: [],
  8601. source: "category\x0a\x09^ self package ifNil: [ 'Unclassified' ] ifNotNil: [ self package name ]",
  8602. referencedClasses: [],
  8603. //>>excludeEnd("ide");
  8604. messageSends: ["ifNil:ifNotNil:", "package", "name"]
  8605. }),
  8606. $globals.Class);
  8607. $core.addMethod(
  8608. $core.method({
  8609. selector: "definition",
  8610. protocol: 'accessing',
  8611. fn: function (){
  8612. var self=this;
  8613. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  8614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8615. return $core.withContext(function($ctx1) {
  8616. //>>excludeEnd("ctx");
  8617. var $3,$4,$2,$5,$6,$7,$1;
  8618. $1=$recv($String())._streamContents_((function(stream){
  8619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8620. return $core.withContext(function($ctx2) {
  8621. //>>excludeEnd("ctx");
  8622. $recv(stream)._nextPutAll_($recv(self._superclass())._asString());
  8623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8624. $ctx2.sendIdx["nextPutAll:"]=1;
  8625. //>>excludeEnd("ctx");
  8626. $recv(stream)._nextPutAll_(" subclass: #");
  8627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8628. $ctx2.sendIdx["nextPutAll:"]=2;
  8629. //>>excludeEnd("ctx");
  8630. $recv(stream)._nextPutAll_(self._name());
  8631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8632. $ctx2.sendIdx["nextPutAll:"]=3;
  8633. //>>excludeEnd("ctx");
  8634. $3=$recv($String())._lf();
  8635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8636. $ctx2.sendIdx["lf"]=1;
  8637. //>>excludeEnd("ctx");
  8638. $4=$recv($String())._tab();
  8639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8640. $ctx2.sendIdx["tab"]=1;
  8641. //>>excludeEnd("ctx");
  8642. $2=$recv($3).__comma($4);
  8643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8644. $ctx2.sendIdx[","]=1;
  8645. //>>excludeEnd("ctx");
  8646. $recv(stream)._nextPutAll_($2);
  8647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8648. $ctx2.sendIdx["nextPutAll:"]=4;
  8649. //>>excludeEnd("ctx");
  8650. $5=$recv(stream)._nextPutAll_("instanceVariableNames: '");
  8651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8652. $ctx2.sendIdx["nextPutAll:"]=5;
  8653. //>>excludeEnd("ctx");
  8654. $5;
  8655. $recv(self._instanceVariableNames())._do_separatedBy_((function(each){
  8656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8657. return $core.withContext(function($ctx3) {
  8658. //>>excludeEnd("ctx");
  8659. return $recv(stream)._nextPutAll_(each);
  8660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8661. $ctx3.sendIdx["nextPutAll:"]=6;
  8662. //>>excludeEnd("ctx");
  8663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8664. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  8665. //>>excludeEnd("ctx");
  8666. }),(function(){
  8667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8668. return $core.withContext(function($ctx3) {
  8669. //>>excludeEnd("ctx");
  8670. return $recv(stream)._nextPutAll_(" ");
  8671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8672. $ctx3.sendIdx["nextPutAll:"]=7;
  8673. //>>excludeEnd("ctx");
  8674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8675. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  8676. //>>excludeEnd("ctx");
  8677. }));
  8678. $6=$recv("'".__comma($recv($String())._lf())).__comma($recv($String())._tab());
  8679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8680. $ctx2.sendIdx[","]=2;
  8681. //>>excludeEnd("ctx");
  8682. $recv(stream)._nextPutAll_($6);
  8683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8684. $ctx2.sendIdx["nextPutAll:"]=8;
  8685. //>>excludeEnd("ctx");
  8686. $recv(stream)._nextPutAll_("package: '");
  8687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8688. $ctx2.sendIdx["nextPutAll:"]=9;
  8689. //>>excludeEnd("ctx");
  8690. $recv(stream)._nextPutAll_(self._category());
  8691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8692. $ctx2.sendIdx["nextPutAll:"]=10;
  8693. //>>excludeEnd("ctx");
  8694. $7=$recv(stream)._nextPutAll_("'");
  8695. return $7;
  8696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8697. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  8698. //>>excludeEnd("ctx");
  8699. }));
  8700. return $1;
  8701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8702. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Class)});
  8703. //>>excludeEnd("ctx");
  8704. },
  8705. //>>excludeStart("ide", pragmas.excludeIdeData);
  8706. args: [],
  8707. source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream\x0a\x09\x09\x09nextPutAll: self superclass asString;\x0a\x09\x09\x09nextPutAll: ' subclass: #';\x0a\x09\x09\x09nextPutAll: self name;\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'instanceVariableNames: '''.\x0a\x09\x09self instanceVariableNames\x0a\x09\x09\x09do: [ :each | stream nextPutAll: each ]\x0a\x09\x09\x09separatedBy: [ stream nextPutAll: ' ' ].\x0a\x09\x09stream\x0a\x09\x09\x09nextPutAll: '''', String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'package: ''';\x0a\x09\x09\x09nextPutAll: self category;\x0a\x09\x09\x09nextPutAll: '''' ]",
  8708. referencedClasses: ["String"],
  8709. //>>excludeEnd("ide");
  8710. messageSends: ["streamContents:", "nextPutAll:", "asString", "superclass", "name", ",", "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category"]
  8711. }),
  8712. $globals.Class);
  8713. $core.addMethod(
  8714. $core.method({
  8715. selector: "heliosClass",
  8716. protocol: 'accessing',
  8717. fn: function (){
  8718. var self=this;
  8719. return "class";
  8720. },
  8721. //>>excludeStart("ide", pragmas.excludeIdeData);
  8722. args: [],
  8723. source: "heliosClass\x0a\x09\x22Should be an Helios extension. Unfortunately, since helios can browse remote\x0a\x09environments, we can't extend base classes\x22\x0a\x09\x0a\x09^ 'class'",
  8724. referencedClasses: [],
  8725. //>>excludeEnd("ide");
  8726. messageSends: []
  8727. }),
  8728. $globals.Class);
  8729. $core.addMethod(
  8730. $core.method({
  8731. selector: "isClass",
  8732. protocol: 'testing',
  8733. fn: function (){
  8734. var self=this;
  8735. return true;
  8736. },
  8737. //>>excludeStart("ide", pragmas.excludeIdeData);
  8738. args: [],
  8739. source: "isClass\x0a\x09^ true",
  8740. referencedClasses: [],
  8741. //>>excludeEnd("ide");
  8742. messageSends: []
  8743. }),
  8744. $globals.Class);
  8745. $core.addMethod(
  8746. $core.method({
  8747. selector: "package",
  8748. protocol: 'accessing',
  8749. fn: function (){
  8750. var self=this;
  8751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8752. return $core.withContext(function($ctx1) {
  8753. //>>excludeEnd("ctx");
  8754. var $1;
  8755. $1=self._basicAt_("pkg");
  8756. return $1;
  8757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8758. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.Class)});
  8759. //>>excludeEnd("ctx");
  8760. },
  8761. //>>excludeStart("ide", pragmas.excludeIdeData);
  8762. args: [],
  8763. source: "package\x0a\x09^ self basicAt: 'pkg'",
  8764. referencedClasses: [],
  8765. //>>excludeEnd("ide");
  8766. messageSends: ["basicAt:"]
  8767. }),
  8768. $globals.Class);
  8769. $core.addMethod(
  8770. $core.method({
  8771. selector: "package:",
  8772. protocol: 'accessing',
  8773. fn: function (aPackage){
  8774. var self=this;
  8775. var oldPackage;
  8776. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  8777. function $ClassMoved(){return $globals.ClassMoved||(typeof ClassMoved=="undefined"?nil:ClassMoved)}
  8778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8779. return $core.withContext(function($ctx1) {
  8780. //>>excludeEnd("ctx");
  8781. var $2,$1,$3,$4,$5;
  8782. $2=self._package();
  8783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8784. $ctx1.sendIdx["package"]=1;
  8785. //>>excludeEnd("ctx");
  8786. $1=$recv($2).__eq(aPackage);
  8787. if($core.assert($1)){
  8788. return self;
  8789. };
  8790. oldPackage=self._package();
  8791. self._basicAt_put_("pkg",aPackage);
  8792. $3=$recv(oldPackage)._organization();
  8793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8794. $ctx1.sendIdx["organization"]=1;
  8795. //>>excludeEnd("ctx");
  8796. $recv($3)._removeElement_(self);
  8797. $recv($recv(aPackage)._organization())._addElement_(self);
  8798. $4=$recv($ClassMoved())._new();
  8799. $recv($4)._theClass_(self);
  8800. $recv($4)._oldPackage_(oldPackage);
  8801. $5=$recv($4)._yourself();
  8802. $recv($recv($SystemAnnouncer())._current())._announce_($5);
  8803. return self;
  8804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8805. }, function($ctx1) {$ctx1.fill(self,"package:",{aPackage:aPackage,oldPackage:oldPackage},$globals.Class)});
  8806. //>>excludeEnd("ctx");
  8807. },
  8808. //>>excludeStart("ide", pragmas.excludeIdeData);
  8809. args: ["aPackage"],
  8810. source: "package: aPackage\x0a\x09| oldPackage |\x0a\x09\x0a\x09self package = aPackage ifTrue: [ ^ self ].\x0a\x09\x0a\x09oldPackage := self package.\x0a\x09\x0a\x09self basicAt: 'pkg' put: aPackage.\x0a\x09oldPackage organization removeElement: self.\x0a\x09aPackage organization addElement: self.\x0a\x0a\x09SystemAnnouncer current announce: (ClassMoved new\x0a\x09\x09theClass: self;\x0a\x09\x09oldPackage: oldPackage;\x0a\x09\x09yourself)",
  8811. referencedClasses: ["SystemAnnouncer", "ClassMoved"],
  8812. //>>excludeEnd("ide");
  8813. messageSends: ["ifTrue:", "=", "package", "basicAt:put:", "removeElement:", "organization", "addElement:", "announce:", "current", "theClass:", "new", "oldPackage:", "yourself"]
  8814. }),
  8815. $globals.Class);
  8816. $core.addMethod(
  8817. $core.method({
  8818. selector: "printOn:",
  8819. protocol: 'printing',
  8820. fn: function (aStream){
  8821. var self=this;
  8822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8823. return $core.withContext(function($ctx1) {
  8824. //>>excludeEnd("ctx");
  8825. $recv(aStream)._nextPutAll_(self._name());
  8826. return self;
  8827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8828. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Class)});
  8829. //>>excludeEnd("ctx");
  8830. },
  8831. //>>excludeStart("ide", pragmas.excludeIdeData);
  8832. args: ["aStream"],
  8833. source: "printOn: aStream\x0a\x09aStream nextPutAll: self name",
  8834. referencedClasses: [],
  8835. //>>excludeEnd("ide");
  8836. messageSends: ["nextPutAll:", "name"]
  8837. }),
  8838. $globals.Class);
  8839. $core.addMethod(
  8840. $core.method({
  8841. selector: "rename:",
  8842. protocol: 'accessing',
  8843. fn: function (aString){
  8844. var self=this;
  8845. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  8846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8847. return $core.withContext(function($ctx1) {
  8848. //>>excludeEnd("ctx");
  8849. $recv($recv($ClassBuilder())._new())._renameClass_to_(self,aString);
  8850. return self;
  8851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8852. }, function($ctx1) {$ctx1.fill(self,"rename:",{aString:aString},$globals.Class)});
  8853. //>>excludeEnd("ctx");
  8854. },
  8855. //>>excludeStart("ide", pragmas.excludeIdeData);
  8856. args: ["aString"],
  8857. source: "rename: aString\x0a\x09ClassBuilder new renameClass: self to: aString",
  8858. referencedClasses: ["ClassBuilder"],
  8859. //>>excludeEnd("ide");
  8860. messageSends: ["renameClass:to:", "new"]
  8861. }),
  8862. $globals.Class);
  8863. $core.addMethod(
  8864. $core.method({
  8865. selector: "subclass:instanceVariableNames:",
  8866. protocol: 'class creation',
  8867. fn: function (aString,anotherString){
  8868. var self=this;
  8869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8870. return $core.withContext(function($ctx1) {
  8871. //>>excludeEnd("ctx");
  8872. var $1;
  8873. $1=self._subclass_instanceVariableNames_package_(aString,anotherString,nil);
  8874. return $1;
  8875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8876. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:",{aString:aString,anotherString:anotherString},$globals.Class)});
  8877. //>>excludeEnd("ctx");
  8878. },
  8879. //>>excludeStart("ide", pragmas.excludeIdeData);
  8880. args: ["aString", "anotherString"],
  8881. source: "subclass: aString instanceVariableNames: anotherString\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: anotherString package: nil",
  8882. referencedClasses: [],
  8883. //>>excludeEnd("ide");
  8884. messageSends: ["subclass:instanceVariableNames:package:"]
  8885. }),
  8886. $globals.Class);
  8887. $core.addMethod(
  8888. $core.method({
  8889. selector: "subclass:instanceVariableNames:category:",
  8890. protocol: 'class creation',
  8891. fn: function (aString,aString2,aString3){
  8892. var self=this;
  8893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8894. return $core.withContext(function($ctx1) {
  8895. //>>excludeEnd("ctx");
  8896. var $1;
  8897. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  8898. return $1;
  8899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8900. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:category:",{aString:aString,aString2:aString2,aString3:aString3},$globals.Class)});
  8901. //>>excludeEnd("ctx");
  8902. },
  8903. //>>excludeStart("ide", pragmas.excludeIdeData);
  8904. args: ["aString", "aString2", "aString3"],
  8905. source: "subclass: aString instanceVariableNames: aString2 category: aString3\x0a\x09\x22Kept for file-in compatibility.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  8906. referencedClasses: [],
  8907. //>>excludeEnd("ide");
  8908. messageSends: ["subclass:instanceVariableNames:package:"]
  8909. }),
  8910. $globals.Class);
  8911. $core.addMethod(
  8912. $core.method({
  8913. selector: "subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",
  8914. protocol: 'class creation',
  8915. fn: function (aString,aString2,classVars,pools,aString3){
  8916. var self=this;
  8917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8918. return $core.withContext(function($ctx1) {
  8919. //>>excludeEnd("ctx");
  8920. var $1;
  8921. $1=self._subclass_instanceVariableNames_package_(aString,aString2,aString3);
  8922. return $1;
  8923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8924. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:classVariableNames:poolDictionaries:category:",{aString:aString,aString2:aString2,classVars:classVars,pools:pools,aString3:aString3},$globals.Class)});
  8925. //>>excludeEnd("ctx");
  8926. },
  8927. //>>excludeStart("ide", pragmas.excludeIdeData);
  8928. args: ["aString", "aString2", "classVars", "pools", "aString3"],
  8929. source: "subclass: aString instanceVariableNames: aString2 classVariableNames: classVars poolDictionaries: pools category: aString3\x0a\x09\x22Kept for file-in compatibility. ignores class variables and pools.\x22\x0a\x09^ self subclass: aString instanceVariableNames: aString2 package: aString3",
  8930. referencedClasses: [],
  8931. //>>excludeEnd("ide");
  8932. messageSends: ["subclass:instanceVariableNames:package:"]
  8933. }),
  8934. $globals.Class);
  8935. $core.addMethod(
  8936. $core.method({
  8937. selector: "subclass:instanceVariableNames:package:",
  8938. protocol: 'class creation',
  8939. fn: function (aString,aString2,aString3){
  8940. var self=this;
  8941. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  8942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8943. return $core.withContext(function($ctx1) {
  8944. //>>excludeEnd("ctx");
  8945. var $1;
  8946. $1=$recv($recv($ClassBuilder())._new())._superclass_subclass_instanceVariableNames_package_(self,$recv(aString)._asString(),aString2,aString3);
  8947. return $1;
  8948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8949. }, function($ctx1) {$ctx1.fill(self,"subclass:instanceVariableNames:package:",{aString:aString,aString2:aString2,aString3:aString3},$globals.Class)});
  8950. //>>excludeEnd("ctx");
  8951. },
  8952. //>>excludeStart("ide", pragmas.excludeIdeData);
  8953. args: ["aString", "aString2", "aString3"],
  8954. source: "subclass: aString instanceVariableNames: aString2 package: aString3\x0a\x09^ ClassBuilder new\x0a\x09\x09superclass: self subclass: aString asString instanceVariableNames: aString2 package: aString3",
  8955. referencedClasses: ["ClassBuilder"],
  8956. //>>excludeEnd("ide");
  8957. messageSends: ["superclass:subclass:instanceVariableNames:package:", "new", "asString"]
  8958. }),
  8959. $globals.Class);
  8960. $core.addMethod(
  8961. $core.method({
  8962. selector: "subclasses",
  8963. protocol: 'accessing',
  8964. fn: function (){
  8965. var self=this;
  8966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8967. return $core.withContext(function($ctx1) {
  8968. //>>excludeEnd("ctx");
  8969. return self.subclasses._copy();
  8970. return self;
  8971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8972. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Class)});
  8973. //>>excludeEnd("ctx");
  8974. },
  8975. //>>excludeStart("ide", pragmas.excludeIdeData);
  8976. args: [],
  8977. source: "subclasses\x0a\x09<return self.subclasses._copy()>",
  8978. referencedClasses: [],
  8979. //>>excludeEnd("ide");
  8980. messageSends: []
  8981. }),
  8982. $globals.Class);
  8983. $core.addClass('Metaclass', $globals.Behavior, [], 'Kernel-Classes');
  8984. //>>excludeStart("ide", pragmas.excludeIdeData);
  8985. $globals.Metaclass.comment="I am the root of the class hierarchy.\x0a\x0aMy instances are metaclasses, one for each real class, and have a single instance, which they hold onto: the class that they are the metaclass of.";
  8986. //>>excludeEnd("ide");
  8987. $core.addMethod(
  8988. $core.method({
  8989. selector: "asJavascript",
  8990. protocol: 'converting',
  8991. fn: function (){
  8992. var self=this;
  8993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8994. return $core.withContext(function($ctx1) {
  8995. //>>excludeEnd("ctx");
  8996. var $1;
  8997. $1=$recv("$globals.".__comma($recv(self._instanceClass())._name())).__comma(".klass");
  8998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  8999. $ctx1.sendIdx[","]=1;
  9000. //>>excludeEnd("ctx");
  9001. return $1;
  9002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9003. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Metaclass)});
  9004. //>>excludeEnd("ctx");
  9005. },
  9006. //>>excludeStart("ide", pragmas.excludeIdeData);
  9007. args: [],
  9008. source: "asJavascript\x0a\x09^ '$globals.', self instanceClass name, '.klass'",
  9009. referencedClasses: [],
  9010. //>>excludeEnd("ide");
  9011. messageSends: [",", "name", "instanceClass"]
  9012. }),
  9013. $globals.Metaclass);
  9014. $core.addMethod(
  9015. $core.method({
  9016. selector: "definition",
  9017. protocol: 'accessing',
  9018. fn: function (){
  9019. var self=this;
  9020. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  9021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9022. return $core.withContext(function($ctx1) {
  9023. //>>excludeEnd("ctx");
  9024. var $2,$1;
  9025. $1=$recv($String())._streamContents_((function(stream){
  9026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9027. return $core.withContext(function($ctx2) {
  9028. //>>excludeEnd("ctx");
  9029. $recv(stream)._nextPutAll_(self._asString());
  9030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9031. $ctx2.sendIdx["nextPutAll:"]=1;
  9032. //>>excludeEnd("ctx");
  9033. $2=$recv(stream)._nextPutAll_(" instanceVariableNames: '");
  9034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9035. $ctx2.sendIdx["nextPutAll:"]=2;
  9036. //>>excludeEnd("ctx");
  9037. $2;
  9038. $recv(self._instanceVariableNames())._do_separatedBy_((function(each){
  9039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9040. return $core.withContext(function($ctx3) {
  9041. //>>excludeEnd("ctx");
  9042. return $recv(stream)._nextPutAll_(each);
  9043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9044. $ctx3.sendIdx["nextPutAll:"]=3;
  9045. //>>excludeEnd("ctx");
  9046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9047. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  9048. //>>excludeEnd("ctx");
  9049. }),(function(){
  9050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9051. return $core.withContext(function($ctx3) {
  9052. //>>excludeEnd("ctx");
  9053. return $recv(stream)._nextPutAll_(" ");
  9054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9055. $ctx3.sendIdx["nextPutAll:"]=4;
  9056. //>>excludeEnd("ctx");
  9057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9058. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  9059. //>>excludeEnd("ctx");
  9060. }));
  9061. return $recv(stream)._nextPutAll_("'");
  9062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9063. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  9064. //>>excludeEnd("ctx");
  9065. }));
  9066. return $1;
  9067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9068. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Metaclass)});
  9069. //>>excludeEnd("ctx");
  9070. },
  9071. //>>excludeStart("ide", pragmas.excludeIdeData);
  9072. args: [],
  9073. source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream\x0a\x09\x09\x09nextPutAll: self asString;\x0a\x09\x09\x09nextPutAll: ' instanceVariableNames: '''.\x0a\x09\x09self instanceVariableNames\x0a\x09\x09\x09do: [ :each | stream nextPutAll: each ]\x0a\x09\x09\x09separatedBy: [ stream nextPutAll: ' ' ].\x0a\x09\x09stream nextPutAll: '''' ]",
  9074. referencedClasses: ["String"],
  9075. //>>excludeEnd("ide");
  9076. messageSends: ["streamContents:", "nextPutAll:", "asString", "do:separatedBy:", "instanceVariableNames"]
  9077. }),
  9078. $globals.Metaclass);
  9079. $core.addMethod(
  9080. $core.method({
  9081. selector: "instanceClass",
  9082. protocol: 'accessing',
  9083. fn: function (){
  9084. var self=this;
  9085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9086. return $core.withContext(function($ctx1) {
  9087. //>>excludeEnd("ctx");
  9088. return self.instanceClass;
  9089. return self;
  9090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9091. }, function($ctx1) {$ctx1.fill(self,"instanceClass",{},$globals.Metaclass)});
  9092. //>>excludeEnd("ctx");
  9093. },
  9094. //>>excludeStart("ide", pragmas.excludeIdeData);
  9095. args: [],
  9096. source: "instanceClass\x0a\x09<return self.instanceClass>",
  9097. referencedClasses: [],
  9098. //>>excludeEnd("ide");
  9099. messageSends: []
  9100. }),
  9101. $globals.Metaclass);
  9102. $core.addMethod(
  9103. $core.method({
  9104. selector: "instanceVariableNames:",
  9105. protocol: 'accessing',
  9106. fn: function (aCollection){
  9107. var self=this;
  9108. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  9109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9110. return $core.withContext(function($ctx1) {
  9111. //>>excludeEnd("ctx");
  9112. $recv($recv($ClassBuilder())._new())._class_instanceVariableNames_(self,aCollection);
  9113. return self;
  9114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9115. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNames:",{aCollection:aCollection},$globals.Metaclass)});
  9116. //>>excludeEnd("ctx");
  9117. },
  9118. //>>excludeStart("ide", pragmas.excludeIdeData);
  9119. args: ["aCollection"],
  9120. source: "instanceVariableNames: aCollection\x0a\x09ClassBuilder new\x0a\x09\x09class: self instanceVariableNames: aCollection",
  9121. referencedClasses: ["ClassBuilder"],
  9122. //>>excludeEnd("ide");
  9123. messageSends: ["class:instanceVariableNames:", "new"]
  9124. }),
  9125. $globals.Metaclass);
  9126. $core.addMethod(
  9127. $core.method({
  9128. selector: "isMetaclass",
  9129. protocol: 'testing',
  9130. fn: function (){
  9131. var self=this;
  9132. return true;
  9133. },
  9134. //>>excludeStart("ide", pragmas.excludeIdeData);
  9135. args: [],
  9136. source: "isMetaclass\x0a\x09^ true",
  9137. referencedClasses: [],
  9138. //>>excludeEnd("ide");
  9139. messageSends: []
  9140. }),
  9141. $globals.Metaclass);
  9142. $core.addMethod(
  9143. $core.method({
  9144. selector: "package",
  9145. protocol: 'accessing',
  9146. fn: function (){
  9147. var self=this;
  9148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9149. return $core.withContext(function($ctx1) {
  9150. //>>excludeEnd("ctx");
  9151. var $1;
  9152. $1=$recv(self._instanceClass())._package();
  9153. return $1;
  9154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9155. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.Metaclass)});
  9156. //>>excludeEnd("ctx");
  9157. },
  9158. //>>excludeStart("ide", pragmas.excludeIdeData);
  9159. args: [],
  9160. source: "package\x0a\x09^ self instanceClass package",
  9161. referencedClasses: [],
  9162. //>>excludeEnd("ide");
  9163. messageSends: ["package", "instanceClass"]
  9164. }),
  9165. $globals.Metaclass);
  9166. $core.addMethod(
  9167. $core.method({
  9168. selector: "printOn:",
  9169. protocol: 'printing',
  9170. fn: function (aStream){
  9171. var self=this;
  9172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9173. return $core.withContext(function($ctx1) {
  9174. //>>excludeEnd("ctx");
  9175. var $1;
  9176. $recv(aStream)._nextPutAll_($recv(self._instanceClass())._name());
  9177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9178. $ctx1.sendIdx["nextPutAll:"]=1;
  9179. //>>excludeEnd("ctx");
  9180. $1=$recv(aStream)._nextPutAll_(" class");
  9181. return self;
  9182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9183. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Metaclass)});
  9184. //>>excludeEnd("ctx");
  9185. },
  9186. //>>excludeStart("ide", pragmas.excludeIdeData);
  9187. args: ["aStream"],
  9188. source: "printOn: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: self instanceClass name;\x0a\x09\x09nextPutAll: ' class'",
  9189. referencedClasses: [],
  9190. //>>excludeEnd("ide");
  9191. messageSends: ["nextPutAll:", "name", "instanceClass"]
  9192. }),
  9193. $globals.Metaclass);
  9194. $core.addMethod(
  9195. $core.method({
  9196. selector: "subclasses",
  9197. protocol: 'accessing',
  9198. fn: function (){
  9199. var self=this;
  9200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9201. return $core.withContext(function($ctx1) {
  9202. //>>excludeEnd("ctx");
  9203. var $1;
  9204. $1=$recv($recv($recv(self._instanceClass())._subclasses())._select_((function(each){
  9205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9206. return $core.withContext(function($ctx2) {
  9207. //>>excludeEnd("ctx");
  9208. return $recv($recv(each)._isMetaclass())._not();
  9209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9210. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9211. //>>excludeEnd("ctx");
  9212. })))._collect_((function(each){
  9213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9214. return $core.withContext(function($ctx2) {
  9215. //>>excludeEnd("ctx");
  9216. return $recv(each)._theMetaClass();
  9217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9218. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  9219. //>>excludeEnd("ctx");
  9220. }));
  9221. return $1;
  9222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9223. }, function($ctx1) {$ctx1.fill(self,"subclasses",{},$globals.Metaclass)});
  9224. //>>excludeEnd("ctx");
  9225. },
  9226. //>>excludeStart("ide", pragmas.excludeIdeData);
  9227. args: [],
  9228. source: "subclasses\x0a\x09^ (self instanceClass subclasses \x0a\x09\x09select: [ :each | each isMetaclass not ])\x0a\x09\x09collect: [ :each | each theMetaClass ]",
  9229. referencedClasses: [],
  9230. //>>excludeEnd("ide");
  9231. messageSends: ["collect:", "select:", "subclasses", "instanceClass", "not", "isMetaclass", "theMetaClass"]
  9232. }),
  9233. $globals.Metaclass);
  9234. $core.addMethod(
  9235. $core.method({
  9236. selector: "theMetaClass",
  9237. protocol: 'accessing',
  9238. fn: function (){
  9239. var self=this;
  9240. return self;
  9241. },
  9242. //>>excludeStart("ide", pragmas.excludeIdeData);
  9243. args: [],
  9244. source: "theMetaClass\x0a\x09^ self",
  9245. referencedClasses: [],
  9246. //>>excludeEnd("ide");
  9247. messageSends: []
  9248. }),
  9249. $globals.Metaclass);
  9250. $core.addMethod(
  9251. $core.method({
  9252. selector: "theNonMetaClass",
  9253. protocol: 'accessing',
  9254. fn: function (){
  9255. var self=this;
  9256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9257. return $core.withContext(function($ctx1) {
  9258. //>>excludeEnd("ctx");
  9259. var $1;
  9260. $1=self._instanceClass();
  9261. return $1;
  9262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9263. }, function($ctx1) {$ctx1.fill(self,"theNonMetaClass",{},$globals.Metaclass)});
  9264. //>>excludeEnd("ctx");
  9265. },
  9266. //>>excludeStart("ide", pragmas.excludeIdeData);
  9267. args: [],
  9268. source: "theNonMetaClass\x0a\x09^ self instanceClass",
  9269. referencedClasses: [],
  9270. //>>excludeEnd("ide");
  9271. messageSends: ["instanceClass"]
  9272. }),
  9273. $globals.Metaclass);
  9274. $core.addClass('ClassBuilder', $globals.Object, [], 'Kernel-Classes');
  9275. //>>excludeStart("ide", pragmas.excludeIdeData);
  9276. $globals.ClassBuilder.comment="I am responsible for compiling new classes or modifying existing classes in the system.\x0a\x0aRather than using me directly to compile a class, use `Class >> subclass:instanceVariableNames:package:`.";
  9277. //>>excludeEnd("ide");
  9278. $core.addMethod(
  9279. $core.method({
  9280. selector: "addSubclassOf:named:instanceVariableNames:package:",
  9281. protocol: 'class definition',
  9282. fn: function (aClass,className,aCollection,packageName){
  9283. var self=this;
  9284. var theClass,thePackage;
  9285. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  9286. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  9287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9288. return $core.withContext(function($ctx1) {
  9289. //>>excludeEnd("ctx");
  9290. var $1,$2,$3,$4,$receiver;
  9291. theClass=$recv($recv($Smalltalk())._globals())._at_(className);
  9292. thePackage=$recv($Package())._named_(packageName);
  9293. $1=theClass;
  9294. if(($receiver = $1) == null || $receiver.isNil){
  9295. $1;
  9296. } else {
  9297. $recv(theClass)._package_(thePackage);
  9298. $2=$recv($recv(theClass)._superclass()).__eq_eq(aClass);
  9299. if(!$core.assert($2)){
  9300. $3=self._migrateClassNamed_superclass_instanceVariableNames_package_(className,aClass,aCollection,packageName);
  9301. return $3;
  9302. };
  9303. };
  9304. $4=self._basicAddSubclassOf_named_instanceVariableNames_package_(aClass,className,aCollection,packageName);
  9305. return $4;
  9306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9307. }, function($ctx1) {$ctx1.fill(self,"addSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,className:className,aCollection:aCollection,packageName:packageName,theClass:theClass,thePackage:thePackage},$globals.ClassBuilder)});
  9308. //>>excludeEnd("ctx");
  9309. },
  9310. //>>excludeStart("ide", pragmas.excludeIdeData);
  9311. args: ["aClass", "className", "aCollection", "packageName"],
  9312. source: "addSubclassOf: aClass named: className instanceVariableNames: aCollection package: packageName\x0a\x09| theClass thePackage |\x0a\x09\x0a\x09theClass := Smalltalk globals at: className.\x0a\x09thePackage := Package named: packageName.\x0a\x09\x0a\x09theClass ifNotNil: [\x0a\x09\x09theClass package: thePackage.\x0a\x09\x09theClass superclass == aClass ifFalse: [\x0a\x09\x09\x09^ self\x0a\x09\x09\x09\x09migrateClassNamed: className\x0a\x09\x09\x09\x09superclass: aClass\x0a\x09\x09\x09\x09instanceVariableNames: aCollection\x0a\x09\x09\x09\x09package: packageName ] ].\x0a\x09\x09\x0a\x09^ self\x0a\x09\x09basicAddSubclassOf: aClass\x0a\x09\x09named: className\x0a\x09\x09instanceVariableNames: aCollection\x0a\x09\x09package: packageName",
  9313. referencedClasses: ["Smalltalk", "Package"],
  9314. //>>excludeEnd("ide");
  9315. messageSends: ["at:", "globals", "named:", "ifNotNil:", "package:", "ifFalse:", "==", "superclass", "migrateClassNamed:superclass:instanceVariableNames:package:", "basicAddSubclassOf:named:instanceVariableNames:package:"]
  9316. }),
  9317. $globals.ClassBuilder);
  9318. $core.addMethod(
  9319. $core.method({
  9320. selector: "basicAddSubclassOf:named:instanceVariableNames:package:",
  9321. protocol: 'private',
  9322. fn: function (aClass,aString,aCollection,packageName){
  9323. var self=this;
  9324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9325. return $core.withContext(function($ctx1) {
  9326. //>>excludeEnd("ctx");
  9327. $core.addClass(aString, aClass, aCollection, packageName);
  9328. return $globals[aString]
  9329. ;
  9330. return self;
  9331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9332. }, function($ctx1) {$ctx1.fill(self,"basicAddSubclassOf:named:instanceVariableNames:package:",{aClass:aClass,aString:aString,aCollection:aCollection,packageName:packageName},$globals.ClassBuilder)});
  9333. //>>excludeEnd("ctx");
  9334. },
  9335. //>>excludeStart("ide", pragmas.excludeIdeData);
  9336. args: ["aClass", "aString", "aCollection", "packageName"],
  9337. source: "basicAddSubclassOf: aClass named: aString instanceVariableNames: aCollection package: packageName\x0a\x09<\x0a\x09\x09$core.addClass(aString, aClass, aCollection, packageName);\x0a\x09\x09return $globals[aString]\x0a\x09>",
  9338. referencedClasses: [],
  9339. //>>excludeEnd("ide");
  9340. messageSends: []
  9341. }),
  9342. $globals.ClassBuilder);
  9343. $core.addMethod(
  9344. $core.method({
  9345. selector: "basicClass:instanceVariableNames:",
  9346. protocol: 'private',
  9347. fn: function (aClass,aString){
  9348. var self=this;
  9349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9350. return $core.withContext(function($ctx1) {
  9351. //>>excludeEnd("ctx");
  9352. self._basicClass_instanceVariables_(aClass,self._instanceVariableNamesFor_(aString));
  9353. return self;
  9354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9355. }, function($ctx1) {$ctx1.fill(self,"basicClass:instanceVariableNames:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9356. //>>excludeEnd("ctx");
  9357. },
  9358. //>>excludeStart("ide", pragmas.excludeIdeData);
  9359. args: ["aClass", "aString"],
  9360. source: "basicClass: aClass instanceVariableNames: aString\x0a\x09self basicClass: aClass instanceVariables: (self instanceVariableNamesFor: aString)",
  9361. referencedClasses: [],
  9362. //>>excludeEnd("ide");
  9363. messageSends: ["basicClass:instanceVariables:", "instanceVariableNamesFor:"]
  9364. }),
  9365. $globals.ClassBuilder);
  9366. $core.addMethod(
  9367. $core.method({
  9368. selector: "basicClass:instanceVariables:",
  9369. protocol: 'private',
  9370. fn: function (aClass,aCollection){
  9371. var self=this;
  9372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9373. return $core.withContext(function($ctx1) {
  9374. //>>excludeEnd("ctx");
  9375. var $1;
  9376. $1=$recv(aClass)._isMetaclass();
  9377. if(!$core.assert($1)){
  9378. self._error_($recv($recv(aClass)._name()).__comma(" is not a metaclass"));
  9379. };
  9380. $recv(aClass)._basicAt_put_("iVarNames",aCollection);
  9381. return self;
  9382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9383. }, function($ctx1) {$ctx1.fill(self,"basicClass:instanceVariables:",{aClass:aClass,aCollection:aCollection},$globals.ClassBuilder)});
  9384. //>>excludeEnd("ctx");
  9385. },
  9386. //>>excludeStart("ide", pragmas.excludeIdeData);
  9387. args: ["aClass", "aCollection"],
  9388. source: "basicClass: aClass instanceVariables: aCollection\x0a\x0a\x09aClass isMetaclass ifFalse: [ self error: aClass name, ' is not a metaclass' ].\x0a\x09aClass basicAt: 'iVarNames' put: aCollection",
  9389. referencedClasses: [],
  9390. //>>excludeEnd("ide");
  9391. messageSends: ["ifFalse:", "isMetaclass", "error:", ",", "name", "basicAt:put:"]
  9392. }),
  9393. $globals.ClassBuilder);
  9394. $core.addMethod(
  9395. $core.method({
  9396. selector: "basicRemoveClass:",
  9397. protocol: 'private',
  9398. fn: function (aClass){
  9399. var self=this;
  9400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9401. return $core.withContext(function($ctx1) {
  9402. //>>excludeEnd("ctx");
  9403. $core.removeClass(aClass);
  9404. return self;
  9405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9406. }, function($ctx1) {$ctx1.fill(self,"basicRemoveClass:",{aClass:aClass},$globals.ClassBuilder)});
  9407. //>>excludeEnd("ctx");
  9408. },
  9409. //>>excludeStart("ide", pragmas.excludeIdeData);
  9410. args: ["aClass"],
  9411. source: "basicRemoveClass: aClass\x0a\x09<$core.removeClass(aClass)>",
  9412. referencedClasses: [],
  9413. //>>excludeEnd("ide");
  9414. messageSends: []
  9415. }),
  9416. $globals.ClassBuilder);
  9417. $core.addMethod(
  9418. $core.method({
  9419. selector: "basicRenameClass:to:",
  9420. protocol: 'private',
  9421. fn: function (aClass,aString){
  9422. var self=this;
  9423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9424. return $core.withContext(function($ctx1) {
  9425. //>>excludeEnd("ctx");
  9426. $globals[aString] = aClass;
  9427. delete $globals[aClass.className];
  9428. aClass.className = aString;
  9429. ;
  9430. return self;
  9431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9432. }, function($ctx1) {$ctx1.fill(self,"basicRenameClass:to:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9433. //>>excludeEnd("ctx");
  9434. },
  9435. //>>excludeStart("ide", pragmas.excludeIdeData);
  9436. args: ["aClass", "aString"],
  9437. source: "basicRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09$globals[aString] = aClass;\x0a\x09\x09delete $globals[aClass.className];\x0a\x09\x09aClass.className = aString;\x0a\x09>",
  9438. referencedClasses: [],
  9439. //>>excludeEnd("ide");
  9440. messageSends: []
  9441. }),
  9442. $globals.ClassBuilder);
  9443. $core.addMethod(
  9444. $core.method({
  9445. selector: "basicSwapClassNames:with:",
  9446. protocol: 'private',
  9447. fn: function (aClass,anotherClass){
  9448. var self=this;
  9449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9450. return $core.withContext(function($ctx1) {
  9451. //>>excludeEnd("ctx");
  9452. var tmp = aClass.className;
  9453. aClass.className = anotherClass.className;
  9454. anotherClass.className = tmp;
  9455. ;
  9456. return self;
  9457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9458. }, function($ctx1) {$ctx1.fill(self,"basicSwapClassNames:with:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9459. //>>excludeEnd("ctx");
  9460. },
  9461. //>>excludeStart("ide", pragmas.excludeIdeData);
  9462. args: ["aClass", "anotherClass"],
  9463. source: "basicSwapClassNames: aClass with: anotherClass\x0a\x09<\x0a\x09\x09var tmp = aClass.className;\x0a\x09\x09aClass.className = anotherClass.className;\x0a\x09\x09anotherClass.className = tmp;\x0a\x09>",
  9464. referencedClasses: [],
  9465. //>>excludeEnd("ide");
  9466. messageSends: []
  9467. }),
  9468. $globals.ClassBuilder);
  9469. $core.addMethod(
  9470. $core.method({
  9471. selector: "class:instanceVariableNames:",
  9472. protocol: 'class definition',
  9473. fn: function (aClass,ivarNames){
  9474. var self=this;
  9475. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9476. function $ClassDefinitionChanged(){return $globals.ClassDefinitionChanged||(typeof ClassDefinitionChanged=="undefined"?nil:ClassDefinitionChanged)}
  9477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9478. return $core.withContext(function($ctx1) {
  9479. //>>excludeEnd("ctx");
  9480. var $1,$2;
  9481. self._basicClass_instanceVariableNames_(aClass,ivarNames);
  9482. self._setupClass_(aClass);
  9483. $1=$recv($ClassDefinitionChanged())._new();
  9484. $recv($1)._theClass_(aClass);
  9485. $2=$recv($1)._yourself();
  9486. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9487. return self;
  9488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9489. }, function($ctx1) {$ctx1.fill(self,"class:instanceVariableNames:",{aClass:aClass,ivarNames:ivarNames},$globals.ClassBuilder)});
  9490. //>>excludeEnd("ctx");
  9491. },
  9492. //>>excludeStart("ide", pragmas.excludeIdeData);
  9493. args: ["aClass", "ivarNames"],
  9494. source: "class: aClass instanceVariableNames: ivarNames\x0a\x09self basicClass: aClass instanceVariableNames: ivarNames.\x0a\x09self setupClass: aClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassDefinitionChanged new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
  9495. referencedClasses: ["SystemAnnouncer", "ClassDefinitionChanged"],
  9496. //>>excludeEnd("ide");
  9497. messageSends: ["basicClass:instanceVariableNames:", "setupClass:", "announce:", "current", "theClass:", "new", "yourself"]
  9498. }),
  9499. $globals.ClassBuilder);
  9500. $core.addMethod(
  9501. $core.method({
  9502. selector: "copyClass:named:",
  9503. protocol: 'copying',
  9504. fn: function (aClass,className){
  9505. var self=this;
  9506. var newClass;
  9507. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9508. function $ClassAdded(){return $globals.ClassAdded||(typeof ClassAdded=="undefined"?nil:ClassAdded)}
  9509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9510. return $core.withContext(function($ctx1) {
  9511. //>>excludeEnd("ctx");
  9512. var $1,$2,$3;
  9513. newClass=self._addSubclassOf_named_instanceVariableNames_package_($recv(aClass)._superclass(),className,$recv(aClass)._instanceVariableNames(),$recv($recv(aClass)._package())._name());
  9514. self._copyClass_to_(aClass,newClass);
  9515. $1=$recv($ClassAdded())._new();
  9516. $recv($1)._theClass_(newClass);
  9517. $2=$recv($1)._yourself();
  9518. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9519. $3=newClass;
  9520. return $3;
  9521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9522. }, function($ctx1) {$ctx1.fill(self,"copyClass:named:",{aClass:aClass,className:className,newClass:newClass},$globals.ClassBuilder)});
  9523. //>>excludeEnd("ctx");
  9524. },
  9525. //>>excludeStart("ide", pragmas.excludeIdeData);
  9526. args: ["aClass", "className"],
  9527. source: "copyClass: aClass named: className\x0a\x09| newClass |\x0a\x0a\x09newClass := self\x0a\x09\x09addSubclassOf: aClass superclass\x0a\x09\x09named: className\x0a\x09\x09instanceVariableNames: aClass instanceVariableNames\x0a\x09\x09package: aClass package name.\x0a\x0a\x09self copyClass: aClass to: newClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassAdded new\x0a\x09\x09\x09theClass: newClass;\x0a\x09\x09\x09yourself).\x0a\x09\x0a\x09^ newClass",
  9528. referencedClasses: ["SystemAnnouncer", "ClassAdded"],
  9529. //>>excludeEnd("ide");
  9530. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "superclass", "instanceVariableNames", "name", "package", "copyClass:to:", "announce:", "current", "theClass:", "new", "yourself"]
  9531. }),
  9532. $globals.ClassBuilder);
  9533. $core.addMethod(
  9534. $core.method({
  9535. selector: "copyClass:to:",
  9536. protocol: 'copying',
  9537. fn: function (aClass,anotherClass){
  9538. var self=this;
  9539. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  9540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9541. return $core.withContext(function($ctx1) {
  9542. //>>excludeEnd("ctx");
  9543. var $1,$2,$3,$4,$5,$7,$6,$9,$8;
  9544. $recv(anotherClass)._comment_($recv(aClass)._comment());
  9545. $1=$recv(aClass)._methodDictionary();
  9546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9547. $ctx1.sendIdx["methodDictionary"]=1;
  9548. //>>excludeEnd("ctx");
  9549. $recv($1)._valuesDo_((function(each){
  9550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9551. return $core.withContext(function($ctx2) {
  9552. //>>excludeEnd("ctx");
  9553. $2=$recv($Compiler())._new();
  9554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9555. $ctx2.sendIdx["new"]=1;
  9556. //>>excludeEnd("ctx");
  9557. $3=$recv(each)._source();
  9558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9559. $ctx2.sendIdx["source"]=1;
  9560. //>>excludeEnd("ctx");
  9561. $4=$recv(each)._protocol();
  9562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9563. $ctx2.sendIdx["protocol"]=1;
  9564. //>>excludeEnd("ctx");
  9565. return $recv($2)._install_forClass_protocol_($3,anotherClass,$4);
  9566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9567. $ctx2.sendIdx["install:forClass:protocol:"]=1;
  9568. //>>excludeEnd("ctx");
  9569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9570. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9571. //>>excludeEnd("ctx");
  9572. }));
  9573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9574. $ctx1.sendIdx["valuesDo:"]=1;
  9575. //>>excludeEnd("ctx");
  9576. $5=$recv(anotherClass)._class();
  9577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9578. $ctx1.sendIdx["class"]=1;
  9579. //>>excludeEnd("ctx");
  9580. $7=$recv(aClass)._class();
  9581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9582. $ctx1.sendIdx["class"]=2;
  9583. //>>excludeEnd("ctx");
  9584. $6=$recv($7)._instanceVariableNames();
  9585. self._basicClass_instanceVariables_($5,$6);
  9586. $9=$recv(aClass)._class();
  9587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9588. $ctx1.sendIdx["class"]=3;
  9589. //>>excludeEnd("ctx");
  9590. $8=$recv($9)._methodDictionary();
  9591. $recv($8)._valuesDo_((function(each){
  9592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9593. return $core.withContext(function($ctx2) {
  9594. //>>excludeEnd("ctx");
  9595. return $recv($recv($Compiler())._new())._install_forClass_protocol_($recv(each)._source(),$recv(anotherClass)._class(),$recv(each)._protocol());
  9596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9597. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  9598. //>>excludeEnd("ctx");
  9599. }));
  9600. self._setupClass_(anotherClass);
  9601. return self;
  9602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9603. }, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9604. //>>excludeEnd("ctx");
  9605. },
  9606. //>>excludeStart("ide", pragmas.excludeIdeData);
  9607. args: ["aClass", "anotherClass"],
  9608. source: "copyClass: aClass to: anotherClass\x0a\x0a\x09anotherClass comment: aClass comment.\x0a\x0a\x09aClass methodDictionary valuesDo: [ :each |\x0a\x09\x09Compiler new install: each source forClass: anotherClass protocol: each protocol ].\x0a\x0a\x09self basicClass: anotherClass class instanceVariables: aClass class instanceVariableNames.\x0a\x0a\x09aClass class methodDictionary valuesDo: [ :each |\x0a\x09\x09Compiler new install: each source forClass: anotherClass class protocol: each protocol ].\x0a\x0a\x09self setupClass: anotherClass",
  9609. referencedClasses: ["Compiler"],
  9610. //>>excludeEnd("ide");
  9611. messageSends: ["comment:", "comment", "valuesDo:", "methodDictionary", "install:forClass:protocol:", "new", "source", "protocol", "basicClass:instanceVariables:", "class", "instanceVariableNames", "setupClass:"]
  9612. }),
  9613. $globals.ClassBuilder);
  9614. $core.addMethod(
  9615. $core.method({
  9616. selector: "installMethod:forClass:protocol:",
  9617. protocol: 'method definition',
  9618. fn: function (aCompiledMethod,aBehavior,aString){
  9619. var self=this;
  9620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9621. return $core.withContext(function($ctx1) {
  9622. //>>excludeEnd("ctx");
  9623. $recv(aCompiledMethod)._protocol_(aString);
  9624. $recv(aBehavior)._addCompiledMethod_(aCompiledMethod);
  9625. return aCompiledMethod;
  9626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9627. }, function($ctx1) {$ctx1.fill(self,"installMethod:forClass:protocol:",{aCompiledMethod:aCompiledMethod,aBehavior:aBehavior,aString:aString},$globals.ClassBuilder)});
  9628. //>>excludeEnd("ctx");
  9629. },
  9630. //>>excludeStart("ide", pragmas.excludeIdeData);
  9631. args: ["aCompiledMethod", "aBehavior", "aString"],
  9632. source: "installMethod: aCompiledMethod forClass: aBehavior protocol: aString\x0a\x09aCompiledMethod protocol: aString.\x0a\x09aBehavior addCompiledMethod: aCompiledMethod.\x0a\x09^ aCompiledMethod",
  9633. referencedClasses: [],
  9634. //>>excludeEnd("ide");
  9635. messageSends: ["protocol:", "addCompiledMethod:"]
  9636. }),
  9637. $globals.ClassBuilder);
  9638. $core.addMethod(
  9639. $core.method({
  9640. selector: "instanceVariableNamesFor:",
  9641. protocol: 'accessing',
  9642. fn: function (aString){
  9643. var self=this;
  9644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9645. return $core.withContext(function($ctx1) {
  9646. //>>excludeEnd("ctx");
  9647. var $1;
  9648. $1=$recv($recv(aString)._tokenize_(" "))._reject_((function(each){
  9649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9650. return $core.withContext(function($ctx2) {
  9651. //>>excludeEnd("ctx");
  9652. return $recv(each)._isEmpty();
  9653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9654. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  9655. //>>excludeEnd("ctx");
  9656. }));
  9657. return $1;
  9658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9659. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNamesFor:",{aString:aString},$globals.ClassBuilder)});
  9660. //>>excludeEnd("ctx");
  9661. },
  9662. //>>excludeStart("ide", pragmas.excludeIdeData);
  9663. args: ["aString"],
  9664. source: "instanceVariableNamesFor: aString\x0a\x09^ (aString tokenize: ' ') reject: [ :each | each isEmpty ]",
  9665. referencedClasses: [],
  9666. //>>excludeEnd("ide");
  9667. messageSends: ["reject:", "tokenize:", "isEmpty"]
  9668. }),
  9669. $globals.ClassBuilder);
  9670. $core.addMethod(
  9671. $core.method({
  9672. selector: "migrateClass:superclass:",
  9673. protocol: 'class migration',
  9674. fn: function (aClass,anotherClass){
  9675. var self=this;
  9676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9677. return $core.withContext(function($ctx1) {
  9678. //>>excludeEnd("ctx");
  9679. var $2,$1;
  9680. $2=$recv(aClass)._name();
  9681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9682. $ctx1.sendIdx["name"]=1;
  9683. //>>excludeEnd("ctx");
  9684. $1=self._migrateClassNamed_superclass_instanceVariableNames_package_($2,anotherClass,$recv(aClass)._instanceVariableNames(),$recv($recv(aClass)._package())._name());
  9685. return $1;
  9686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9687. }, function($ctx1) {$ctx1.fill(self,"migrateClass:superclass:",{aClass:aClass,anotherClass:anotherClass},$globals.ClassBuilder)});
  9688. //>>excludeEnd("ctx");
  9689. },
  9690. //>>excludeStart("ide", pragmas.excludeIdeData);
  9691. args: ["aClass", "anotherClass"],
  9692. source: "migrateClass: aClass superclass: anotherClass\x0a\x09^ self\x0a\x09\x09migrateClassNamed: aClass name\x0a\x09\x09superclass: anotherClass\x0a\x09\x09instanceVariableNames: aClass instanceVariableNames\x0a\x09\x09package: aClass package name",
  9693. referencedClasses: [],
  9694. //>>excludeEnd("ide");
  9695. messageSends: ["migrateClassNamed:superclass:instanceVariableNames:package:", "name", "instanceVariableNames", "package"]
  9696. }),
  9697. $globals.ClassBuilder);
  9698. $core.addMethod(
  9699. $core.method({
  9700. selector: "migrateClassNamed:superclass:instanceVariableNames:package:",
  9701. protocol: 'class migration',
  9702. fn: function (className,aClass,aCollection,packageName){
  9703. var self=this;
  9704. var oldClass,newClass,tmp;
  9705. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  9706. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  9707. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9708. function $ClassMigrated(){return $globals.ClassMigrated||(typeof ClassMigrated=="undefined"?nil:ClassMigrated)}
  9709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9710. return $core.withContext(function($ctx1) {
  9711. //>>excludeEnd("ctx");
  9712. var $1,$2,$3,$4,$5;
  9713. tmp="new*".__comma(className);
  9714. oldClass=$recv($recv($Smalltalk())._globals())._at_(className);
  9715. newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,tmp,aCollection,packageName);
  9716. self._basicSwapClassNames_with_(oldClass,newClass);
  9717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9718. $ctx1.sendIdx["basicSwapClassNames:with:"]=1;
  9719. //>>excludeEnd("ctx");
  9720. $recv((function(){
  9721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9722. return $core.withContext(function($ctx2) {
  9723. //>>excludeEnd("ctx");
  9724. return self._copyClass_to_(oldClass,newClass);
  9725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9726. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  9727. //>>excludeEnd("ctx");
  9728. }))._on_do_($Error(),(function(exception){
  9729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9730. return $core.withContext(function($ctx2) {
  9731. //>>excludeEnd("ctx");
  9732. self._basicSwapClassNames_with_(oldClass,newClass);
  9733. $1=self._basicRemoveClass_(newClass);
  9734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9735. $ctx2.sendIdx["basicRemoveClass:"]=1;
  9736. //>>excludeEnd("ctx");
  9737. $1;
  9738. return $recv(exception)._signal();
  9739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9740. }, function($ctx2) {$ctx2.fillBlock({exception:exception},$ctx1,2)});
  9741. //>>excludeEnd("ctx");
  9742. }));
  9743. self._rawRenameClass_to_(oldClass,tmp);
  9744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9745. $ctx1.sendIdx["rawRenameClass:to:"]=1;
  9746. //>>excludeEnd("ctx");
  9747. $2=self._rawRenameClass_to_(newClass,className);
  9748. $recv($recv(oldClass)._subclasses())._do_((function(each){
  9749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9750. return $core.withContext(function($ctx2) {
  9751. //>>excludeEnd("ctx");
  9752. return self._migrateClass_superclass_(each,newClass);
  9753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9754. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  9755. //>>excludeEnd("ctx");
  9756. }));
  9757. self._basicRemoveClass_(oldClass);
  9758. $3=$recv($ClassMigrated())._new();
  9759. $recv($3)._theClass_(newClass);
  9760. $recv($3)._oldClass_(oldClass);
  9761. $4=$recv($3)._yourself();
  9762. $recv($recv($SystemAnnouncer())._current())._announce_($4);
  9763. $5=newClass;
  9764. return $5;
  9765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9766. }, function($ctx1) {$ctx1.fill(self,"migrateClassNamed:superclass:instanceVariableNames:package:",{className:className,aClass:aClass,aCollection:aCollection,packageName:packageName,oldClass:oldClass,newClass:newClass,tmp:tmp},$globals.ClassBuilder)});
  9767. //>>excludeEnd("ctx");
  9768. },
  9769. //>>excludeStart("ide", pragmas.excludeIdeData);
  9770. args: ["className", "aClass", "aCollection", "packageName"],
  9771. source: "migrateClassNamed: className superclass: aClass instanceVariableNames: aCollection package: packageName\x0a\x09| oldClass newClass tmp |\x0a\x09\x0a\x09tmp := 'new*', className.\x0a\x09oldClass := Smalltalk globals at: className.\x0a\x09\x0a\x09newClass := self\x0a\x09\x09addSubclassOf: aClass\x0a\x09\x09named: tmp\x0a\x09\x09instanceVariableNames: aCollection\x0a\x09\x09package: packageName.\x0a\x0a\x09self basicSwapClassNames: oldClass with: newClass.\x0a\x0a\x09[ self copyClass: oldClass to: newClass ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :exception |\x0a\x09\x09\x09self\x0a\x09\x09\x09\x09basicSwapClassNames: oldClass with: newClass;\x0a\x09\x09\x09\x09basicRemoveClass: newClass.\x0a\x09\x09\x09exception signal ].\x0a\x0a\x09self\x0a\x09\x09rawRenameClass: oldClass to: tmp;\x0a\x09\x09rawRenameClass: newClass to: className.\x0a\x0a\x09oldClass subclasses \x0a\x09\x09do: [ :each | self migrateClass: each superclass: newClass ].\x0a\x0a\x09self basicRemoveClass: oldClass.\x0a\x09\x0a\x09SystemAnnouncer current announce: (ClassMigrated new\x0a\x09\x09theClass: newClass;\x0a\x09\x09oldClass: oldClass;\x0a\x09\x09yourself).\x0a\x09\x0a\x09^ newClass",
  9772. referencedClasses: ["Smalltalk", "Error", "SystemAnnouncer", "ClassMigrated"],
  9773. //>>excludeEnd("ide");
  9774. messageSends: [",", "at:", "globals", "addSubclassOf:named:instanceVariableNames:package:", "basicSwapClassNames:with:", "on:do:", "copyClass:to:", "basicRemoveClass:", "signal", "rawRenameClass:to:", "do:", "subclasses", "migrateClass:superclass:", "announce:", "current", "theClass:", "new", "oldClass:", "yourself"]
  9775. }),
  9776. $globals.ClassBuilder);
  9777. $core.addMethod(
  9778. $core.method({
  9779. selector: "rawRenameClass:to:",
  9780. protocol: 'private',
  9781. fn: function (aClass,aString){
  9782. var self=this;
  9783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9784. return $core.withContext(function($ctx1) {
  9785. //>>excludeEnd("ctx");
  9786. $globals[aString] = aClass;
  9787. ;
  9788. return self;
  9789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9790. }, function($ctx1) {$ctx1.fill(self,"rawRenameClass:to:",{aClass:aClass,aString:aString},$globals.ClassBuilder)});
  9791. //>>excludeEnd("ctx");
  9792. },
  9793. //>>excludeStart("ide", pragmas.excludeIdeData);
  9794. args: ["aClass", "aString"],
  9795. source: "rawRenameClass: aClass to: aString\x0a\x09<\x0a\x09\x09$globals[aString] = aClass;\x0a\x09>",
  9796. referencedClasses: [],
  9797. //>>excludeEnd("ide");
  9798. messageSends: []
  9799. }),
  9800. $globals.ClassBuilder);
  9801. $core.addMethod(
  9802. $core.method({
  9803. selector: "renameClass:to:",
  9804. protocol: 'class migration',
  9805. fn: function (aClass,className){
  9806. var self=this;
  9807. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9808. function $ClassRenamed(){return $globals.ClassRenamed||(typeof ClassRenamed=="undefined"?nil:ClassRenamed)}
  9809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9810. return $core.withContext(function($ctx1) {
  9811. //>>excludeEnd("ctx");
  9812. var $1,$2;
  9813. self._basicRenameClass_to_(aClass,className);
  9814. $recv(aClass)._recompile();
  9815. $1=$recv($ClassRenamed())._new();
  9816. $recv($1)._theClass_(aClass);
  9817. $2=$recv($1)._yourself();
  9818. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  9819. return self;
  9820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9821. }, function($ctx1) {$ctx1.fill(self,"renameClass:to:",{aClass:aClass,className:className},$globals.ClassBuilder)});
  9822. //>>excludeEnd("ctx");
  9823. },
  9824. //>>excludeStart("ide", pragmas.excludeIdeData);
  9825. args: ["aClass", "className"],
  9826. source: "renameClass: aClass to: className\x0a\x09self basicRenameClass: aClass to: className.\x0a\x09\x0a\x09\x22Recompile the class to fix potential issues with super sends\x22\x0a\x09aClass recompile.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassRenamed new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
  9827. referencedClasses: ["SystemAnnouncer", "ClassRenamed"],
  9828. //>>excludeEnd("ide");
  9829. messageSends: ["basicRenameClass:to:", "recompile", "announce:", "current", "theClass:", "new", "yourself"]
  9830. }),
  9831. $globals.ClassBuilder);
  9832. $core.addMethod(
  9833. $core.method({
  9834. selector: "setupClass:",
  9835. protocol: 'public',
  9836. fn: function (aClass){
  9837. var self=this;
  9838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9839. return $core.withContext(function($ctx1) {
  9840. //>>excludeEnd("ctx");
  9841. $core.init(aClass);;
  9842. return self;
  9843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9844. }, function($ctx1) {$ctx1.fill(self,"setupClass:",{aClass:aClass},$globals.ClassBuilder)});
  9845. //>>excludeEnd("ctx");
  9846. },
  9847. //>>excludeStart("ide", pragmas.excludeIdeData);
  9848. args: ["aClass"],
  9849. source: "setupClass: aClass\x0a\x09<$core.init(aClass);>",
  9850. referencedClasses: [],
  9851. //>>excludeEnd("ide");
  9852. messageSends: []
  9853. }),
  9854. $globals.ClassBuilder);
  9855. $core.addMethod(
  9856. $core.method({
  9857. selector: "superclass:subclass:",
  9858. protocol: 'class definition',
  9859. fn: function (aClass,className){
  9860. var self=this;
  9861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9862. return $core.withContext(function($ctx1) {
  9863. //>>excludeEnd("ctx");
  9864. var $1;
  9865. $1=self._superclass_subclass_instanceVariableNames_package_(aClass,className,"",nil);
  9866. return $1;
  9867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9868. }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:",{aClass:aClass,className:className},$globals.ClassBuilder)});
  9869. //>>excludeEnd("ctx");
  9870. },
  9871. //>>excludeStart("ide", pragmas.excludeIdeData);
  9872. args: ["aClass", "className"],
  9873. source: "superclass: aClass subclass: className\x0a\x09^ self superclass: aClass subclass: className instanceVariableNames: '' package: nil",
  9874. referencedClasses: [],
  9875. //>>excludeEnd("ide");
  9876. messageSends: ["superclass:subclass:instanceVariableNames:package:"]
  9877. }),
  9878. $globals.ClassBuilder);
  9879. $core.addMethod(
  9880. $core.method({
  9881. selector: "superclass:subclass:instanceVariableNames:package:",
  9882. protocol: 'class definition',
  9883. fn: function (aClass,className,ivarNames,packageName){
  9884. var self=this;
  9885. var newClass;
  9886. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  9887. function $ClassAdded(){return $globals.ClassAdded||(typeof ClassAdded=="undefined"?nil:ClassAdded)}
  9888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9889. return $core.withContext(function($ctx1) {
  9890. //>>excludeEnd("ctx");
  9891. var $1,$2,$3,$4,$5,$receiver;
  9892. $1=self._instanceVariableNamesFor_(ivarNames);
  9893. if(($receiver = packageName) == null || $receiver.isNil){
  9894. $2="unclassified";
  9895. } else {
  9896. $2=packageName;
  9897. };
  9898. newClass=self._addSubclassOf_named_instanceVariableNames_package_(aClass,className,$1,$2);
  9899. self._setupClass_(newClass);
  9900. $3=$recv($ClassAdded())._new();
  9901. $recv($3)._theClass_(newClass);
  9902. $4=$recv($3)._yourself();
  9903. $recv($recv($SystemAnnouncer())._current())._announce_($4);
  9904. $5=newClass;
  9905. return $5;
  9906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9907. }, function($ctx1) {$ctx1.fill(self,"superclass:subclass:instanceVariableNames:package:",{aClass:aClass,className:className,ivarNames:ivarNames,packageName:packageName,newClass:newClass},$globals.ClassBuilder)});
  9908. //>>excludeEnd("ctx");
  9909. },
  9910. //>>excludeStart("ide", pragmas.excludeIdeData);
  9911. args: ["aClass", "className", "ivarNames", "packageName"],
  9912. source: "superclass: aClass subclass: className instanceVariableNames: ivarNames package: packageName\x0a\x09| newClass |\x0a\x09\x0a\x09newClass := self addSubclassOf: aClass\x0a\x09\x09named: className instanceVariableNames: (self instanceVariableNamesFor: ivarNames)\x0a\x09\x09package: (packageName ifNil: [ 'unclassified' ]).\x0a\x09self setupClass: newClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassAdded new\x0a\x09\x09\x09theClass: newClass;\x0a\x09\x09\x09yourself).\x0a\x09\x0a\x09^ newClass",
  9913. referencedClasses: ["SystemAnnouncer", "ClassAdded"],
  9914. //>>excludeEnd("ide");
  9915. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "instanceVariableNamesFor:", "ifNil:", "setupClass:", "announce:", "current", "theClass:", "new", "yourself"]
  9916. }),
  9917. $globals.ClassBuilder);
  9918. $core.addClass('ClassCategoryReader', $globals.Object, ['class', 'category'], 'Kernel-Classes');
  9919. //>>excludeStart("ide", pragmas.excludeIdeData);
  9920. $globals.ClassCategoryReader.comment="I provide a mechanism for retrieving class descriptions stored on a file in the Smalltalk chunk format.";
  9921. //>>excludeEnd("ide");
  9922. $core.addMethod(
  9923. $core.method({
  9924. selector: "class:category:",
  9925. protocol: 'accessing',
  9926. fn: function (aClass,aString){
  9927. var self=this;
  9928. self["@class"]=aClass;
  9929. self["@category"]=aString;
  9930. return self;
  9931. },
  9932. //>>excludeStart("ide", pragmas.excludeIdeData);
  9933. args: ["aClass", "aString"],
  9934. source: "class: aClass category: aString\x0a\x09class := aClass.\x0a\x09category := aString",
  9935. referencedClasses: [],
  9936. //>>excludeEnd("ide");
  9937. messageSends: []
  9938. }),
  9939. $globals.ClassCategoryReader);
  9940. $core.addMethod(
  9941. $core.method({
  9942. selector: "compileMethod:",
  9943. protocol: 'private',
  9944. fn: function (aString){
  9945. var self=this;
  9946. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  9947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9948. return $core.withContext(function($ctx1) {
  9949. //>>excludeEnd("ctx");
  9950. $recv($recv($Compiler())._new())._install_forClass_protocol_(aString,self["@class"],self["@category"]);
  9951. return self;
  9952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9953. }, function($ctx1) {$ctx1.fill(self,"compileMethod:",{aString:aString},$globals.ClassCategoryReader)});
  9954. //>>excludeEnd("ctx");
  9955. },
  9956. //>>excludeStart("ide", pragmas.excludeIdeData);
  9957. args: ["aString"],
  9958. source: "compileMethod: aString\x0a\x09Compiler new install: aString forClass: class protocol: category",
  9959. referencedClasses: ["Compiler"],
  9960. //>>excludeEnd("ide");
  9961. messageSends: ["install:forClass:protocol:", "new"]
  9962. }),
  9963. $globals.ClassCategoryReader);
  9964. $core.addMethod(
  9965. $core.method({
  9966. selector: "initialize",
  9967. protocol: 'initialization',
  9968. fn: function (){
  9969. var self=this;
  9970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9971. return $core.withContext(function($ctx1) {
  9972. //>>excludeEnd("ctx");
  9973. (
  9974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9975. $ctx1.supercall = true,
  9976. //>>excludeEnd("ctx");
  9977. $globals.ClassCategoryReader.superclass.fn.prototype._initialize.apply($recv(self), []));
  9978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9979. $ctx1.supercall = false;
  9980. //>>excludeEnd("ctx");;
  9981. return self;
  9982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  9983. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ClassCategoryReader)});
  9984. //>>excludeEnd("ctx");
  9985. },
  9986. //>>excludeStart("ide", pragmas.excludeIdeData);
  9987. args: [],
  9988. source: "initialize\x0a\x09super initialize.",
  9989. referencedClasses: [],
  9990. //>>excludeEnd("ide");
  9991. messageSends: ["initialize"]
  9992. }),
  9993. $globals.ClassCategoryReader);
  9994. $core.addMethod(
  9995. $core.method({
  9996. selector: "scanFrom:",
  9997. protocol: 'fileIn',
  9998. fn: function (aChunkParser){
  9999. var self=this;
  10000. var chunk;
  10001. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  10002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10003. return $core.withContext(function($ctx1) {
  10004. //>>excludeEnd("ctx");
  10005. $recv((function(){
  10006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10007. return $core.withContext(function($ctx2) {
  10008. //>>excludeEnd("ctx");
  10009. chunk=$recv(aChunkParser)._nextChunk();
  10010. chunk;
  10011. return $recv(chunk)._isEmpty();
  10012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10013. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  10014. //>>excludeEnd("ctx");
  10015. }))._whileFalse_((function(){
  10016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10017. return $core.withContext(function($ctx2) {
  10018. //>>excludeEnd("ctx");
  10019. return self._compileMethod_(chunk);
  10020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10021. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  10022. //>>excludeEnd("ctx");
  10023. }));
  10024. $recv($recv($ClassBuilder())._new())._setupClass_(self["@class"]);
  10025. return self;
  10026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10027. }, function($ctx1) {$ctx1.fill(self,"scanFrom:",{aChunkParser:aChunkParser,chunk:chunk},$globals.ClassCategoryReader)});
  10028. //>>excludeEnd("ctx");
  10029. },
  10030. //>>excludeStart("ide", pragmas.excludeIdeData);
  10031. args: ["aChunkParser"],
  10032. source: "scanFrom: aChunkParser\x0a\x09| chunk |\x0a\x09[ chunk := aChunkParser nextChunk.\x0a\x09chunk isEmpty ] whileFalse: [\x0a\x09\x09self compileMethod: chunk ].\x0a\x09ClassBuilder new setupClass: class",
  10033. referencedClasses: ["ClassBuilder"],
  10034. //>>excludeEnd("ide");
  10035. messageSends: ["whileFalse:", "nextChunk", "isEmpty", "compileMethod:", "setupClass:", "new"]
  10036. }),
  10037. $globals.ClassCategoryReader);
  10038. $core.addClass('ClassCommentReader', $globals.Object, ['class'], 'Kernel-Classes');
  10039. //>>excludeStart("ide", pragmas.excludeIdeData);
  10040. $globals.ClassCommentReader.comment="I provide a mechanism for retrieving class comments stored on a file.\x0a\x0aSee also `ClassCategoryReader`.";
  10041. //>>excludeEnd("ide");
  10042. $core.addMethod(
  10043. $core.method({
  10044. selector: "class:",
  10045. protocol: 'accessing',
  10046. fn: function (aClass){
  10047. var self=this;
  10048. self["@class"]=aClass;
  10049. return self;
  10050. },
  10051. //>>excludeStart("ide", pragmas.excludeIdeData);
  10052. args: ["aClass"],
  10053. source: "class: aClass\x0a\x09class := aClass",
  10054. referencedClasses: [],
  10055. //>>excludeEnd("ide");
  10056. messageSends: []
  10057. }),
  10058. $globals.ClassCommentReader);
  10059. $core.addMethod(
  10060. $core.method({
  10061. selector: "initialize",
  10062. protocol: 'initialization',
  10063. fn: function (){
  10064. var self=this;
  10065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10066. return $core.withContext(function($ctx1) {
  10067. //>>excludeEnd("ctx");
  10068. (
  10069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10070. $ctx1.supercall = true,
  10071. //>>excludeEnd("ctx");
  10072. $globals.ClassCommentReader.superclass.fn.prototype._initialize.apply($recv(self), []));
  10073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10074. $ctx1.supercall = false;
  10075. //>>excludeEnd("ctx");;
  10076. return self;
  10077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10078. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ClassCommentReader)});
  10079. //>>excludeEnd("ctx");
  10080. },
  10081. //>>excludeStart("ide", pragmas.excludeIdeData);
  10082. args: [],
  10083. source: "initialize\x0a\x09super initialize.",
  10084. referencedClasses: [],
  10085. //>>excludeEnd("ide");
  10086. messageSends: ["initialize"]
  10087. }),
  10088. $globals.ClassCommentReader);
  10089. $core.addMethod(
  10090. $core.method({
  10091. selector: "scanFrom:",
  10092. protocol: 'fileIn',
  10093. fn: function (aChunkParser){
  10094. var self=this;
  10095. var chunk;
  10096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10097. return $core.withContext(function($ctx1) {
  10098. //>>excludeEnd("ctx");
  10099. var $1;
  10100. chunk=$recv(aChunkParser)._nextChunk();
  10101. $1=$recv(chunk)._isEmpty();
  10102. if(!$core.assert($1)){
  10103. self._setComment_(chunk);
  10104. };
  10105. return self;
  10106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10107. }, function($ctx1) {$ctx1.fill(self,"scanFrom:",{aChunkParser:aChunkParser,chunk:chunk},$globals.ClassCommentReader)});
  10108. //>>excludeEnd("ctx");
  10109. },
  10110. //>>excludeStart("ide", pragmas.excludeIdeData);
  10111. args: ["aChunkParser"],
  10112. source: "scanFrom: aChunkParser\x0a\x09| chunk |\x0a\x09chunk := aChunkParser nextChunk.\x0a\x09chunk isEmpty ifFalse: [\x0a\x09\x09self setComment: chunk ].",
  10113. referencedClasses: [],
  10114. //>>excludeEnd("ide");
  10115. messageSends: ["nextChunk", "ifFalse:", "isEmpty", "setComment:"]
  10116. }),
  10117. $globals.ClassCommentReader);
  10118. $core.addMethod(
  10119. $core.method({
  10120. selector: "setComment:",
  10121. protocol: 'private',
  10122. fn: function (aString){
  10123. var self=this;
  10124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10125. return $core.withContext(function($ctx1) {
  10126. //>>excludeEnd("ctx");
  10127. $recv(self["@class"])._comment_(aString);
  10128. return self;
  10129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10130. }, function($ctx1) {$ctx1.fill(self,"setComment:",{aString:aString},$globals.ClassCommentReader)});
  10131. //>>excludeEnd("ctx");
  10132. },
  10133. //>>excludeStart("ide", pragmas.excludeIdeData);
  10134. args: ["aString"],
  10135. source: "setComment: aString\x0a\x09class comment: aString",
  10136. referencedClasses: [],
  10137. //>>excludeEnd("ide");
  10138. messageSends: ["comment:"]
  10139. }),
  10140. $globals.ClassCommentReader);
  10141. $core.addClass('ClassSorterNode', $globals.Object, ['theClass', 'level', 'nodes'], 'Kernel-Classes');
  10142. //>>excludeStart("ide", pragmas.excludeIdeData);
  10143. $globals.ClassSorterNode.comment="I provide an algorithm for sorting classes alphabetically.\x0a\x0aSee [Issue #143](https://github.com/amber-smalltalk/amber/issues/143) on GitHub.";
  10144. //>>excludeEnd("ide");
  10145. $core.addMethod(
  10146. $core.method({
  10147. selector: "getNodesFrom:",
  10148. protocol: 'accessing',
  10149. fn: function (aCollection){
  10150. var self=this;
  10151. var children,others;
  10152. function $ClassSorterNode(){return $globals.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
  10153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10154. return $core.withContext(function($ctx1) {
  10155. //>>excludeEnd("ctx");
  10156. var $1;
  10157. children=[];
  10158. others=[];
  10159. $recv(aCollection)._do_((function(each){
  10160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10161. return $core.withContext(function($ctx2) {
  10162. //>>excludeEnd("ctx");
  10163. $1=$recv($recv(each)._superclass()).__eq(self._theClass());
  10164. if($core.assert($1)){
  10165. return $recv(children)._add_(each);
  10166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10167. $ctx2.sendIdx["add:"]=1;
  10168. //>>excludeEnd("ctx");
  10169. } else {
  10170. return $recv(others)._add_(each);
  10171. };
  10172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10173. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  10174. //>>excludeEnd("ctx");
  10175. }));
  10176. self["@nodes"]=$recv(children)._collect_((function(each){
  10177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10178. return $core.withContext(function($ctx2) {
  10179. //>>excludeEnd("ctx");
  10180. return $recv($ClassSorterNode())._on_classes_level_(each,others,$recv(self._level()).__plus((1)));
  10181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10182. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  10183. //>>excludeEnd("ctx");
  10184. }));
  10185. return self;
  10186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10187. }, function($ctx1) {$ctx1.fill(self,"getNodesFrom:",{aCollection:aCollection,children:children,others:others},$globals.ClassSorterNode)});
  10188. //>>excludeEnd("ctx");
  10189. },
  10190. //>>excludeStart("ide", pragmas.excludeIdeData);
  10191. args: ["aCollection"],
  10192. source: "getNodesFrom: aCollection\x0a\x09| children others |\x0a\x09children := #().\x0a\x09others := #().\x0a\x09aCollection do: [ :each |\x0a\x09\x09(each superclass = self theClass)\x0a\x09\x09\x09ifTrue: [ children add: each ]\x0a\x09\x09\x09ifFalse: [ others add: each ]].\x0a\x09nodes:= children collect: [ :each |\x0a\x09\x09ClassSorterNode on: each classes: others level: self level + 1 ]",
  10193. referencedClasses: ["ClassSorterNode"],
  10194. //>>excludeEnd("ide");
  10195. messageSends: ["do:", "ifTrue:ifFalse:", "=", "superclass", "theClass", "add:", "collect:", "on:classes:level:", "+", "level"]
  10196. }),
  10197. $globals.ClassSorterNode);
  10198. $core.addMethod(
  10199. $core.method({
  10200. selector: "level",
  10201. protocol: 'accessing',
  10202. fn: function (){
  10203. var self=this;
  10204. var $1;
  10205. $1=self["@level"];
  10206. return $1;
  10207. },
  10208. //>>excludeStart("ide", pragmas.excludeIdeData);
  10209. args: [],
  10210. source: "level\x0a\x09^ level",
  10211. referencedClasses: [],
  10212. //>>excludeEnd("ide");
  10213. messageSends: []
  10214. }),
  10215. $globals.ClassSorterNode);
  10216. $core.addMethod(
  10217. $core.method({
  10218. selector: "level:",
  10219. protocol: 'accessing',
  10220. fn: function (anInteger){
  10221. var self=this;
  10222. self["@level"]=anInteger;
  10223. return self;
  10224. },
  10225. //>>excludeStart("ide", pragmas.excludeIdeData);
  10226. args: ["anInteger"],
  10227. source: "level: anInteger\x0a\x09level := anInteger",
  10228. referencedClasses: [],
  10229. //>>excludeEnd("ide");
  10230. messageSends: []
  10231. }),
  10232. $globals.ClassSorterNode);
  10233. $core.addMethod(
  10234. $core.method({
  10235. selector: "nodes",
  10236. protocol: 'accessing',
  10237. fn: function (){
  10238. var self=this;
  10239. var $1;
  10240. $1=self["@nodes"];
  10241. return $1;
  10242. },
  10243. //>>excludeStart("ide", pragmas.excludeIdeData);
  10244. args: [],
  10245. source: "nodes\x0a\x09^ nodes",
  10246. referencedClasses: [],
  10247. //>>excludeEnd("ide");
  10248. messageSends: []
  10249. }),
  10250. $globals.ClassSorterNode);
  10251. $core.addMethod(
  10252. $core.method({
  10253. selector: "theClass",
  10254. protocol: 'accessing',
  10255. fn: function (){
  10256. var self=this;
  10257. var $1;
  10258. $1=self["@theClass"];
  10259. return $1;
  10260. },
  10261. //>>excludeStart("ide", pragmas.excludeIdeData);
  10262. args: [],
  10263. source: "theClass\x0a\x09^ theClass",
  10264. referencedClasses: [],
  10265. //>>excludeEnd("ide");
  10266. messageSends: []
  10267. }),
  10268. $globals.ClassSorterNode);
  10269. $core.addMethod(
  10270. $core.method({
  10271. selector: "theClass:",
  10272. protocol: 'accessing',
  10273. fn: function (aClass){
  10274. var self=this;
  10275. self["@theClass"]=aClass;
  10276. return self;
  10277. },
  10278. //>>excludeStart("ide", pragmas.excludeIdeData);
  10279. args: ["aClass"],
  10280. source: "theClass: aClass\x0a\x09theClass := aClass",
  10281. referencedClasses: [],
  10282. //>>excludeEnd("ide");
  10283. messageSends: []
  10284. }),
  10285. $globals.ClassSorterNode);
  10286. $core.addMethod(
  10287. $core.method({
  10288. selector: "traverseClassesWith:",
  10289. protocol: 'visiting',
  10290. fn: function (aCollection){
  10291. var self=this;
  10292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10293. return $core.withContext(function($ctx1) {
  10294. //>>excludeEnd("ctx");
  10295. var $1,$3,$2;
  10296. $1=self._theClass();
  10297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10298. $ctx1.sendIdx["theClass"]=1;
  10299. //>>excludeEnd("ctx");
  10300. $recv(aCollection)._add_($1);
  10301. $recv($recv(self._nodes())._sorted_((function(a,b){
  10302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10303. return $core.withContext(function($ctx2) {
  10304. //>>excludeEnd("ctx");
  10305. $3=$recv(a)._theClass();
  10306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10307. $ctx2.sendIdx["theClass"]=2;
  10308. //>>excludeEnd("ctx");
  10309. $2=$recv($3)._name();
  10310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10311. $ctx2.sendIdx["name"]=1;
  10312. //>>excludeEnd("ctx");
  10313. return $recv($2).__lt_eq($recv($recv(b)._theClass())._name());
  10314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10315. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  10316. //>>excludeEnd("ctx");
  10317. })))._do_((function(aNode){
  10318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10319. return $core.withContext(function($ctx2) {
  10320. //>>excludeEnd("ctx");
  10321. return $recv(aNode)._traverseClassesWith_(aCollection);
  10322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10323. }, function($ctx2) {$ctx2.fillBlock({aNode:aNode},$ctx1,2)});
  10324. //>>excludeEnd("ctx");
  10325. }));
  10326. return self;
  10327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10328. }, function($ctx1) {$ctx1.fill(self,"traverseClassesWith:",{aCollection:aCollection},$globals.ClassSorterNode)});
  10329. //>>excludeEnd("ctx");
  10330. },
  10331. //>>excludeStart("ide", pragmas.excludeIdeData);
  10332. args: ["aCollection"],
  10333. source: "traverseClassesWith: aCollection\x0a\x09\x22sort classes alphabetically Issue #143\x22\x0a\x0a\x09aCollection add: self theClass.\x0a\x09(self nodes sorted: [ :a :b | a theClass name <= b theClass name ]) do: [ :aNode |\x0a\x09\x09aNode traverseClassesWith: aCollection ].",
  10334. referencedClasses: [],
  10335. //>>excludeEnd("ide");
  10336. messageSends: ["add:", "theClass", "do:", "sorted:", "nodes", "<=", "name", "traverseClassesWith:"]
  10337. }),
  10338. $globals.ClassSorterNode);
  10339. $core.addMethod(
  10340. $core.method({
  10341. selector: "on:classes:level:",
  10342. protocol: 'instance creation',
  10343. fn: function (aClass,aCollection,anInteger){
  10344. var self=this;
  10345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10346. return $core.withContext(function($ctx1) {
  10347. //>>excludeEnd("ctx");
  10348. var $2,$3,$1;
  10349. $2=self._new();
  10350. $recv($2)._theClass_(aClass);
  10351. $recv($2)._level_(anInteger);
  10352. $recv($2)._getNodesFrom_(aCollection);
  10353. $3=$recv($2)._yourself();
  10354. $1=$3;
  10355. return $1;
  10356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10357. }, function($ctx1) {$ctx1.fill(self,"on:classes:level:",{aClass:aClass,aCollection:aCollection,anInteger:anInteger},$globals.ClassSorterNode.klass)});
  10358. //>>excludeEnd("ctx");
  10359. },
  10360. //>>excludeStart("ide", pragmas.excludeIdeData);
  10361. args: ["aClass", "aCollection", "anInteger"],
  10362. source: "on: aClass classes: aCollection level: anInteger\x0a\x09^ self new\x0a\x09\x09theClass: aClass;\x0a\x09\x09level: anInteger;\x0a\x09\x09getNodesFrom: aCollection;\x0a\x09\x09yourself",
  10363. referencedClasses: [],
  10364. //>>excludeEnd("ide");
  10365. messageSends: ["theClass:", "new", "level:", "getNodesFrom:", "yourself"]
  10366. }),
  10367. $globals.ClassSorterNode.klass);
  10368. });
  10369. define("amber_core/Kernel-Methods", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  10370. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  10371. var smalltalk=$core,_st=$recv,globals=$globals;
  10372. $core.addPackage('Kernel-Methods');
  10373. $core.packages["Kernel-Methods"].transport = {"type":"amd","amdNamespace":"amber_core"};
  10374. $core.addClass('BlockClosure', $globals.Object, [], 'Kernel-Methods');
  10375. //>>excludeStart("ide", pragmas.excludeIdeData);
  10376. $globals.BlockClosure.comment="I represent a lexical closure.\x0aI am is directly mapped to JavaScript Function.\x0a\x0a## API\x0a\x0a1. Evaluation\x0a\x0a My instances get evaluated with the `#value*` methods in the 'evaluating' protocol.\x0a\x0a Example: ` [ :x | x + 1 ] value: 3 \x22Answers 4\x22 `\x0a\x0a2. Control structures\x0a\x0a Blocks are used (together with `Boolean`) for control structures (methods in the `controlling` protocol).\x0a\x0a Example: `aBlock whileTrue: [ ... ]`\x0a\x0a3. Error handling\x0a\x0a I provide the `#on:do:` method for handling exceptions.\x0a\x0a Example: ` aBlock on: MessageNotUnderstood do: [ :ex | ... ] `";
  10377. //>>excludeEnd("ide");
  10378. $core.addMethod(
  10379. $core.method({
  10380. selector: "applyTo:arguments:",
  10381. protocol: 'evaluating',
  10382. fn: function (anObject,aCollection){
  10383. var self=this;
  10384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10385. return $core.withContext(function($ctx1) {
  10386. //>>excludeEnd("ctx");
  10387. return self.apply(anObject, aCollection);
  10388. return self;
  10389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10390. }, function($ctx1) {$ctx1.fill(self,"applyTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.BlockClosure)});
  10391. //>>excludeEnd("ctx");
  10392. },
  10393. //>>excludeStart("ide", pragmas.excludeIdeData);
  10394. args: ["anObject", "aCollection"],
  10395. source: "applyTo: anObject arguments: aCollection\x0a\x09<return self.apply(anObject, aCollection)>",
  10396. referencedClasses: [],
  10397. //>>excludeEnd("ide");
  10398. messageSends: []
  10399. }),
  10400. $globals.BlockClosure);
  10401. $core.addMethod(
  10402. $core.method({
  10403. selector: "asCompiledMethod:",
  10404. protocol: 'converting',
  10405. fn: function (aString){
  10406. var self=this;
  10407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10408. return $core.withContext(function($ctx1) {
  10409. //>>excludeEnd("ctx");
  10410. return $core.method({selector:aString, fn:self});;
  10411. return self;
  10412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10413. }, function($ctx1) {$ctx1.fill(self,"asCompiledMethod:",{aString:aString},$globals.BlockClosure)});
  10414. //>>excludeEnd("ctx");
  10415. },
  10416. //>>excludeStart("ide", pragmas.excludeIdeData);
  10417. args: ["aString"],
  10418. source: "asCompiledMethod: aString\x0a\x09<return $core.method({selector:aString, fn:self});>",
  10419. referencedClasses: [],
  10420. //>>excludeEnd("ide");
  10421. messageSends: []
  10422. }),
  10423. $globals.BlockClosure);
  10424. $core.addMethod(
  10425. $core.method({
  10426. selector: "compiledSource",
  10427. protocol: 'accessing',
  10428. fn: function (){
  10429. var self=this;
  10430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10431. return $core.withContext(function($ctx1) {
  10432. //>>excludeEnd("ctx");
  10433. return self.toString();
  10434. return self;
  10435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10436. }, function($ctx1) {$ctx1.fill(self,"compiledSource",{},$globals.BlockClosure)});
  10437. //>>excludeEnd("ctx");
  10438. },
  10439. //>>excludeStart("ide", pragmas.excludeIdeData);
  10440. args: [],
  10441. source: "compiledSource\x0a\x09<return self.toString()>",
  10442. referencedClasses: [],
  10443. //>>excludeEnd("ide");
  10444. messageSends: []
  10445. }),
  10446. $globals.BlockClosure);
  10447. $core.addMethod(
  10448. $core.method({
  10449. selector: "currySelf",
  10450. protocol: 'converting',
  10451. fn: function (){
  10452. var self=this;
  10453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10454. return $core.withContext(function($ctx1) {
  10455. //>>excludeEnd("ctx");
  10456. return function () {
  10457. var args = [ this ];
  10458. args.push.apply(args, arguments);
  10459. return self.apply(null, args);
  10460. }
  10461. ;
  10462. return self;
  10463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10464. }, function($ctx1) {$ctx1.fill(self,"currySelf",{},$globals.BlockClosure)});
  10465. //>>excludeEnd("ctx");
  10466. },
  10467. //>>excludeStart("ide", pragmas.excludeIdeData);
  10468. args: [],
  10469. source: "currySelf\x0a\x09\x22Transforms [ :selfarg :x :y | stcode ] block\x0a\x09which represents JS function (selfarg, x, y, ...) {jscode}\x0a\x09into function (x, y, ...) {jscode} that takes selfarg from 'this'.\x0a\x09IOW, it is usable as JS method and first arg takes the receiver.\x22\x0a\x09\x0a\x09<\x0a\x09\x09return function () {\x0a\x09\x09\x09var args = [ this ];\x0a\x09\x09\x09args.push.apply(args, arguments);\x0a\x09\x09\x09return self.apply(null, args);\x0a\x09\x09}\x0a\x09>",
  10470. referencedClasses: [],
  10471. //>>excludeEnd("ide");
  10472. messageSends: []
  10473. }),
  10474. $globals.BlockClosure);
  10475. $core.addMethod(
  10476. $core.method({
  10477. selector: "ensure:",
  10478. protocol: 'evaluating',
  10479. fn: function (aBlock){
  10480. var self=this;
  10481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10482. return $core.withContext(function($ctx1) {
  10483. //>>excludeEnd("ctx");
  10484. try{return self._value()}finally{aBlock._value()};
  10485. return self;
  10486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10487. }, function($ctx1) {$ctx1.fill(self,"ensure:",{aBlock:aBlock},$globals.BlockClosure)});
  10488. //>>excludeEnd("ctx");
  10489. },
  10490. //>>excludeStart("ide", pragmas.excludeIdeData);
  10491. args: ["aBlock"],
  10492. source: "ensure: aBlock\x0a\x09<try{return self._value()}finally{aBlock._value()}>",
  10493. referencedClasses: [],
  10494. //>>excludeEnd("ide");
  10495. messageSends: []
  10496. }),
  10497. $globals.BlockClosure);
  10498. $core.addMethod(
  10499. $core.method({
  10500. selector: "fork",
  10501. protocol: 'timeout/interval',
  10502. fn: function (){
  10503. var self=this;
  10504. function $ForkPool(){return $globals.ForkPool||(typeof ForkPool=="undefined"?nil:ForkPool)}
  10505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10506. return $core.withContext(function($ctx1) {
  10507. //>>excludeEnd("ctx");
  10508. $recv($recv($ForkPool())._default())._fork_(self);
  10509. return self;
  10510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10511. }, function($ctx1) {$ctx1.fill(self,"fork",{},$globals.BlockClosure)});
  10512. //>>excludeEnd("ctx");
  10513. },
  10514. //>>excludeStart("ide", pragmas.excludeIdeData);
  10515. args: [],
  10516. source: "fork\x0a\x09ForkPool default fork: self",
  10517. referencedClasses: ["ForkPool"],
  10518. //>>excludeEnd("ide");
  10519. messageSends: ["fork:", "default"]
  10520. }),
  10521. $globals.BlockClosure);
  10522. $core.addMethod(
  10523. $core.method({
  10524. selector: "new",
  10525. protocol: 'evaluating',
  10526. fn: function (){
  10527. var self=this;
  10528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10529. return $core.withContext(function($ctx1) {
  10530. //>>excludeEnd("ctx");
  10531. return new self();
  10532. return self;
  10533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10534. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.BlockClosure)});
  10535. //>>excludeEnd("ctx");
  10536. },
  10537. //>>excludeStart("ide", pragmas.excludeIdeData);
  10538. args: [],
  10539. source: "new\x0a\x09\x22Use the receiver as a JS constructor.\x0a\x09*Do not* use this method to instanciate Smalltalk objects!\x22\x0a\x09<return new self()>",
  10540. referencedClasses: [],
  10541. //>>excludeEnd("ide");
  10542. messageSends: []
  10543. }),
  10544. $globals.BlockClosure);
  10545. $core.addMethod(
  10546. $core.method({
  10547. selector: "newValue:",
  10548. protocol: 'evaluating',
  10549. fn: function (anObject){
  10550. var self=this;
  10551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10552. return $core.withContext(function($ctx1) {
  10553. //>>excludeEnd("ctx");
  10554. var $1;
  10555. $1=self._newWithValues_([anObject]);
  10556. return $1;
  10557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10558. }, function($ctx1) {$ctx1.fill(self,"newValue:",{anObject:anObject},$globals.BlockClosure)});
  10559. //>>excludeEnd("ctx");
  10560. },
  10561. //>>excludeStart("ide", pragmas.excludeIdeData);
  10562. args: ["anObject"],
  10563. source: "newValue: anObject\x0a\x09^ self newWithValues: { anObject }",
  10564. referencedClasses: [],
  10565. //>>excludeEnd("ide");
  10566. messageSends: ["newWithValues:"]
  10567. }),
  10568. $globals.BlockClosure);
  10569. $core.addMethod(
  10570. $core.method({
  10571. selector: "newValue:value:",
  10572. protocol: 'evaluating',
  10573. fn: function (anObject,anObject2){
  10574. var self=this;
  10575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10576. return $core.withContext(function($ctx1) {
  10577. //>>excludeEnd("ctx");
  10578. var $1;
  10579. $1=self._newWithValues_([anObject,anObject2]);
  10580. return $1;
  10581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10582. }, function($ctx1) {$ctx1.fill(self,"newValue:value:",{anObject:anObject,anObject2:anObject2},$globals.BlockClosure)});
  10583. //>>excludeEnd("ctx");
  10584. },
  10585. //>>excludeStart("ide", pragmas.excludeIdeData);
  10586. args: ["anObject", "anObject2"],
  10587. source: "newValue: anObject value: anObject2\x0a\x09^ self newWithValues: { anObject. anObject2 }.",
  10588. referencedClasses: [],
  10589. //>>excludeEnd("ide");
  10590. messageSends: ["newWithValues:"]
  10591. }),
  10592. $globals.BlockClosure);
  10593. $core.addMethod(
  10594. $core.method({
  10595. selector: "newValue:value:value:",
  10596. protocol: 'evaluating',
  10597. fn: function (anObject,anObject2,anObject3){
  10598. var self=this;
  10599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10600. return $core.withContext(function($ctx1) {
  10601. //>>excludeEnd("ctx");
  10602. var $1;
  10603. $1=self._newWithValues_([anObject,anObject2,anObject3]);
  10604. return $1;
  10605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10606. }, function($ctx1) {$ctx1.fill(self,"newValue:value:value:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.BlockClosure)});
  10607. //>>excludeEnd("ctx");
  10608. },
  10609. //>>excludeStart("ide", pragmas.excludeIdeData);
  10610. args: ["anObject", "anObject2", "anObject3"],
  10611. source: "newValue: anObject value: anObject2 value: anObject3\x0a\x09^ self newWithValues: { anObject. anObject2. anObject3 }.",
  10612. referencedClasses: [],
  10613. //>>excludeEnd("ide");
  10614. messageSends: ["newWithValues:"]
  10615. }),
  10616. $globals.BlockClosure);
  10617. $core.addMethod(
  10618. $core.method({
  10619. selector: "newWithValues:",
  10620. protocol: 'evaluating',
  10621. fn: function (aCollection){
  10622. var self=this;
  10623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10624. return $core.withContext(function($ctx1) {
  10625. //>>excludeEnd("ctx");
  10626. var object = Object.create(self.prototype);
  10627. var result = self.apply(object, aCollection);
  10628. return typeof result === "object" ? result : object;
  10629. ;
  10630. return self;
  10631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10632. }, function($ctx1) {$ctx1.fill(self,"newWithValues:",{aCollection:aCollection},$globals.BlockClosure)});
  10633. //>>excludeEnd("ctx");
  10634. },
  10635. //>>excludeStart("ide", pragmas.excludeIdeData);
  10636. args: ["aCollection"],
  10637. source: "newWithValues: aCollection\x0a\x09\x22Simulates JS new operator by combination of Object.create and .apply\x22\x0a\x09<\x0a\x09\x09var object = Object.create(self.prototype);\x0a\x09\x09var result = self.apply(object, aCollection);\x0a\x09\x09return typeof result === \x22object\x22 ? result : object;\x0a\x09>",
  10638. referencedClasses: [],
  10639. //>>excludeEnd("ide");
  10640. messageSends: []
  10641. }),
  10642. $globals.BlockClosure);
  10643. $core.addMethod(
  10644. $core.method({
  10645. selector: "numArgs",
  10646. protocol: 'accessing',
  10647. fn: function (){
  10648. var self=this;
  10649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10650. return $core.withContext(function($ctx1) {
  10651. //>>excludeEnd("ctx");
  10652. return self.length;
  10653. return self;
  10654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10655. }, function($ctx1) {$ctx1.fill(self,"numArgs",{},$globals.BlockClosure)});
  10656. //>>excludeEnd("ctx");
  10657. },
  10658. //>>excludeStart("ide", pragmas.excludeIdeData);
  10659. args: [],
  10660. source: "numArgs\x0a\x09<return self.length>",
  10661. referencedClasses: [],
  10662. //>>excludeEnd("ide");
  10663. messageSends: []
  10664. }),
  10665. $globals.BlockClosure);
  10666. $core.addMethod(
  10667. $core.method({
  10668. selector: "on:do:",
  10669. protocol: 'error handling',
  10670. fn: function (anErrorClass,aBlock){
  10671. var self=this;
  10672. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  10673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10674. return $core.withContext(function($ctx1) {
  10675. //>>excludeEnd("ctx");
  10676. var $2,$1;
  10677. $1=self._tryCatch_((function(error){
  10678. var smalltalkError;
  10679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10680. return $core.withContext(function($ctx2) {
  10681. //>>excludeEnd("ctx");
  10682. smalltalkError=$recv($Smalltalk())._asSmalltalkException_(error);
  10683. smalltalkError;
  10684. $2=$recv(smalltalkError)._isKindOf_(anErrorClass);
  10685. if($core.assert($2)){
  10686. return $recv(aBlock)._value_(smalltalkError);
  10687. } else {
  10688. return $recv(smalltalkError)._resignal();
  10689. };
  10690. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10691. }, function($ctx2) {$ctx2.fillBlock({error:error,smalltalkError:smalltalkError},$ctx1,1)});
  10692. //>>excludeEnd("ctx");
  10693. }));
  10694. return $1;
  10695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10696. }, function($ctx1) {$ctx1.fill(self,"on:do:",{anErrorClass:anErrorClass,aBlock:aBlock},$globals.BlockClosure)});
  10697. //>>excludeEnd("ctx");
  10698. },
  10699. //>>excludeStart("ide", pragmas.excludeIdeData);
  10700. args: ["anErrorClass", "aBlock"],
  10701. source: "on: anErrorClass do: aBlock\x0a\x09\x22All exceptions thrown in the Smalltalk stack are cought.\x0a\x09Convert all JS exceptions to JavaScriptException instances.\x22\x0a\x09\x0a\x09^ self tryCatch: [ :error | | smalltalkError |\x0a\x09\x09smalltalkError := Smalltalk asSmalltalkException: error.\x0a\x09\x09(smalltalkError isKindOf: anErrorClass)\x0a\x09\x09ifTrue: [ aBlock value: smalltalkError ]\x0a\x09\x09ifFalse: [ smalltalkError resignal ] ]",
  10702. referencedClasses: ["Smalltalk"],
  10703. //>>excludeEnd("ide");
  10704. messageSends: ["tryCatch:", "asSmalltalkException:", "ifTrue:ifFalse:", "isKindOf:", "value:", "resignal"]
  10705. }),
  10706. $globals.BlockClosure);
  10707. $core.addMethod(
  10708. $core.method({
  10709. selector: "receiver",
  10710. protocol: 'accessing',
  10711. fn: function (){
  10712. var self=this;
  10713. return nil;
  10714. },
  10715. //>>excludeStart("ide", pragmas.excludeIdeData);
  10716. args: [],
  10717. source: "receiver\x0a\x09^ nil",
  10718. referencedClasses: [],
  10719. //>>excludeEnd("ide");
  10720. messageSends: []
  10721. }),
  10722. $globals.BlockClosure);
  10723. $core.addMethod(
  10724. $core.method({
  10725. selector: "timeToRun",
  10726. protocol: 'evaluating',
  10727. fn: function (){
  10728. var self=this;
  10729. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  10730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10731. return $core.withContext(function($ctx1) {
  10732. //>>excludeEnd("ctx");
  10733. var $1;
  10734. $1=$recv($Date())._millisecondsToRun_(self);
  10735. return $1;
  10736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10737. }, function($ctx1) {$ctx1.fill(self,"timeToRun",{},$globals.BlockClosure)});
  10738. //>>excludeEnd("ctx");
  10739. },
  10740. //>>excludeStart("ide", pragmas.excludeIdeData);
  10741. args: [],
  10742. source: "timeToRun\x0a\x09\x22Answer the number of milliseconds taken to execute this block.\x22\x0a\x0a\x09^ Date millisecondsToRun: self",
  10743. referencedClasses: ["Date"],
  10744. //>>excludeEnd("ide");
  10745. messageSends: ["millisecondsToRun:"]
  10746. }),
  10747. $globals.BlockClosure);
  10748. $core.addMethod(
  10749. $core.method({
  10750. selector: "tryCatch:",
  10751. protocol: 'error handling',
  10752. fn: function (aBlock){
  10753. var self=this;
  10754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10755. return $core.withContext(function($ctx1) {
  10756. //>>excludeEnd("ctx");
  10757. try {
  10758. return self._value();
  10759. } catch(error) {
  10760. return aBlock._value_(error);
  10761. }
  10762. ;
  10763. return self;
  10764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10765. }, function($ctx1) {$ctx1.fill(self,"tryCatch:",{aBlock:aBlock},$globals.BlockClosure)});
  10766. //>>excludeEnd("ctx");
  10767. },
  10768. //>>excludeStart("ide", pragmas.excludeIdeData);
  10769. args: ["aBlock"],
  10770. source: "tryCatch: aBlock\x0a\x09<\x0a\x09\x09try {\x0a\x09\x09\x09return self._value();\x0a\x09\x09} catch(error) {\x0a\x09\x09\x09return aBlock._value_(error);\x0a\x09\x09}\x0a\x09>",
  10771. referencedClasses: [],
  10772. //>>excludeEnd("ide");
  10773. messageSends: []
  10774. }),
  10775. $globals.BlockClosure);
  10776. $core.addMethod(
  10777. $core.method({
  10778. selector: "value",
  10779. protocol: 'evaluating',
  10780. fn: function (){
  10781. var self=this;
  10782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10783. return $core.withContext(function($ctx1) {
  10784. //>>excludeEnd("ctx");
  10785. return self();;
  10786. return self;
  10787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10788. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.BlockClosure)});
  10789. //>>excludeEnd("ctx");
  10790. },
  10791. //>>excludeStart("ide", pragmas.excludeIdeData);
  10792. args: [],
  10793. source: "value\x0a\x09<return self();>",
  10794. referencedClasses: [],
  10795. //>>excludeEnd("ide");
  10796. messageSends: []
  10797. }),
  10798. $globals.BlockClosure);
  10799. $core.addMethod(
  10800. $core.method({
  10801. selector: "value:",
  10802. protocol: 'evaluating',
  10803. fn: function (anArg){
  10804. var self=this;
  10805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10806. return $core.withContext(function($ctx1) {
  10807. //>>excludeEnd("ctx");
  10808. return self(anArg);;
  10809. return self;
  10810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10811. }, function($ctx1) {$ctx1.fill(self,"value:",{anArg:anArg},$globals.BlockClosure)});
  10812. //>>excludeEnd("ctx");
  10813. },
  10814. //>>excludeStart("ide", pragmas.excludeIdeData);
  10815. args: ["anArg"],
  10816. source: "value: anArg\x0a\x09<return self(anArg);>",
  10817. referencedClasses: [],
  10818. //>>excludeEnd("ide");
  10819. messageSends: []
  10820. }),
  10821. $globals.BlockClosure);
  10822. $core.addMethod(
  10823. $core.method({
  10824. selector: "value:value:",
  10825. protocol: 'evaluating',
  10826. fn: function (firstArg,secondArg){
  10827. var self=this;
  10828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10829. return $core.withContext(function($ctx1) {
  10830. //>>excludeEnd("ctx");
  10831. return self(firstArg, secondArg);;
  10832. return self;
  10833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10834. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArg:firstArg,secondArg:secondArg},$globals.BlockClosure)});
  10835. //>>excludeEnd("ctx");
  10836. },
  10837. //>>excludeStart("ide", pragmas.excludeIdeData);
  10838. args: ["firstArg", "secondArg"],
  10839. source: "value: firstArg value: secondArg\x0a\x09<return self(firstArg, secondArg);>",
  10840. referencedClasses: [],
  10841. //>>excludeEnd("ide");
  10842. messageSends: []
  10843. }),
  10844. $globals.BlockClosure);
  10845. $core.addMethod(
  10846. $core.method({
  10847. selector: "value:value:value:",
  10848. protocol: 'evaluating',
  10849. fn: function (firstArg,secondArg,thirdArg){
  10850. var self=this;
  10851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10852. return $core.withContext(function($ctx1) {
  10853. //>>excludeEnd("ctx");
  10854. return self(firstArg, secondArg, thirdArg);;
  10855. return self;
  10856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10857. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArg:firstArg,secondArg:secondArg,thirdArg:thirdArg},$globals.BlockClosure)});
  10858. //>>excludeEnd("ctx");
  10859. },
  10860. //>>excludeStart("ide", pragmas.excludeIdeData);
  10861. args: ["firstArg", "secondArg", "thirdArg"],
  10862. source: "value: firstArg value: secondArg value: thirdArg\x0a\x09<return self(firstArg, secondArg, thirdArg);>",
  10863. referencedClasses: [],
  10864. //>>excludeEnd("ide");
  10865. messageSends: []
  10866. }),
  10867. $globals.BlockClosure);
  10868. $core.addMethod(
  10869. $core.method({
  10870. selector: "valueWithInterval:",
  10871. protocol: 'timeout/interval',
  10872. fn: function (aNumber){
  10873. var self=this;
  10874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10875. return $core.withContext(function($ctx1) {
  10876. //>>excludeEnd("ctx");
  10877. var interval = setInterval(self, aNumber);
  10878. return $globals.Timeout._on_(interval);
  10879. ;
  10880. return self;
  10881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10882. }, function($ctx1) {$ctx1.fill(self,"valueWithInterval:",{aNumber:aNumber},$globals.BlockClosure)});
  10883. //>>excludeEnd("ctx");
  10884. },
  10885. //>>excludeStart("ide", pragmas.excludeIdeData);
  10886. args: ["aNumber"],
  10887. source: "valueWithInterval: aNumber\x0a\x09<\x0a\x09\x09var interval = setInterval(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(interval);\x0a\x09>",
  10888. referencedClasses: [],
  10889. //>>excludeEnd("ide");
  10890. messageSends: []
  10891. }),
  10892. $globals.BlockClosure);
  10893. $core.addMethod(
  10894. $core.method({
  10895. selector: "valueWithPossibleArguments:",
  10896. protocol: 'evaluating',
  10897. fn: function (aCollection){
  10898. var self=this;
  10899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10900. return $core.withContext(function($ctx1) {
  10901. //>>excludeEnd("ctx");
  10902. return self.apply(null, aCollection);;
  10903. return self;
  10904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10905. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection},$globals.BlockClosure)});
  10906. //>>excludeEnd("ctx");
  10907. },
  10908. //>>excludeStart("ide", pragmas.excludeIdeData);
  10909. args: ["aCollection"],
  10910. source: "valueWithPossibleArguments: aCollection\x0a\x09<return self.apply(null, aCollection);>",
  10911. referencedClasses: [],
  10912. //>>excludeEnd("ide");
  10913. messageSends: []
  10914. }),
  10915. $globals.BlockClosure);
  10916. $core.addMethod(
  10917. $core.method({
  10918. selector: "valueWithTimeout:",
  10919. protocol: 'timeout/interval',
  10920. fn: function (aNumber){
  10921. var self=this;
  10922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10923. return $core.withContext(function($ctx1) {
  10924. //>>excludeEnd("ctx");
  10925. var timeout = setTimeout(self, aNumber);
  10926. return $globals.Timeout._on_(timeout);
  10927. ;
  10928. return self;
  10929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10930. }, function($ctx1) {$ctx1.fill(self,"valueWithTimeout:",{aNumber:aNumber},$globals.BlockClosure)});
  10931. //>>excludeEnd("ctx");
  10932. },
  10933. //>>excludeStart("ide", pragmas.excludeIdeData);
  10934. args: ["aNumber"],
  10935. source: "valueWithTimeout: aNumber\x0a\x09<\x0a\x09\x09var timeout = setTimeout(self, aNumber);\x0a\x09\x09return $globals.Timeout._on_(timeout);\x0a\x09>",
  10936. referencedClasses: [],
  10937. //>>excludeEnd("ide");
  10938. messageSends: []
  10939. }),
  10940. $globals.BlockClosure);
  10941. $core.addMethod(
  10942. $core.method({
  10943. selector: "whileFalse",
  10944. protocol: 'controlling',
  10945. fn: function (){
  10946. var self=this;
  10947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10948. return $core.withContext(function($ctx1) {
  10949. //>>excludeEnd("ctx");
  10950. self._whileFalse_((function(){
  10951. }));
  10952. return self;
  10953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10954. }, function($ctx1) {$ctx1.fill(self,"whileFalse",{},$globals.BlockClosure)});
  10955. //>>excludeEnd("ctx");
  10956. },
  10957. //>>excludeStart("ide", pragmas.excludeIdeData);
  10958. args: [],
  10959. source: "whileFalse\x0a\x09self whileFalse: []",
  10960. referencedClasses: [],
  10961. //>>excludeEnd("ide");
  10962. messageSends: ["whileFalse:"]
  10963. }),
  10964. $globals.BlockClosure);
  10965. $core.addMethod(
  10966. $core.method({
  10967. selector: "whileFalse:",
  10968. protocol: 'controlling',
  10969. fn: function (aBlock){
  10970. var self=this;
  10971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10972. return $core.withContext(function($ctx1) {
  10973. //>>excludeEnd("ctx");
  10974. while(!$core.assert(self._value())) {aBlock._value()};
  10975. return self;
  10976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10977. }, function($ctx1) {$ctx1.fill(self,"whileFalse:",{aBlock:aBlock},$globals.BlockClosure)});
  10978. //>>excludeEnd("ctx");
  10979. },
  10980. //>>excludeStart("ide", pragmas.excludeIdeData);
  10981. args: ["aBlock"],
  10982. source: "whileFalse: aBlock\x0a\x09<while(!$core.assert(self._value())) {aBlock._value()}>",
  10983. referencedClasses: [],
  10984. //>>excludeEnd("ide");
  10985. messageSends: []
  10986. }),
  10987. $globals.BlockClosure);
  10988. $core.addMethod(
  10989. $core.method({
  10990. selector: "whileTrue",
  10991. protocol: 'controlling',
  10992. fn: function (){
  10993. var self=this;
  10994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  10995. return $core.withContext(function($ctx1) {
  10996. //>>excludeEnd("ctx");
  10997. self._whileTrue_((function(){
  10998. }));
  10999. return self;
  11000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11001. }, function($ctx1) {$ctx1.fill(self,"whileTrue",{},$globals.BlockClosure)});
  11002. //>>excludeEnd("ctx");
  11003. },
  11004. //>>excludeStart("ide", pragmas.excludeIdeData);
  11005. args: [],
  11006. source: "whileTrue\x0a\x09self whileTrue: []",
  11007. referencedClasses: [],
  11008. //>>excludeEnd("ide");
  11009. messageSends: ["whileTrue:"]
  11010. }),
  11011. $globals.BlockClosure);
  11012. $core.addMethod(
  11013. $core.method({
  11014. selector: "whileTrue:",
  11015. protocol: 'controlling',
  11016. fn: function (aBlock){
  11017. var self=this;
  11018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11019. return $core.withContext(function($ctx1) {
  11020. //>>excludeEnd("ctx");
  11021. while($core.assert(self._value())) {aBlock._value()};
  11022. return self;
  11023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11024. }, function($ctx1) {$ctx1.fill(self,"whileTrue:",{aBlock:aBlock},$globals.BlockClosure)});
  11025. //>>excludeEnd("ctx");
  11026. },
  11027. //>>excludeStart("ide", pragmas.excludeIdeData);
  11028. args: ["aBlock"],
  11029. source: "whileTrue: aBlock\x0a\x09<while($core.assert(self._value())) {aBlock._value()}>",
  11030. referencedClasses: [],
  11031. //>>excludeEnd("ide");
  11032. messageSends: []
  11033. }),
  11034. $globals.BlockClosure);
  11035. $core.addClass('CompiledMethod', $globals.Object, [], 'Kernel-Methods');
  11036. //>>excludeStart("ide", pragmas.excludeIdeData);
  11037. $globals.CompiledMethod.comment="I represent a class method of the system. I hold the source and compiled code of a class method.\x0a\x0a## API\x0aMy instances can be accessed using `Behavior >> #methodAt:`\x0a\x0a Object methodAt: 'asString'\x0a\x0aSource code access:\x0a\x0a\x09(String methodAt: 'lines') source\x0a\x0aReferenced classes:\x0a\x0a\x09(String methodAt: 'lines') referencedClasses\x0a\x0aMessages sent from an instance:\x0a\x09\x0a\x09(String methodAt: 'lines') messageSends";
  11038. //>>excludeEnd("ide");
  11039. $core.addMethod(
  11040. $core.method({
  11041. selector: "arguments",
  11042. protocol: 'accessing',
  11043. fn: function (){
  11044. var self=this;
  11045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11046. return $core.withContext(function($ctx1) {
  11047. //>>excludeEnd("ctx");
  11048. return self.args || [];
  11049. return self;
  11050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11051. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.CompiledMethod)});
  11052. //>>excludeEnd("ctx");
  11053. },
  11054. //>>excludeStart("ide", pragmas.excludeIdeData);
  11055. args: [],
  11056. source: "arguments\x0a\x09<return self.args || []>",
  11057. referencedClasses: [],
  11058. //>>excludeEnd("ide");
  11059. messageSends: []
  11060. }),
  11061. $globals.CompiledMethod);
  11062. $core.addMethod(
  11063. $core.method({
  11064. selector: "browse",
  11065. protocol: 'browsing',
  11066. fn: function (){
  11067. var self=this;
  11068. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  11069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11070. return $core.withContext(function($ctx1) {
  11071. //>>excludeEnd("ctx");
  11072. $recv($Finder())._findMethod_(self);
  11073. return self;
  11074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11075. }, function($ctx1) {$ctx1.fill(self,"browse",{},$globals.CompiledMethod)});
  11076. //>>excludeEnd("ctx");
  11077. },
  11078. //>>excludeStart("ide", pragmas.excludeIdeData);
  11079. args: [],
  11080. source: "browse\x0a\x09Finder findMethod: self",
  11081. referencedClasses: ["Finder"],
  11082. //>>excludeEnd("ide");
  11083. messageSends: ["findMethod:"]
  11084. }),
  11085. $globals.CompiledMethod);
  11086. $core.addMethod(
  11087. $core.method({
  11088. selector: "category",
  11089. protocol: 'accessing',
  11090. fn: function (){
  11091. var self=this;
  11092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11093. return $core.withContext(function($ctx1) {
  11094. //>>excludeEnd("ctx");
  11095. var $1;
  11096. $1=self._protocol();
  11097. return $1;
  11098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11099. }, function($ctx1) {$ctx1.fill(self,"category",{},$globals.CompiledMethod)});
  11100. //>>excludeEnd("ctx");
  11101. },
  11102. //>>excludeStart("ide", pragmas.excludeIdeData);
  11103. args: [],
  11104. source: "category\x0a\x09^ self protocol",
  11105. referencedClasses: [],
  11106. //>>excludeEnd("ide");
  11107. messageSends: ["protocol"]
  11108. }),
  11109. $globals.CompiledMethod);
  11110. $core.addMethod(
  11111. $core.method({
  11112. selector: "defaultProtocol",
  11113. protocol: 'defaults',
  11114. fn: function (){
  11115. var self=this;
  11116. return "as yet unclassified";
  11117. },
  11118. //>>excludeStart("ide", pragmas.excludeIdeData);
  11119. args: [],
  11120. source: "defaultProtocol\x0a\x09^ 'as yet unclassified'",
  11121. referencedClasses: [],
  11122. //>>excludeEnd("ide");
  11123. messageSends: []
  11124. }),
  11125. $globals.CompiledMethod);
  11126. $core.addMethod(
  11127. $core.method({
  11128. selector: "fn",
  11129. protocol: 'accessing',
  11130. fn: function (){
  11131. var self=this;
  11132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11133. return $core.withContext(function($ctx1) {
  11134. //>>excludeEnd("ctx");
  11135. var $1;
  11136. $1=self._basicAt_("fn");
  11137. return $1;
  11138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11139. }, function($ctx1) {$ctx1.fill(self,"fn",{},$globals.CompiledMethod)});
  11140. //>>excludeEnd("ctx");
  11141. },
  11142. //>>excludeStart("ide", pragmas.excludeIdeData);
  11143. args: [],
  11144. source: "fn\x0a\x09^ self basicAt: 'fn'",
  11145. referencedClasses: [],
  11146. //>>excludeEnd("ide");
  11147. messageSends: ["basicAt:"]
  11148. }),
  11149. $globals.CompiledMethod);
  11150. $core.addMethod(
  11151. $core.method({
  11152. selector: "fn:",
  11153. protocol: 'accessing',
  11154. fn: function (aBlock){
  11155. var self=this;
  11156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11157. return $core.withContext(function($ctx1) {
  11158. //>>excludeEnd("ctx");
  11159. self._basicAt_put_("fn",aBlock);
  11160. return self;
  11161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11162. }, function($ctx1) {$ctx1.fill(self,"fn:",{aBlock:aBlock},$globals.CompiledMethod)});
  11163. //>>excludeEnd("ctx");
  11164. },
  11165. //>>excludeStart("ide", pragmas.excludeIdeData);
  11166. args: ["aBlock"],
  11167. source: "fn: aBlock\x0a\x09self basicAt: 'fn' put: aBlock",
  11168. referencedClasses: [],
  11169. //>>excludeEnd("ide");
  11170. messageSends: ["basicAt:put:"]
  11171. }),
  11172. $globals.CompiledMethod);
  11173. $core.addMethod(
  11174. $core.method({
  11175. selector: "isCompiledMethod",
  11176. protocol: 'testing',
  11177. fn: function (){
  11178. var self=this;
  11179. return true;
  11180. },
  11181. //>>excludeStart("ide", pragmas.excludeIdeData);
  11182. args: [],
  11183. source: "isCompiledMethod\x0a\x09^ true",
  11184. referencedClasses: [],
  11185. //>>excludeEnd("ide");
  11186. messageSends: []
  11187. }),
  11188. $globals.CompiledMethod);
  11189. $core.addMethod(
  11190. $core.method({
  11191. selector: "isOverridden",
  11192. protocol: 'testing',
  11193. fn: function (){
  11194. var self=this;
  11195. var selector;
  11196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11197. return $core.withContext(function($ctx1) {
  11198. //>>excludeEnd("ctx");
  11199. var $1;
  11200. var $early={};
  11201. try {
  11202. selector=self._selector();
  11203. $recv(self._methodClass())._allSubclassesDo_((function(each){
  11204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11205. return $core.withContext(function($ctx2) {
  11206. //>>excludeEnd("ctx");
  11207. $1=$recv(each)._includesSelector_(selector);
  11208. if($core.assert($1)){
  11209. throw $early=[true];
  11210. };
  11211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11212. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  11213. //>>excludeEnd("ctx");
  11214. }));
  11215. return false;
  11216. }
  11217. catch(e) {if(e===$early)return e[0]; throw e}
  11218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11219. }, function($ctx1) {$ctx1.fill(self,"isOverridden",{selector:selector},$globals.CompiledMethod)});
  11220. //>>excludeEnd("ctx");
  11221. },
  11222. //>>excludeStart("ide", pragmas.excludeIdeData);
  11223. args: [],
  11224. source: "isOverridden\x0a\x09| selector |\x0a \x0a selector := self selector.\x0a self methodClass allSubclassesDo: [ :each |\x0a\x09 (each includesSelector: selector)\x0a \x09ifTrue: [ ^ true ] ].\x0a\x09^ false",
  11225. referencedClasses: [],
  11226. //>>excludeEnd("ide");
  11227. messageSends: ["selector", "allSubclassesDo:", "methodClass", "ifTrue:", "includesSelector:"]
  11228. }),
  11229. $globals.CompiledMethod);
  11230. $core.addMethod(
  11231. $core.method({
  11232. selector: "isOverride",
  11233. protocol: 'testing',
  11234. fn: function (){
  11235. var self=this;
  11236. var superclass;
  11237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11238. return $core.withContext(function($ctx1) {
  11239. //>>excludeEnd("ctx");
  11240. var $1,$2,$3,$receiver;
  11241. $1=self._methodClass();
  11242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11243. $ctx1.sendIdx["methodClass"]=1;
  11244. //>>excludeEnd("ctx");
  11245. superclass=$recv($1)._superclass();
  11246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11247. $ctx1.sendIdx["superclass"]=1;
  11248. //>>excludeEnd("ctx");
  11249. $2=superclass;
  11250. if(($receiver = $2) == null || $receiver.isNil){
  11251. return false;
  11252. } else {
  11253. $2;
  11254. };
  11255. $3=$recv($recv($recv(self._methodClass())._superclass())._lookupSelector_(self._selector()))._notNil();
  11256. return $3;
  11257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11258. }, function($ctx1) {$ctx1.fill(self,"isOverride",{superclass:superclass},$globals.CompiledMethod)});
  11259. //>>excludeEnd("ctx");
  11260. },
  11261. //>>excludeStart("ide", pragmas.excludeIdeData);
  11262. args: [],
  11263. source: "isOverride\x0a\x09| superclass |\x0a \x0a superclass := self methodClass superclass.\x0a\x09superclass ifNil: [ ^ false ].\x0a\x09\x0a ^ (self methodClass superclass lookupSelector: self selector) notNil",
  11264. referencedClasses: [],
  11265. //>>excludeEnd("ide");
  11266. messageSends: ["superclass", "methodClass", "ifNil:", "notNil", "lookupSelector:", "selector"]
  11267. }),
  11268. $globals.CompiledMethod);
  11269. $core.addMethod(
  11270. $core.method({
  11271. selector: "messageSends",
  11272. protocol: 'accessing',
  11273. fn: function (){
  11274. var self=this;
  11275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11276. return $core.withContext(function($ctx1) {
  11277. //>>excludeEnd("ctx");
  11278. var $1;
  11279. $1=self._basicAt_("messageSends");
  11280. return $1;
  11281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11282. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.CompiledMethod)});
  11283. //>>excludeEnd("ctx");
  11284. },
  11285. //>>excludeStart("ide", pragmas.excludeIdeData);
  11286. args: [],
  11287. source: "messageSends\x0a\x09^ self basicAt: 'messageSends'",
  11288. referencedClasses: [],
  11289. //>>excludeEnd("ide");
  11290. messageSends: ["basicAt:"]
  11291. }),
  11292. $globals.CompiledMethod);
  11293. $core.addMethod(
  11294. $core.method({
  11295. selector: "methodClass",
  11296. protocol: 'accessing',
  11297. fn: function (){
  11298. var self=this;
  11299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11300. return $core.withContext(function($ctx1) {
  11301. //>>excludeEnd("ctx");
  11302. var $1;
  11303. $1=self._basicAt_("methodClass");
  11304. return $1;
  11305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11306. }, function($ctx1) {$ctx1.fill(self,"methodClass",{},$globals.CompiledMethod)});
  11307. //>>excludeEnd("ctx");
  11308. },
  11309. //>>excludeStart("ide", pragmas.excludeIdeData);
  11310. args: [],
  11311. source: "methodClass\x0a\x09^ self basicAt: 'methodClass'",
  11312. referencedClasses: [],
  11313. //>>excludeEnd("ide");
  11314. messageSends: ["basicAt:"]
  11315. }),
  11316. $globals.CompiledMethod);
  11317. $core.addMethod(
  11318. $core.method({
  11319. selector: "package",
  11320. protocol: 'accessing',
  11321. fn: function (){
  11322. var self=this;
  11323. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  11324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11325. return $core.withContext(function($ctx1) {
  11326. //>>excludeEnd("ctx");
  11327. var $1,$3,$2,$4,$5,$receiver;
  11328. $1=self._methodClass();
  11329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11330. $ctx1.sendIdx["methodClass"]=1;
  11331. //>>excludeEnd("ctx");
  11332. if(($receiver = $1) == null || $receiver.isNil){
  11333. return nil;
  11334. } else {
  11335. $1;
  11336. };
  11337. $3=self._protocol();
  11338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11339. $ctx1.sendIdx["protocol"]=1;
  11340. //>>excludeEnd("ctx");
  11341. $2=$recv($3)._beginsWith_("*");
  11342. if(!$core.assert($2)){
  11343. $4=$recv(self._methodClass())._package();
  11344. return $4;
  11345. };
  11346. $5=$recv($Package())._named_ifAbsent_($recv(self._protocol())._allButFirst(),(function(){
  11347. return nil;
  11348. }));
  11349. return $5;
  11350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11351. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.CompiledMethod)});
  11352. //>>excludeEnd("ctx");
  11353. },
  11354. //>>excludeStart("ide", pragmas.excludeIdeData);
  11355. args: [],
  11356. source: "package\x0a\x09\x22Answer the package the receiver belongs to:\x0a\x09- if it is an extension method, answer the corresponding package\x0a\x09- else answer the `methodClass` package\x22\x0a\x09\x0a\x09self methodClass ifNil: [ ^ nil ].\x0a\x09\x0a\x09(self protocol beginsWith: '*') ifFalse: [\x0a\x09\x09^ self methodClass package ].\x0a\x09\x09\x0a\x09^ Package \x0a\x09\x09named: self protocol allButFirst\x0a\x09\x09ifAbsent: [ nil ]",
  11357. referencedClasses: ["Package"],
  11358. //>>excludeEnd("ide");
  11359. messageSends: ["ifNil:", "methodClass", "ifFalse:", "beginsWith:", "protocol", "package", "named:ifAbsent:", "allButFirst"]
  11360. }),
  11361. $globals.CompiledMethod);
  11362. $core.addMethod(
  11363. $core.method({
  11364. selector: "protocol",
  11365. protocol: 'accessing',
  11366. fn: function (){
  11367. var self=this;
  11368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11369. return $core.withContext(function($ctx1) {
  11370. //>>excludeEnd("ctx");
  11371. var $2,$1,$receiver;
  11372. $2=self._basicAt_("protocol");
  11373. if(($receiver = $2) == null || $receiver.isNil){
  11374. $1=self._defaultProtocol();
  11375. } else {
  11376. $1=$2;
  11377. };
  11378. return $1;
  11379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11380. }, function($ctx1) {$ctx1.fill(self,"protocol",{},$globals.CompiledMethod)});
  11381. //>>excludeEnd("ctx");
  11382. },
  11383. //>>excludeStart("ide", pragmas.excludeIdeData);
  11384. args: [],
  11385. source: "protocol\x0a\x09^ (self basicAt: 'protocol') ifNil: [ self defaultProtocol ]",
  11386. referencedClasses: [],
  11387. //>>excludeEnd("ide");
  11388. messageSends: ["ifNil:", "basicAt:", "defaultProtocol"]
  11389. }),
  11390. $globals.CompiledMethod);
  11391. $core.addMethod(
  11392. $core.method({
  11393. selector: "protocol:",
  11394. protocol: 'accessing',
  11395. fn: function (aString){
  11396. var self=this;
  11397. var oldProtocol;
  11398. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  11399. function $MethodMoved(){return $globals.MethodMoved||(typeof MethodMoved=="undefined"?nil:MethodMoved)}
  11400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11401. return $core.withContext(function($ctx1) {
  11402. //>>excludeEnd("ctx");
  11403. var $1,$2,$3,$receiver;
  11404. oldProtocol=self._protocol();
  11405. self._basicAt_put_("protocol",aString);
  11406. $1=$recv($MethodMoved())._new();
  11407. $recv($1)._method_(self);
  11408. $recv($1)._oldProtocol_(oldProtocol);
  11409. $2=$recv($1)._yourself();
  11410. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  11411. $3=self._methodClass();
  11412. if(($receiver = $3) == null || $receiver.isNil){
  11413. $3;
  11414. } else {
  11415. var methodClass;
  11416. methodClass=$receiver;
  11417. $recv($recv(methodClass)._organization())._addElement_(aString);
  11418. $recv(methodClass)._removeProtocolIfEmpty_(oldProtocol);
  11419. };
  11420. return self;
  11421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11422. }, function($ctx1) {$ctx1.fill(self,"protocol:",{aString:aString,oldProtocol:oldProtocol},$globals.CompiledMethod)});
  11423. //>>excludeEnd("ctx");
  11424. },
  11425. //>>excludeStart("ide", pragmas.excludeIdeData);
  11426. args: ["aString"],
  11427. source: "protocol: aString\x0a\x09| oldProtocol |\x0a\x09oldProtocol := self protocol.\x0a\x09self basicAt: 'protocol' put: aString.\x0a\x0a\x09SystemAnnouncer current announce: (MethodMoved new\x0a\x09\x09method: self;\x0a\x09\x09oldProtocol: oldProtocol;\x0a\x09\x09yourself).\x0a\x0a\x09self methodClass ifNotNil: [ :methodClass |\x0a\x09\x09methodClass organization addElement: aString.\x0a\x09\x09methodClass removeProtocolIfEmpty: oldProtocol ]",
  11428. referencedClasses: ["SystemAnnouncer", "MethodMoved"],
  11429. //>>excludeEnd("ide");
  11430. messageSends: ["protocol", "basicAt:put:", "announce:", "current", "method:", "new", "oldProtocol:", "yourself", "ifNotNil:", "methodClass", "addElement:", "organization", "removeProtocolIfEmpty:"]
  11431. }),
  11432. $globals.CompiledMethod);
  11433. $core.addMethod(
  11434. $core.method({
  11435. selector: "referencedClasses",
  11436. protocol: 'accessing',
  11437. fn: function (){
  11438. var self=this;
  11439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11440. return $core.withContext(function($ctx1) {
  11441. //>>excludeEnd("ctx");
  11442. var $1;
  11443. $1=self._basicAt_("referencedClasses");
  11444. return $1;
  11445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11446. }, function($ctx1) {$ctx1.fill(self,"referencedClasses",{},$globals.CompiledMethod)});
  11447. //>>excludeEnd("ctx");
  11448. },
  11449. //>>excludeStart("ide", pragmas.excludeIdeData);
  11450. args: [],
  11451. source: "referencedClasses\x0a\x09^ self basicAt: 'referencedClasses'",
  11452. referencedClasses: [],
  11453. //>>excludeEnd("ide");
  11454. messageSends: ["basicAt:"]
  11455. }),
  11456. $globals.CompiledMethod);
  11457. $core.addMethod(
  11458. $core.method({
  11459. selector: "selector",
  11460. protocol: 'accessing',
  11461. fn: function (){
  11462. var self=this;
  11463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11464. return $core.withContext(function($ctx1) {
  11465. //>>excludeEnd("ctx");
  11466. var $1;
  11467. $1=self._basicAt_("selector");
  11468. return $1;
  11469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11470. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.CompiledMethod)});
  11471. //>>excludeEnd("ctx");
  11472. },
  11473. //>>excludeStart("ide", pragmas.excludeIdeData);
  11474. args: [],
  11475. source: "selector\x0a\x09^ self basicAt: 'selector'",
  11476. referencedClasses: [],
  11477. //>>excludeEnd("ide");
  11478. messageSends: ["basicAt:"]
  11479. }),
  11480. $globals.CompiledMethod);
  11481. $core.addMethod(
  11482. $core.method({
  11483. selector: "selector:",
  11484. protocol: 'accessing',
  11485. fn: function (aString){
  11486. var self=this;
  11487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11488. return $core.withContext(function($ctx1) {
  11489. //>>excludeEnd("ctx");
  11490. self._basicAt_put_("selector",aString);
  11491. return self;
  11492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11493. }, function($ctx1) {$ctx1.fill(self,"selector:",{aString:aString},$globals.CompiledMethod)});
  11494. //>>excludeEnd("ctx");
  11495. },
  11496. //>>excludeStart("ide", pragmas.excludeIdeData);
  11497. args: ["aString"],
  11498. source: "selector: aString\x0a\x09self basicAt: 'selector' put: aString",
  11499. referencedClasses: [],
  11500. //>>excludeEnd("ide");
  11501. messageSends: ["basicAt:put:"]
  11502. }),
  11503. $globals.CompiledMethod);
  11504. $core.addMethod(
  11505. $core.method({
  11506. selector: "sendTo:arguments:",
  11507. protocol: 'evaluating',
  11508. fn: function (anObject,aCollection){
  11509. var self=this;
  11510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11511. return $core.withContext(function($ctx1) {
  11512. //>>excludeEnd("ctx");
  11513. var $1;
  11514. $1=$recv(self._fn())._applyTo_arguments_(anObject,aCollection);
  11515. return $1;
  11516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11517. }, function($ctx1) {$ctx1.fill(self,"sendTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.CompiledMethod)});
  11518. //>>excludeEnd("ctx");
  11519. },
  11520. //>>excludeStart("ide", pragmas.excludeIdeData);
  11521. args: ["anObject", "aCollection"],
  11522. source: "sendTo: anObject arguments: aCollection\x0a\x09^ self fn applyTo: anObject arguments: aCollection",
  11523. referencedClasses: [],
  11524. //>>excludeEnd("ide");
  11525. messageSends: ["applyTo:arguments:", "fn"]
  11526. }),
  11527. $globals.CompiledMethod);
  11528. $core.addMethod(
  11529. $core.method({
  11530. selector: "source",
  11531. protocol: 'accessing',
  11532. fn: function (){
  11533. var self=this;
  11534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11535. return $core.withContext(function($ctx1) {
  11536. //>>excludeEnd("ctx");
  11537. var $2,$1,$receiver;
  11538. $2=self._basicAt_("source");
  11539. if(($receiver = $2) == null || $receiver.isNil){
  11540. $1="";
  11541. } else {
  11542. $1=$2;
  11543. };
  11544. return $1;
  11545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11546. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.CompiledMethod)});
  11547. //>>excludeEnd("ctx");
  11548. },
  11549. //>>excludeStart("ide", pragmas.excludeIdeData);
  11550. args: [],
  11551. source: "source\x0a\x09^ (self basicAt: 'source') ifNil: [ '' ]",
  11552. referencedClasses: [],
  11553. //>>excludeEnd("ide");
  11554. messageSends: ["ifNil:", "basicAt:"]
  11555. }),
  11556. $globals.CompiledMethod);
  11557. $core.addMethod(
  11558. $core.method({
  11559. selector: "source:",
  11560. protocol: 'accessing',
  11561. fn: function (aString){
  11562. var self=this;
  11563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11564. return $core.withContext(function($ctx1) {
  11565. //>>excludeEnd("ctx");
  11566. self._basicAt_put_("source",aString);
  11567. return self;
  11568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11569. }, function($ctx1) {$ctx1.fill(self,"source:",{aString:aString},$globals.CompiledMethod)});
  11570. //>>excludeEnd("ctx");
  11571. },
  11572. //>>excludeStart("ide", pragmas.excludeIdeData);
  11573. args: ["aString"],
  11574. source: "source: aString\x0a\x09self basicAt: 'source' put: aString",
  11575. referencedClasses: [],
  11576. //>>excludeEnd("ide");
  11577. messageSends: ["basicAt:put:"]
  11578. }),
  11579. $globals.CompiledMethod);
  11580. $core.addClass('ForkPool', $globals.Object, ['poolSize', 'maxPoolSize', 'queue', 'worker'], 'Kernel-Methods');
  11581. //>>excludeStart("ide", pragmas.excludeIdeData);
  11582. $globals.ForkPool.comment="I am responsible for handling forked blocks.\x0aThe pool size sets the maximum concurrent forked blocks.\x0a\x0a## API\x0a\x0aThe default instance is accessed with `#default`.\x0aThe maximum concurrent forked blocks can be set with `#maxPoolSize:`.\x0a\x0aForking is done via `BlockClosure >> #fork`";
  11583. //>>excludeEnd("ide");
  11584. $core.addMethod(
  11585. $core.method({
  11586. selector: "addWorker",
  11587. protocol: 'private',
  11588. fn: function (){
  11589. var self=this;
  11590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11591. return $core.withContext(function($ctx1) {
  11592. //>>excludeEnd("ctx");
  11593. $recv(self["@worker"])._valueWithTimeout_((0));
  11594. self["@poolSize"]=$recv(self["@poolSize"]).__plus((1));
  11595. return self;
  11596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11597. }, function($ctx1) {$ctx1.fill(self,"addWorker",{},$globals.ForkPool)});
  11598. //>>excludeEnd("ctx");
  11599. },
  11600. //>>excludeStart("ide", pragmas.excludeIdeData);
  11601. args: [],
  11602. source: "addWorker\x0a\x09worker valueWithTimeout: 0.\x0a\x09poolSize := poolSize + 1",
  11603. referencedClasses: [],
  11604. //>>excludeEnd("ide");
  11605. messageSends: ["valueWithTimeout:", "+"]
  11606. }),
  11607. $globals.ForkPool);
  11608. $core.addMethod(
  11609. $core.method({
  11610. selector: "defaultMaxPoolSize",
  11611. protocol: 'defaults',
  11612. fn: function (){
  11613. var self=this;
  11614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11615. return $core.withContext(function($ctx1) {
  11616. //>>excludeEnd("ctx");
  11617. var $1;
  11618. $1=$recv(self._class())._defaultMaxPoolSize();
  11619. return $1;
  11620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11621. }, function($ctx1) {$ctx1.fill(self,"defaultMaxPoolSize",{},$globals.ForkPool)});
  11622. //>>excludeEnd("ctx");
  11623. },
  11624. //>>excludeStart("ide", pragmas.excludeIdeData);
  11625. args: [],
  11626. source: "defaultMaxPoolSize\x0a\x09^ self class defaultMaxPoolSize",
  11627. referencedClasses: [],
  11628. //>>excludeEnd("ide");
  11629. messageSends: ["defaultMaxPoolSize", "class"]
  11630. }),
  11631. $globals.ForkPool);
  11632. $core.addMethod(
  11633. $core.method({
  11634. selector: "fork:",
  11635. protocol: 'actions',
  11636. fn: function (aBlock){
  11637. var self=this;
  11638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11639. return $core.withContext(function($ctx1) {
  11640. //>>excludeEnd("ctx");
  11641. var $1;
  11642. $1=$recv(self["@poolSize"]).__lt(self._maxPoolSize());
  11643. if($core.assert($1)){
  11644. self._addWorker();
  11645. };
  11646. $recv(self["@queue"])._nextPut_(aBlock);
  11647. return self;
  11648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11649. }, function($ctx1) {$ctx1.fill(self,"fork:",{aBlock:aBlock},$globals.ForkPool)});
  11650. //>>excludeEnd("ctx");
  11651. },
  11652. //>>excludeStart("ide", pragmas.excludeIdeData);
  11653. args: ["aBlock"],
  11654. source: "fork: aBlock\x0a\x09poolSize < self maxPoolSize ifTrue: [ self addWorker ].\x0a\x09queue nextPut: aBlock",
  11655. referencedClasses: [],
  11656. //>>excludeEnd("ide");
  11657. messageSends: ["ifTrue:", "<", "maxPoolSize", "addWorker", "nextPut:"]
  11658. }),
  11659. $globals.ForkPool);
  11660. $core.addMethod(
  11661. $core.method({
  11662. selector: "initialize",
  11663. protocol: 'initialization',
  11664. fn: function (){
  11665. var self=this;
  11666. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  11667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11668. return $core.withContext(function($ctx1) {
  11669. //>>excludeEnd("ctx");
  11670. (
  11671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11672. $ctx1.supercall = true,
  11673. //>>excludeEnd("ctx");
  11674. $globals.ForkPool.superclass.fn.prototype._initialize.apply($recv(self), []));
  11675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11676. $ctx1.supercall = false;
  11677. //>>excludeEnd("ctx");;
  11678. self["@poolSize"]=(0);
  11679. self["@queue"]=$recv($Queue())._new();
  11680. self["@worker"]=self._makeWorker();
  11681. return self;
  11682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11683. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ForkPool)});
  11684. //>>excludeEnd("ctx");
  11685. },
  11686. //>>excludeStart("ide", pragmas.excludeIdeData);
  11687. args: [],
  11688. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09poolSize := 0.\x0a\x09queue := Queue new.\x0a\x09worker := self makeWorker",
  11689. referencedClasses: ["Queue"],
  11690. //>>excludeEnd("ide");
  11691. messageSends: ["initialize", "new", "makeWorker"]
  11692. }),
  11693. $globals.ForkPool);
  11694. $core.addMethod(
  11695. $core.method({
  11696. selector: "makeWorker",
  11697. protocol: 'initialization',
  11698. fn: function (){
  11699. var self=this;
  11700. var sentinel;
  11701. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  11702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11703. return $core.withContext(function($ctx1) {
  11704. //>>excludeEnd("ctx");
  11705. var $2,$1;
  11706. sentinel=$recv($Object())._new();
  11707. $1=(function(){
  11708. var block;
  11709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11710. return $core.withContext(function($ctx2) {
  11711. //>>excludeEnd("ctx");
  11712. self["@poolSize"]=$recv(self["@poolSize"]).__minus((1));
  11713. self["@poolSize"];
  11714. block=$recv(self["@queue"])._nextIfAbsent_((function(){
  11715. return sentinel;
  11716. }));
  11717. block;
  11718. $2=$recv(block).__eq_eq(sentinel);
  11719. if(!$core.assert($2)){
  11720. return $recv((function(){
  11721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11722. return $core.withContext(function($ctx3) {
  11723. //>>excludeEnd("ctx");
  11724. return $recv(block)._value();
  11725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11726. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  11727. //>>excludeEnd("ctx");
  11728. }))._ensure_((function(){
  11729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11730. return $core.withContext(function($ctx3) {
  11731. //>>excludeEnd("ctx");
  11732. return self._addWorker();
  11733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11734. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  11735. //>>excludeEnd("ctx");
  11736. }));
  11737. };
  11738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11739. }, function($ctx2) {$ctx2.fillBlock({block:block},$ctx1,1)});
  11740. //>>excludeEnd("ctx");
  11741. });
  11742. return $1;
  11743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11744. }, function($ctx1) {$ctx1.fill(self,"makeWorker",{sentinel:sentinel},$globals.ForkPool)});
  11745. //>>excludeEnd("ctx");
  11746. },
  11747. //>>excludeStart("ide", pragmas.excludeIdeData);
  11748. args: [],
  11749. source: "makeWorker\x0a\x09| sentinel |\x0a\x09sentinel := Object new.\x0a\x09^ [ | block |\x0a\x09\x09poolSize := poolSize - 1.\x0a\x09\x09block := queue nextIfAbsent: [ sentinel ].\x0a\x09\x09block == sentinel ifFalse: [\x0a\x09\x09\x09[ block value ] ensure: [ self addWorker ] ]]",
  11750. referencedClasses: ["Object"],
  11751. //>>excludeEnd("ide");
  11752. messageSends: ["new", "-", "nextIfAbsent:", "ifFalse:", "==", "ensure:", "value", "addWorker"]
  11753. }),
  11754. $globals.ForkPool);
  11755. $core.addMethod(
  11756. $core.method({
  11757. selector: "maxPoolSize",
  11758. protocol: 'accessing',
  11759. fn: function (){
  11760. var self=this;
  11761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11762. return $core.withContext(function($ctx1) {
  11763. //>>excludeEnd("ctx");
  11764. var $2,$1,$receiver;
  11765. $2=self["@maxPoolSize"];
  11766. if(($receiver = $2) == null || $receiver.isNil){
  11767. $1=self._defaultMaxPoolSize();
  11768. } else {
  11769. $1=$2;
  11770. };
  11771. return $1;
  11772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11773. }, function($ctx1) {$ctx1.fill(self,"maxPoolSize",{},$globals.ForkPool)});
  11774. //>>excludeEnd("ctx");
  11775. },
  11776. //>>excludeStart("ide", pragmas.excludeIdeData);
  11777. args: [],
  11778. source: "maxPoolSize\x0a\x09^ maxPoolSize ifNil: [ self defaultMaxPoolSize ]",
  11779. referencedClasses: [],
  11780. //>>excludeEnd("ide");
  11781. messageSends: ["ifNil:", "defaultMaxPoolSize"]
  11782. }),
  11783. $globals.ForkPool);
  11784. $core.addMethod(
  11785. $core.method({
  11786. selector: "maxPoolSize:",
  11787. protocol: 'accessing',
  11788. fn: function (anInteger){
  11789. var self=this;
  11790. self["@maxPoolSize"]=anInteger;
  11791. return self;
  11792. },
  11793. //>>excludeStart("ide", pragmas.excludeIdeData);
  11794. args: ["anInteger"],
  11795. source: "maxPoolSize: anInteger\x0a\x09maxPoolSize := anInteger",
  11796. referencedClasses: [],
  11797. //>>excludeEnd("ide");
  11798. messageSends: []
  11799. }),
  11800. $globals.ForkPool);
  11801. $globals.ForkPool.klass.iVarNames = ['default'];
  11802. $core.addMethod(
  11803. $core.method({
  11804. selector: "default",
  11805. protocol: 'accessing',
  11806. fn: function (){
  11807. var self=this;
  11808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11809. return $core.withContext(function($ctx1) {
  11810. //>>excludeEnd("ctx");
  11811. var $2,$1,$receiver;
  11812. $2=self["@default"];
  11813. if(($receiver = $2) == null || $receiver.isNil){
  11814. self["@default"]=self._new();
  11815. $1=self["@default"];
  11816. } else {
  11817. $1=$2;
  11818. };
  11819. return $1;
  11820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11821. }, function($ctx1) {$ctx1.fill(self,"default",{},$globals.ForkPool.klass)});
  11822. //>>excludeEnd("ctx");
  11823. },
  11824. //>>excludeStart("ide", pragmas.excludeIdeData);
  11825. args: [],
  11826. source: "default\x0a\x09^ default ifNil: [ default := self new ]",
  11827. referencedClasses: [],
  11828. //>>excludeEnd("ide");
  11829. messageSends: ["ifNil:", "new"]
  11830. }),
  11831. $globals.ForkPool.klass);
  11832. $core.addMethod(
  11833. $core.method({
  11834. selector: "defaultMaxPoolSize",
  11835. protocol: 'accessing',
  11836. fn: function (){
  11837. var self=this;
  11838. return (100);
  11839. },
  11840. //>>excludeStart("ide", pragmas.excludeIdeData);
  11841. args: [],
  11842. source: "defaultMaxPoolSize\x0a\x09^ 100",
  11843. referencedClasses: [],
  11844. //>>excludeEnd("ide");
  11845. messageSends: []
  11846. }),
  11847. $globals.ForkPool.klass);
  11848. $core.addMethod(
  11849. $core.method({
  11850. selector: "resetDefault",
  11851. protocol: 'accessing',
  11852. fn: function (){
  11853. var self=this;
  11854. self["@default"]=nil;
  11855. return self;
  11856. },
  11857. //>>excludeStart("ide", pragmas.excludeIdeData);
  11858. args: [],
  11859. source: "resetDefault\x0a\x09default := nil",
  11860. referencedClasses: [],
  11861. //>>excludeEnd("ide");
  11862. messageSends: []
  11863. }),
  11864. $globals.ForkPool.klass);
  11865. $core.addClass('Message', $globals.Object, ['selector', 'arguments'], 'Kernel-Methods');
  11866. //>>excludeStart("ide", pragmas.excludeIdeData);
  11867. $globals.Message.comment="In general, the system does not use instances of me for efficiency reasons.\x0aHowever, when a message is not understood by its receiver, the interpreter will make up an instance of it in order to capture the information involved in an actual message transmission.\x0aThis instance is sent it as an argument with the message `#doesNotUnderstand:` to the receiver.\x0a\x0aSee boot.js, `messageNotUnderstood` and its counterpart `Object >> #doesNotUnderstand:`\x0a\x0a## API\x0a\x0aBesides accessing methods, `#sendTo:` provides a convenient way to send a message to an object.";
  11868. //>>excludeEnd("ide");
  11869. $core.addMethod(
  11870. $core.method({
  11871. selector: "arguments",
  11872. protocol: 'accessing',
  11873. fn: function (){
  11874. var self=this;
  11875. var $1;
  11876. $1=self["@arguments"];
  11877. return $1;
  11878. },
  11879. //>>excludeStart("ide", pragmas.excludeIdeData);
  11880. args: [],
  11881. source: "arguments\x0a\x09^ arguments",
  11882. referencedClasses: [],
  11883. //>>excludeEnd("ide");
  11884. messageSends: []
  11885. }),
  11886. $globals.Message);
  11887. $core.addMethod(
  11888. $core.method({
  11889. selector: "arguments:",
  11890. protocol: 'accessing',
  11891. fn: function (anArray){
  11892. var self=this;
  11893. self["@arguments"]=anArray;
  11894. return self;
  11895. },
  11896. //>>excludeStart("ide", pragmas.excludeIdeData);
  11897. args: ["anArray"],
  11898. source: "arguments: anArray\x0a\x09arguments := anArray",
  11899. referencedClasses: [],
  11900. //>>excludeEnd("ide");
  11901. messageSends: []
  11902. }),
  11903. $globals.Message);
  11904. $core.addMethod(
  11905. $core.method({
  11906. selector: "printOn:",
  11907. protocol: 'printing',
  11908. fn: function (aStream){
  11909. var self=this;
  11910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11911. return $core.withContext(function($ctx1) {
  11912. //>>excludeEnd("ctx");
  11913. var $1;
  11914. (
  11915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11916. $ctx1.supercall = true,
  11917. //>>excludeEnd("ctx");
  11918. $globals.Message.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  11919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11920. $ctx1.supercall = false;
  11921. //>>excludeEnd("ctx");;
  11922. $recv(aStream)._nextPutAll_("(");
  11923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11924. $ctx1.sendIdx["nextPutAll:"]=1;
  11925. //>>excludeEnd("ctx");
  11926. $recv(aStream)._nextPutAll_(self._selector());
  11927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11928. $ctx1.sendIdx["nextPutAll:"]=2;
  11929. //>>excludeEnd("ctx");
  11930. $1=$recv(aStream)._nextPutAll_(")");
  11931. return self;
  11932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11933. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Message)});
  11934. //>>excludeEnd("ctx");
  11935. },
  11936. //>>excludeStart("ide", pragmas.excludeIdeData);
  11937. args: ["aStream"],
  11938. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self selector;\x0a\x09\x09nextPutAll: ')'",
  11939. referencedClasses: [],
  11940. //>>excludeEnd("ide");
  11941. messageSends: ["printOn:", "nextPutAll:", "selector"]
  11942. }),
  11943. $globals.Message);
  11944. $core.addMethod(
  11945. $core.method({
  11946. selector: "selector",
  11947. protocol: 'accessing',
  11948. fn: function (){
  11949. var self=this;
  11950. var $1;
  11951. $1=self["@selector"];
  11952. return $1;
  11953. },
  11954. //>>excludeStart("ide", pragmas.excludeIdeData);
  11955. args: [],
  11956. source: "selector\x0a\x09^ selector",
  11957. referencedClasses: [],
  11958. //>>excludeEnd("ide");
  11959. messageSends: []
  11960. }),
  11961. $globals.Message);
  11962. $core.addMethod(
  11963. $core.method({
  11964. selector: "selector:",
  11965. protocol: 'accessing',
  11966. fn: function (aString){
  11967. var self=this;
  11968. self["@selector"]=aString;
  11969. return self;
  11970. },
  11971. //>>excludeStart("ide", pragmas.excludeIdeData);
  11972. args: ["aString"],
  11973. source: "selector: aString\x0a\x09selector := aString",
  11974. referencedClasses: [],
  11975. //>>excludeEnd("ide");
  11976. messageSends: []
  11977. }),
  11978. $globals.Message);
  11979. $core.addMethod(
  11980. $core.method({
  11981. selector: "sendTo:",
  11982. protocol: 'actions',
  11983. fn: function (anObject){
  11984. var self=this;
  11985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11986. return $core.withContext(function($ctx1) {
  11987. //>>excludeEnd("ctx");
  11988. var $1;
  11989. $1=$recv(anObject)._perform_withArguments_(self._selector(),self._arguments());
  11990. return $1;
  11991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  11992. }, function($ctx1) {$ctx1.fill(self,"sendTo:",{anObject:anObject},$globals.Message)});
  11993. //>>excludeEnd("ctx");
  11994. },
  11995. //>>excludeStart("ide", pragmas.excludeIdeData);
  11996. args: ["anObject"],
  11997. source: "sendTo: anObject\x0a\x09^ anObject perform: self selector withArguments: self arguments",
  11998. referencedClasses: [],
  11999. //>>excludeEnd("ide");
  12000. messageSends: ["perform:withArguments:", "selector", "arguments"]
  12001. }),
  12002. $globals.Message);
  12003. $core.addMethod(
  12004. $core.method({
  12005. selector: "selector:arguments:",
  12006. protocol: 'instance creation',
  12007. fn: function (aString,anArray){
  12008. var self=this;
  12009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12010. return $core.withContext(function($ctx1) {
  12011. //>>excludeEnd("ctx");
  12012. var $2,$3,$1;
  12013. $2=self._new();
  12014. $recv($2)._selector_(aString);
  12015. $recv($2)._arguments_(anArray);
  12016. $3=$recv($2)._yourself();
  12017. $1=$3;
  12018. return $1;
  12019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12020. }, function($ctx1) {$ctx1.fill(self,"selector:arguments:",{aString:aString,anArray:anArray},$globals.Message.klass)});
  12021. //>>excludeEnd("ctx");
  12022. },
  12023. //>>excludeStart("ide", pragmas.excludeIdeData);
  12024. args: ["aString", "anArray"],
  12025. source: "selector: aString arguments: anArray\x0a\x09^ self new\x0a\x09\x09selector: aString;\x0a\x09\x09arguments: anArray;\x0a\x09\x09yourself",
  12026. referencedClasses: [],
  12027. //>>excludeEnd("ide");
  12028. messageSends: ["selector:", "new", "arguments:", "yourself"]
  12029. }),
  12030. $globals.Message.klass);
  12031. $core.addClass('MessageSend', $globals.Object, ['receiver', 'message'], 'Kernel-Methods');
  12032. //>>excludeStart("ide", pragmas.excludeIdeData);
  12033. $globals.MessageSend.comment="I encapsulate message sends to objects. Arguments can be either predefined or supplied when the message send is performed. \x0a\x0a## API\x0a\x0aUse `#value` to perform a message send with its predefined arguments and `#value:*` if additonal arguments have to supplied.";
  12034. //>>excludeEnd("ide");
  12035. $core.addMethod(
  12036. $core.method({
  12037. selector: "arguments",
  12038. protocol: 'accessing',
  12039. fn: function (){
  12040. var self=this;
  12041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12042. return $core.withContext(function($ctx1) {
  12043. //>>excludeEnd("ctx");
  12044. var $1;
  12045. $1=$recv(self["@message"])._arguments();
  12046. return $1;
  12047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12048. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.MessageSend)});
  12049. //>>excludeEnd("ctx");
  12050. },
  12051. //>>excludeStart("ide", pragmas.excludeIdeData);
  12052. args: [],
  12053. source: "arguments\x0a\x09^ message arguments",
  12054. referencedClasses: [],
  12055. //>>excludeEnd("ide");
  12056. messageSends: ["arguments"]
  12057. }),
  12058. $globals.MessageSend);
  12059. $core.addMethod(
  12060. $core.method({
  12061. selector: "arguments:",
  12062. protocol: 'accessing',
  12063. fn: function (aCollection){
  12064. var self=this;
  12065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12066. return $core.withContext(function($ctx1) {
  12067. //>>excludeEnd("ctx");
  12068. $recv(self["@message"])._arguments_(aCollection);
  12069. return self;
  12070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12071. }, function($ctx1) {$ctx1.fill(self,"arguments:",{aCollection:aCollection},$globals.MessageSend)});
  12072. //>>excludeEnd("ctx");
  12073. },
  12074. //>>excludeStart("ide", pragmas.excludeIdeData);
  12075. args: ["aCollection"],
  12076. source: "arguments: aCollection\x0a\x09message arguments: aCollection",
  12077. referencedClasses: [],
  12078. //>>excludeEnd("ide");
  12079. messageSends: ["arguments:"]
  12080. }),
  12081. $globals.MessageSend);
  12082. $core.addMethod(
  12083. $core.method({
  12084. selector: "initialize",
  12085. protocol: 'initialization',
  12086. fn: function (){
  12087. var self=this;
  12088. function $Message(){return $globals.Message||(typeof Message=="undefined"?nil:Message)}
  12089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12090. return $core.withContext(function($ctx1) {
  12091. //>>excludeEnd("ctx");
  12092. (
  12093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12094. $ctx1.supercall = true,
  12095. //>>excludeEnd("ctx");
  12096. $globals.MessageSend.superclass.fn.prototype._initialize.apply($recv(self), []));
  12097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12098. $ctx1.supercall = false;
  12099. //>>excludeEnd("ctx");;
  12100. self["@message"]=$recv($Message())._new();
  12101. return self;
  12102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12103. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.MessageSend)});
  12104. //>>excludeEnd("ctx");
  12105. },
  12106. //>>excludeStart("ide", pragmas.excludeIdeData);
  12107. args: [],
  12108. source: "initialize\x0a\x09super initialize.\x0a\x09message := Message new",
  12109. referencedClasses: ["Message"],
  12110. //>>excludeEnd("ide");
  12111. messageSends: ["initialize", "new"]
  12112. }),
  12113. $globals.MessageSend);
  12114. $core.addMethod(
  12115. $core.method({
  12116. selector: "printOn:",
  12117. protocol: 'printing',
  12118. fn: function (aStream){
  12119. var self=this;
  12120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12121. return $core.withContext(function($ctx1) {
  12122. //>>excludeEnd("ctx");
  12123. var $1;
  12124. (
  12125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12126. $ctx1.supercall = true,
  12127. //>>excludeEnd("ctx");
  12128. $globals.MessageSend.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  12129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12130. $ctx1.supercall = false;
  12131. //>>excludeEnd("ctx");;
  12132. $recv(aStream)._nextPutAll_("(");
  12133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12134. $ctx1.sendIdx["nextPutAll:"]=1;
  12135. //>>excludeEnd("ctx");
  12136. $recv(aStream)._nextPutAll_(self._receiver());
  12137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12138. $ctx1.sendIdx["nextPutAll:"]=2;
  12139. //>>excludeEnd("ctx");
  12140. $recv(aStream)._nextPutAll_(" >> ");
  12141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12142. $ctx1.sendIdx["nextPutAll:"]=3;
  12143. //>>excludeEnd("ctx");
  12144. $recv(aStream)._nextPutAll_(self._selector());
  12145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12146. $ctx1.sendIdx["nextPutAll:"]=4;
  12147. //>>excludeEnd("ctx");
  12148. $1=$recv(aStream)._nextPutAll_(")");
  12149. return self;
  12150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12151. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.MessageSend)});
  12152. //>>excludeEnd("ctx");
  12153. },
  12154. //>>excludeStart("ide", pragmas.excludeIdeData);
  12155. args: ["aStream"],
  12156. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self receiver;\x0a\x09\x09nextPutAll: ' >> ';\x0a\x09\x09nextPutAll: self selector;\x0a\x09\x09nextPutAll: ')'",
  12157. referencedClasses: [],
  12158. //>>excludeEnd("ide");
  12159. messageSends: ["printOn:", "nextPutAll:", "receiver", "selector"]
  12160. }),
  12161. $globals.MessageSend);
  12162. $core.addMethod(
  12163. $core.method({
  12164. selector: "receiver",
  12165. protocol: 'accessing',
  12166. fn: function (){
  12167. var self=this;
  12168. var $1;
  12169. $1=self["@receiver"];
  12170. return $1;
  12171. },
  12172. //>>excludeStart("ide", pragmas.excludeIdeData);
  12173. args: [],
  12174. source: "receiver\x0a\x09^ receiver",
  12175. referencedClasses: [],
  12176. //>>excludeEnd("ide");
  12177. messageSends: []
  12178. }),
  12179. $globals.MessageSend);
  12180. $core.addMethod(
  12181. $core.method({
  12182. selector: "receiver:",
  12183. protocol: 'accessing',
  12184. fn: function (anObject){
  12185. var self=this;
  12186. self["@receiver"]=anObject;
  12187. return self;
  12188. },
  12189. //>>excludeStart("ide", pragmas.excludeIdeData);
  12190. args: ["anObject"],
  12191. source: "receiver: anObject\x0a\x09receiver := anObject",
  12192. referencedClasses: [],
  12193. //>>excludeEnd("ide");
  12194. messageSends: []
  12195. }),
  12196. $globals.MessageSend);
  12197. $core.addMethod(
  12198. $core.method({
  12199. selector: "selector",
  12200. protocol: 'accessing',
  12201. fn: function (){
  12202. var self=this;
  12203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12204. return $core.withContext(function($ctx1) {
  12205. //>>excludeEnd("ctx");
  12206. var $1;
  12207. $1=$recv(self["@message"])._selector();
  12208. return $1;
  12209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12210. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.MessageSend)});
  12211. //>>excludeEnd("ctx");
  12212. },
  12213. //>>excludeStart("ide", pragmas.excludeIdeData);
  12214. args: [],
  12215. source: "selector\x0a\x09^ message selector",
  12216. referencedClasses: [],
  12217. //>>excludeEnd("ide");
  12218. messageSends: ["selector"]
  12219. }),
  12220. $globals.MessageSend);
  12221. $core.addMethod(
  12222. $core.method({
  12223. selector: "selector:",
  12224. protocol: 'accessing',
  12225. fn: function (aString){
  12226. var self=this;
  12227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12228. return $core.withContext(function($ctx1) {
  12229. //>>excludeEnd("ctx");
  12230. $recv(self["@message"])._selector_(aString);
  12231. return self;
  12232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12233. }, function($ctx1) {$ctx1.fill(self,"selector:",{aString:aString},$globals.MessageSend)});
  12234. //>>excludeEnd("ctx");
  12235. },
  12236. //>>excludeStart("ide", pragmas.excludeIdeData);
  12237. args: ["aString"],
  12238. source: "selector: aString\x0a\x09message selector: aString",
  12239. referencedClasses: [],
  12240. //>>excludeEnd("ide");
  12241. messageSends: ["selector:"]
  12242. }),
  12243. $globals.MessageSend);
  12244. $core.addMethod(
  12245. $core.method({
  12246. selector: "value",
  12247. protocol: 'evaluating',
  12248. fn: function (){
  12249. var self=this;
  12250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12251. return $core.withContext(function($ctx1) {
  12252. //>>excludeEnd("ctx");
  12253. var $1;
  12254. $1=$recv(self["@message"])._sendTo_(self._receiver());
  12255. return $1;
  12256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12257. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.MessageSend)});
  12258. //>>excludeEnd("ctx");
  12259. },
  12260. //>>excludeStart("ide", pragmas.excludeIdeData);
  12261. args: [],
  12262. source: "value\x0a\x09^ message sendTo: self receiver",
  12263. referencedClasses: [],
  12264. //>>excludeEnd("ide");
  12265. messageSends: ["sendTo:", "receiver"]
  12266. }),
  12267. $globals.MessageSend);
  12268. $core.addMethod(
  12269. $core.method({
  12270. selector: "value:",
  12271. protocol: 'evaluating',
  12272. fn: function (anObject){
  12273. var self=this;
  12274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12275. return $core.withContext(function($ctx1) {
  12276. //>>excludeEnd("ctx");
  12277. var $2,$3,$1;
  12278. $2=self["@message"];
  12279. $recv($2)._arguments_([anObject]);
  12280. $3=$recv($2)._sendTo_(self._receiver());
  12281. $1=$3;
  12282. return $1;
  12283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12284. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.MessageSend)});
  12285. //>>excludeEnd("ctx");
  12286. },
  12287. //>>excludeStart("ide", pragmas.excludeIdeData);
  12288. args: ["anObject"],
  12289. source: "value: anObject\x0a\x09^ message \x0a\x09\x09arguments: { anObject };\x0a\x09\x09sendTo: self receiver",
  12290. referencedClasses: [],
  12291. //>>excludeEnd("ide");
  12292. messageSends: ["arguments:", "sendTo:", "receiver"]
  12293. }),
  12294. $globals.MessageSend);
  12295. $core.addMethod(
  12296. $core.method({
  12297. selector: "value:value:",
  12298. protocol: 'evaluating',
  12299. fn: function (firstArgument,secondArgument){
  12300. var self=this;
  12301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12302. return $core.withContext(function($ctx1) {
  12303. //>>excludeEnd("ctx");
  12304. var $2,$3,$1;
  12305. $2=self["@message"];
  12306. $recv($2)._arguments_([firstArgument,secondArgument]);
  12307. $3=$recv($2)._sendTo_(self._receiver());
  12308. $1=$3;
  12309. return $1;
  12310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12311. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArgument:firstArgument,secondArgument:secondArgument},$globals.MessageSend)});
  12312. //>>excludeEnd("ctx");
  12313. },
  12314. //>>excludeStart("ide", pragmas.excludeIdeData);
  12315. args: ["firstArgument", "secondArgument"],
  12316. source: "value: firstArgument value: secondArgument\x0a\x09^ message \x0a\x09\x09arguments: { firstArgument. secondArgument };\x0a\x09\x09sendTo: self receiver",
  12317. referencedClasses: [],
  12318. //>>excludeEnd("ide");
  12319. messageSends: ["arguments:", "sendTo:", "receiver"]
  12320. }),
  12321. $globals.MessageSend);
  12322. $core.addMethod(
  12323. $core.method({
  12324. selector: "value:value:value:",
  12325. protocol: 'evaluating',
  12326. fn: function (firstArgument,secondArgument,thirdArgument){
  12327. var self=this;
  12328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12329. return $core.withContext(function($ctx1) {
  12330. //>>excludeEnd("ctx");
  12331. var $2,$3,$1;
  12332. $2=self["@message"];
  12333. $recv($2)._arguments_([firstArgument,secondArgument,thirdArgument]);
  12334. $3=$recv($2)._sendTo_(self._receiver());
  12335. $1=$3;
  12336. return $1;
  12337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12338. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArgument:firstArgument,secondArgument:secondArgument,thirdArgument:thirdArgument},$globals.MessageSend)});
  12339. //>>excludeEnd("ctx");
  12340. },
  12341. //>>excludeStart("ide", pragmas.excludeIdeData);
  12342. args: ["firstArgument", "secondArgument", "thirdArgument"],
  12343. source: "value: firstArgument value: secondArgument value: thirdArgument\x0a\x09^ message \x0a\x09\x09arguments: { firstArgument. secondArgument. thirdArgument };\x0a\x09\x09sendTo: self receiver",
  12344. referencedClasses: [],
  12345. //>>excludeEnd("ide");
  12346. messageSends: ["arguments:", "sendTo:", "receiver"]
  12347. }),
  12348. $globals.MessageSend);
  12349. $core.addMethod(
  12350. $core.method({
  12351. selector: "valueWithPossibleArguments:",
  12352. protocol: 'evaluating',
  12353. fn: function (aCollection){
  12354. var self=this;
  12355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12356. return $core.withContext(function($ctx1) {
  12357. //>>excludeEnd("ctx");
  12358. var $1;
  12359. self._arguments_(aCollection);
  12360. $1=self._value();
  12361. return $1;
  12362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12363. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection},$globals.MessageSend)});
  12364. //>>excludeEnd("ctx");
  12365. },
  12366. //>>excludeStart("ide", pragmas.excludeIdeData);
  12367. args: ["aCollection"],
  12368. source: "valueWithPossibleArguments: aCollection\x0a\x09self arguments: aCollection.\x0a\x09^ self value",
  12369. referencedClasses: [],
  12370. //>>excludeEnd("ide");
  12371. messageSends: ["arguments:", "value"]
  12372. }),
  12373. $globals.MessageSend);
  12374. $core.addClass('MethodContext', $globals.Object, [], 'Kernel-Methods');
  12375. //>>excludeStart("ide", pragmas.excludeIdeData);
  12376. $globals.MethodContext.comment="I hold all the dynamic state associated with the execution of either a method activation resulting from a message send. I am used to build the call stack while debugging.\x0a\x0aMy instances are JavaScript `SmalltalkMethodContext` objects defined in `boot.js`.";
  12377. //>>excludeEnd("ide");
  12378. $core.addMethod(
  12379. $core.method({
  12380. selector: "asString",
  12381. protocol: 'converting',
  12382. fn: function (){
  12383. var self=this;
  12384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12385. return $core.withContext(function($ctx1) {
  12386. //>>excludeEnd("ctx");
  12387. var $2,$3,$5,$7,$6,$4,$11,$10,$9,$8,$12,$16,$15,$14,$13,$1;
  12388. $2=self._isBlockContext();
  12389. if($core.assert($2)){
  12390. $3="a block (in ".__comma($recv(self._methodContext())._asString());
  12391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12392. $ctx1.sendIdx[","]=2;
  12393. //>>excludeEnd("ctx");
  12394. $1=$recv($3).__comma(")");
  12395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12396. $ctx1.sendIdx[","]=1;
  12397. //>>excludeEnd("ctx");
  12398. } else {
  12399. var methodClass;
  12400. methodClass=$recv(self._method())._methodClass();
  12401. methodClass;
  12402. $5=methodClass;
  12403. $7=self._receiver();
  12404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12405. $ctx1.sendIdx["receiver"]=1;
  12406. //>>excludeEnd("ctx");
  12407. $6=$recv($7)._class();
  12408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12409. $ctx1.sendIdx["class"]=1;
  12410. //>>excludeEnd("ctx");
  12411. $4=$recv($5).__eq($6);
  12412. if($core.assert($4)){
  12413. $11=self._receiver();
  12414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12415. $ctx1.sendIdx["receiver"]=2;
  12416. //>>excludeEnd("ctx");
  12417. $10=$recv($11)._class();
  12418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12419. $ctx1.sendIdx["class"]=2;
  12420. //>>excludeEnd("ctx");
  12421. $9=$recv($10)._name();
  12422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12423. $ctx1.sendIdx["name"]=1;
  12424. //>>excludeEnd("ctx");
  12425. $8=$recv($9).__comma(" >> ");
  12426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12427. $ctx1.sendIdx[","]=4;
  12428. //>>excludeEnd("ctx");
  12429. $12=self._selector();
  12430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12431. $ctx1.sendIdx["selector"]=1;
  12432. //>>excludeEnd("ctx");
  12433. $1=$recv($8).__comma($12);
  12434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12435. $ctx1.sendIdx[","]=3;
  12436. //>>excludeEnd("ctx");
  12437. } else {
  12438. $16=$recv($recv(self._receiver())._class())._name();
  12439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12440. $ctx1.sendIdx["name"]=2;
  12441. //>>excludeEnd("ctx");
  12442. $15=$recv($16).__comma("(");
  12443. $14=$recv($15).__comma($recv(methodClass)._name());
  12444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12445. $ctx1.sendIdx[","]=7;
  12446. //>>excludeEnd("ctx");
  12447. $13=$recv($14).__comma(") >> ");
  12448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12449. $ctx1.sendIdx[","]=6;
  12450. //>>excludeEnd("ctx");
  12451. $1=$recv($13).__comma(self._selector());
  12452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12453. $ctx1.sendIdx[","]=5;
  12454. //>>excludeEnd("ctx");
  12455. };
  12456. };
  12457. return $1;
  12458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12459. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.MethodContext)});
  12460. //>>excludeEnd("ctx");
  12461. },
  12462. //>>excludeStart("ide", pragmas.excludeIdeData);
  12463. args: [],
  12464. source: "asString\x0a\x09^ self isBlockContext\x0a\x09\x09ifTrue: [ 'a block (in ', self methodContext asString, ')' ]\x0a\x09\x09ifFalse: [ \x0a\x09\x09\x09| methodClass |\x0a\x09\x09\x09methodClass := self method methodClass.\x0a\x09\x09\x09methodClass = self receiver class \x0a\x09\x09\x09\x09ifTrue: [ self receiver class name, ' >> ', self selector ]\x0a\x09\x09\x09\x09ifFalse: [ self receiver class name, '(', methodClass name, ') >> ', self selector ] ]",
  12465. referencedClasses: [],
  12466. //>>excludeEnd("ide");
  12467. messageSends: ["ifTrue:ifFalse:", "isBlockContext", ",", "asString", "methodContext", "methodClass", "method", "=", "class", "receiver", "name", "selector"]
  12468. }),
  12469. $globals.MethodContext);
  12470. $core.addMethod(
  12471. $core.method({
  12472. selector: "basicReceiver",
  12473. protocol: 'accessing',
  12474. fn: function (){
  12475. var self=this;
  12476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12477. return $core.withContext(function($ctx1) {
  12478. //>>excludeEnd("ctx");
  12479. return self.receiver;
  12480. return self;
  12481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12482. }, function($ctx1) {$ctx1.fill(self,"basicReceiver",{},$globals.MethodContext)});
  12483. //>>excludeEnd("ctx");
  12484. },
  12485. //>>excludeStart("ide", pragmas.excludeIdeData);
  12486. args: [],
  12487. source: "basicReceiver\x0a\x09<return self.receiver>",
  12488. referencedClasses: [],
  12489. //>>excludeEnd("ide");
  12490. messageSends: []
  12491. }),
  12492. $globals.MethodContext);
  12493. $core.addMethod(
  12494. $core.method({
  12495. selector: "evaluatedSelector",
  12496. protocol: 'accessing',
  12497. fn: function (){
  12498. var self=this;
  12499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12500. return $core.withContext(function($ctx1) {
  12501. //>>excludeEnd("ctx");
  12502. return self.evaluatedSelector;
  12503. return self;
  12504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12505. }, function($ctx1) {$ctx1.fill(self,"evaluatedSelector",{},$globals.MethodContext)});
  12506. //>>excludeEnd("ctx");
  12507. },
  12508. //>>excludeStart("ide", pragmas.excludeIdeData);
  12509. args: [],
  12510. source: "evaluatedSelector\x0a\x09<return self.evaluatedSelector>",
  12511. referencedClasses: [],
  12512. //>>excludeEnd("ide");
  12513. messageSends: []
  12514. }),
  12515. $globals.MethodContext);
  12516. $core.addMethod(
  12517. $core.method({
  12518. selector: "findContextSuchThat:",
  12519. protocol: 'accessing',
  12520. fn: function (testBlock){
  12521. var self=this;
  12522. var context;
  12523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12524. return $core.withContext(function($ctx1) {
  12525. //>>excludeEnd("ctx");
  12526. var $1,$2;
  12527. var $early={};
  12528. try {
  12529. context=self;
  12530. $recv((function(){
  12531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12532. return $core.withContext(function($ctx2) {
  12533. //>>excludeEnd("ctx");
  12534. return $recv(context)._isNil();
  12535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12536. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  12537. //>>excludeEnd("ctx");
  12538. }))._whileFalse_((function(){
  12539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12540. return $core.withContext(function($ctx2) {
  12541. //>>excludeEnd("ctx");
  12542. $1=$recv(testBlock)._value_(context);
  12543. if($core.assert($1)){
  12544. $2=context;
  12545. throw $early=[$2];
  12546. };
  12547. context=$recv(context)._outerContext();
  12548. return context;
  12549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12550. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  12551. //>>excludeEnd("ctx");
  12552. }));
  12553. return nil;
  12554. }
  12555. catch(e) {if(e===$early)return e[0]; throw e}
  12556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12557. }, function($ctx1) {$ctx1.fill(self,"findContextSuchThat:",{testBlock:testBlock,context:context},$globals.MethodContext)});
  12558. //>>excludeEnd("ctx");
  12559. },
  12560. //>>excludeStart("ide", pragmas.excludeIdeData);
  12561. args: ["testBlock"],
  12562. source: "findContextSuchThat: testBlock\x0a\x09\x22Search self and my sender chain for first one that satisfies `testBlock`. \x0a\x09Answer `nil` if none satisfy\x22\x0a\x0a\x09| context |\x0a\x09\x0a\x09context := self.\x0a\x09[ context isNil] whileFalse: [\x0a\x09\x09(testBlock value: context) \x0a\x09\x09\x09ifTrue: [ ^ context ].\x0a\x09\x09context := context outerContext ].\x0a\x0a\x09^ nil",
  12563. referencedClasses: [],
  12564. //>>excludeEnd("ide");
  12565. messageSends: ["whileFalse:", "isNil", "ifTrue:", "value:", "outerContext"]
  12566. }),
  12567. $globals.MethodContext);
  12568. $core.addMethod(
  12569. $core.method({
  12570. selector: "home",
  12571. protocol: 'accessing',
  12572. fn: function (){
  12573. var self=this;
  12574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12575. return $core.withContext(function($ctx1) {
  12576. //>>excludeEnd("ctx");
  12577. return self.homeContext;
  12578. return self;
  12579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12580. }, function($ctx1) {$ctx1.fill(self,"home",{},$globals.MethodContext)});
  12581. //>>excludeEnd("ctx");
  12582. },
  12583. //>>excludeStart("ide", pragmas.excludeIdeData);
  12584. args: [],
  12585. source: "home\x0a\x09<return self.homeContext>",
  12586. referencedClasses: [],
  12587. //>>excludeEnd("ide");
  12588. messageSends: []
  12589. }),
  12590. $globals.MethodContext);
  12591. $core.addMethod(
  12592. $core.method({
  12593. selector: "index",
  12594. protocol: 'accessing',
  12595. fn: function (){
  12596. var self=this;
  12597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12598. return $core.withContext(function($ctx1) {
  12599. //>>excludeEnd("ctx");
  12600. return self.index || 0;
  12601. return self;
  12602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12603. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.MethodContext)});
  12604. //>>excludeEnd("ctx");
  12605. },
  12606. //>>excludeStart("ide", pragmas.excludeIdeData);
  12607. args: [],
  12608. source: "index\x0a\x09<return self.index || 0>",
  12609. referencedClasses: [],
  12610. //>>excludeEnd("ide");
  12611. messageSends: []
  12612. }),
  12613. $globals.MethodContext);
  12614. $core.addMethod(
  12615. $core.method({
  12616. selector: "isBlockContext",
  12617. protocol: 'testing',
  12618. fn: function (){
  12619. var self=this;
  12620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12621. return $core.withContext(function($ctx1) {
  12622. //>>excludeEnd("ctx");
  12623. var $1;
  12624. $1=$recv(self._selector())._isNil();
  12625. return $1;
  12626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12627. }, function($ctx1) {$ctx1.fill(self,"isBlockContext",{},$globals.MethodContext)});
  12628. //>>excludeEnd("ctx");
  12629. },
  12630. //>>excludeStart("ide", pragmas.excludeIdeData);
  12631. args: [],
  12632. source: "isBlockContext\x0a\x09\x22Block context do not have selectors.\x22\x0a\x09\x0a\x09^ self selector isNil",
  12633. referencedClasses: [],
  12634. //>>excludeEnd("ide");
  12635. messageSends: ["isNil", "selector"]
  12636. }),
  12637. $globals.MethodContext);
  12638. $core.addMethod(
  12639. $core.method({
  12640. selector: "locals",
  12641. protocol: 'accessing',
  12642. fn: function (){
  12643. var self=this;
  12644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12645. return $core.withContext(function($ctx1) {
  12646. //>>excludeEnd("ctx");
  12647. return self.locals || {};
  12648. return self;
  12649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12650. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.MethodContext)});
  12651. //>>excludeEnd("ctx");
  12652. },
  12653. //>>excludeStart("ide", pragmas.excludeIdeData);
  12654. args: [],
  12655. source: "locals\x0a\x09<return self.locals || {}>",
  12656. referencedClasses: [],
  12657. //>>excludeEnd("ide");
  12658. messageSends: []
  12659. }),
  12660. $globals.MethodContext);
  12661. $core.addMethod(
  12662. $core.method({
  12663. selector: "method",
  12664. protocol: 'accessing',
  12665. fn: function (){
  12666. var self=this;
  12667. var method,lookupClass,receiverClass,supercall;
  12668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12669. return $core.withContext(function($ctx1) {
  12670. //>>excludeEnd("ctx");
  12671. var $1,$3,$2,$4,$6,$5,$7,$9,$8,$receiver;
  12672. $1=self._methodContext();
  12673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12674. $ctx1.sendIdx["methodContext"]=1;
  12675. //>>excludeEnd("ctx");
  12676. if(($receiver = $1) == null || $receiver.isNil){
  12677. return nil;
  12678. } else {
  12679. $1;
  12680. };
  12681. $3=self._methodContext();
  12682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12683. $ctx1.sendIdx["methodContext"]=2;
  12684. //>>excludeEnd("ctx");
  12685. $2=$recv($3)._receiver();
  12686. receiverClass=$recv($2)._class();
  12687. $4=receiverClass;
  12688. $6=self._methodContext();
  12689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12690. $ctx1.sendIdx["methodContext"]=3;
  12691. //>>excludeEnd("ctx");
  12692. $5=$recv($6)._selector();
  12693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12694. $ctx1.sendIdx["selector"]=1;
  12695. //>>excludeEnd("ctx");
  12696. method=$recv($4)._lookupSelector_($5);
  12697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12698. $ctx1.sendIdx["lookupSelector:"]=1;
  12699. //>>excludeEnd("ctx");
  12700. $7=self._outerContext();
  12701. if(($receiver = $7) == null || $receiver.isNil){
  12702. supercall=false;
  12703. } else {
  12704. var outer;
  12705. outer=$receiver;
  12706. supercall=$recv(outer)._supercall();
  12707. };
  12708. $9=supercall;
  12709. if($core.assert($9)){
  12710. $8=$recv($recv($recv(method)._methodClass())._superclass())._lookupSelector_($recv(self._methodContext())._selector());
  12711. } else {
  12712. $8=method;
  12713. };
  12714. return $8;
  12715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12716. }, function($ctx1) {$ctx1.fill(self,"method",{method:method,lookupClass:lookupClass,receiverClass:receiverClass,supercall:supercall},$globals.MethodContext)});
  12717. //>>excludeEnd("ctx");
  12718. },
  12719. //>>excludeStart("ide", pragmas.excludeIdeData);
  12720. args: [],
  12721. source: "method\x0a\x09| method lookupClass receiverClass supercall |\x0a\x09\x0a\x09self methodContext ifNil: [ ^ nil ].\x0a\x0a\x09receiverClass := self methodContext receiver class.\x0a\x09method := receiverClass lookupSelector: self methodContext selector.\x0a\x09supercall := self outerContext \x0a\x09\x09ifNil: [ false ]\x0a\x09\x09ifNotNil: [ :outer | outer supercall ].\x0a\x0a\x09^ supercall\x0a\x09\x09ifFalse: [ method ]\x0a\x09\x09ifTrue: [ method methodClass superclass lookupSelector: self methodContext selector ]",
  12722. referencedClasses: [],
  12723. //>>excludeEnd("ide");
  12724. messageSends: ["ifNil:", "methodContext", "class", "receiver", "lookupSelector:", "selector", "ifNil:ifNotNil:", "outerContext", "supercall", "ifFalse:ifTrue:", "superclass", "methodClass"]
  12725. }),
  12726. $globals.MethodContext);
  12727. $core.addMethod(
  12728. $core.method({
  12729. selector: "methodContext",
  12730. protocol: 'accessing',
  12731. fn: function (){
  12732. var self=this;
  12733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12734. return $core.withContext(function($ctx1) {
  12735. //>>excludeEnd("ctx");
  12736. var $1,$3,$2,$receiver;
  12737. $1=self._isBlockContext();
  12738. if(!$core.assert($1)){
  12739. return self;
  12740. };
  12741. $3=self._outerContext();
  12742. if(($receiver = $3) == null || $receiver.isNil){
  12743. $2=$3;
  12744. } else {
  12745. var outer;
  12746. outer=$receiver;
  12747. $2=$recv(outer)._methodContext();
  12748. };
  12749. return $2;
  12750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12751. }, function($ctx1) {$ctx1.fill(self,"methodContext",{},$globals.MethodContext)});
  12752. //>>excludeEnd("ctx");
  12753. },
  12754. //>>excludeStart("ide", pragmas.excludeIdeData);
  12755. args: [],
  12756. source: "methodContext\x0a\x09self isBlockContext ifFalse: [ ^ self ].\x0a\x09\x0a\x09^ self outerContext ifNotNil: [ :outer |\x0a\x09\x09outer methodContext ]",
  12757. referencedClasses: [],
  12758. //>>excludeEnd("ide");
  12759. messageSends: ["ifFalse:", "isBlockContext", "ifNotNil:", "outerContext", "methodContext"]
  12760. }),
  12761. $globals.MethodContext);
  12762. $core.addMethod(
  12763. $core.method({
  12764. selector: "outerContext",
  12765. protocol: 'accessing',
  12766. fn: function (){
  12767. var self=this;
  12768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12769. return $core.withContext(function($ctx1) {
  12770. //>>excludeEnd("ctx");
  12771. return self.outerContext || self.homeContext;
  12772. return self;
  12773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12774. }, function($ctx1) {$ctx1.fill(self,"outerContext",{},$globals.MethodContext)});
  12775. //>>excludeEnd("ctx");
  12776. },
  12777. //>>excludeStart("ide", pragmas.excludeIdeData);
  12778. args: [],
  12779. source: "outerContext\x0a\x09<return self.outerContext || self.homeContext>",
  12780. referencedClasses: [],
  12781. //>>excludeEnd("ide");
  12782. messageSends: []
  12783. }),
  12784. $globals.MethodContext);
  12785. $core.addMethod(
  12786. $core.method({
  12787. selector: "printOn:",
  12788. protocol: 'printing',
  12789. fn: function (aStream){
  12790. var self=this;
  12791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12792. return $core.withContext(function($ctx1) {
  12793. //>>excludeEnd("ctx");
  12794. var $1;
  12795. (
  12796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12797. $ctx1.supercall = true,
  12798. //>>excludeEnd("ctx");
  12799. $globals.MethodContext.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  12800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12801. $ctx1.supercall = false;
  12802. //>>excludeEnd("ctx");;
  12803. $recv(aStream)._nextPutAll_("(");
  12804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12805. $ctx1.sendIdx["nextPutAll:"]=1;
  12806. //>>excludeEnd("ctx");
  12807. $recv(aStream)._nextPutAll_(self._asString());
  12808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12809. $ctx1.sendIdx["nextPutAll:"]=2;
  12810. //>>excludeEnd("ctx");
  12811. $1=$recv(aStream)._nextPutAll_(")");
  12812. return self;
  12813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12814. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.MethodContext)});
  12815. //>>excludeEnd("ctx");
  12816. },
  12817. //>>excludeStart("ide", pragmas.excludeIdeData);
  12818. args: ["aStream"],
  12819. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: '(';\x0a\x09\x09nextPutAll: self asString;\x0a\x09\x09nextPutAll: ')'",
  12820. referencedClasses: [],
  12821. //>>excludeEnd("ide");
  12822. messageSends: ["printOn:", "nextPutAll:", "asString"]
  12823. }),
  12824. $globals.MethodContext);
  12825. $core.addMethod(
  12826. $core.method({
  12827. selector: "receiver",
  12828. protocol: 'accessing',
  12829. fn: function (){
  12830. var self=this;
  12831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12832. return $core.withContext(function($ctx1) {
  12833. //>>excludeEnd("ctx");
  12834. var $3,$2,$1;
  12835. $2=$recv(self._isBlockContext())._and_((function(){
  12836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12837. return $core.withContext(function($ctx2) {
  12838. //>>excludeEnd("ctx");
  12839. $3=self._outerContext();
  12840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12841. $ctx2.sendIdx["outerContext"]=1;
  12842. //>>excludeEnd("ctx");
  12843. return $recv($3)._notNil();
  12844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12845. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  12846. //>>excludeEnd("ctx");
  12847. }));
  12848. if($core.assert($2)){
  12849. $1=$recv(self._outerContext())._receiver();
  12850. } else {
  12851. $1=self._basicReceiver();
  12852. };
  12853. return $1;
  12854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12855. }, function($ctx1) {$ctx1.fill(self,"receiver",{},$globals.MethodContext)});
  12856. //>>excludeEnd("ctx");
  12857. },
  12858. //>>excludeStart("ide", pragmas.excludeIdeData);
  12859. args: [],
  12860. source: "receiver\x0a\x09^ (self isBlockContext and: [ self outerContext notNil ])\x0a\x09\x09ifTrue: [ self outerContext receiver ]\x0a\x09\x09ifFalse: [ self basicReceiver ]",
  12861. referencedClasses: [],
  12862. //>>excludeEnd("ide");
  12863. messageSends: ["ifTrue:ifFalse:", "and:", "isBlockContext", "notNil", "outerContext", "receiver", "basicReceiver"]
  12864. }),
  12865. $globals.MethodContext);
  12866. $core.addMethod(
  12867. $core.method({
  12868. selector: "selector",
  12869. protocol: 'accessing',
  12870. fn: function (){
  12871. var self=this;
  12872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12873. return $core.withContext(function($ctx1) {
  12874. //>>excludeEnd("ctx");
  12875. if(self.selector) {
  12876. return $core.js2st(self.selector);
  12877. } else {
  12878. return nil;
  12879. }
  12880. ;
  12881. return self;
  12882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12883. }, function($ctx1) {$ctx1.fill(self,"selector",{},$globals.MethodContext)});
  12884. //>>excludeEnd("ctx");
  12885. },
  12886. //>>excludeStart("ide", pragmas.excludeIdeData);
  12887. args: [],
  12888. source: "selector\x0a\x09<\x0a\x09\x09if(self.selector) {\x0a\x09\x09\x09return $core.js2st(self.selector);\x0a\x09\x09} else {\x0a\x09\x09\x09return nil;\x0a\x09\x09}\x0a\x09>",
  12889. referencedClasses: [],
  12890. //>>excludeEnd("ide");
  12891. messageSends: []
  12892. }),
  12893. $globals.MethodContext);
  12894. $core.addMethod(
  12895. $core.method({
  12896. selector: "sendIndexAt:",
  12897. protocol: 'accessing',
  12898. fn: function (aSelector){
  12899. var self=this;
  12900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12901. return $core.withContext(function($ctx1) {
  12902. //>>excludeEnd("ctx");
  12903. return self.sendIdx[aSelector] || 0;
  12904. return self;
  12905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12906. }, function($ctx1) {$ctx1.fill(self,"sendIndexAt:",{aSelector:aSelector},$globals.MethodContext)});
  12907. //>>excludeEnd("ctx");
  12908. },
  12909. //>>excludeStart("ide", pragmas.excludeIdeData);
  12910. args: ["aSelector"],
  12911. source: "sendIndexAt: aSelector\x0a\x09<return self.sendIdx[aSelector] || 0>",
  12912. referencedClasses: [],
  12913. //>>excludeEnd("ide");
  12914. messageSends: []
  12915. }),
  12916. $globals.MethodContext);
  12917. $core.addMethod(
  12918. $core.method({
  12919. selector: "sendIndexes",
  12920. protocol: 'accessing',
  12921. fn: function (){
  12922. var self=this;
  12923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12924. return $core.withContext(function($ctx1) {
  12925. //>>excludeEnd("ctx");
  12926. return self.sendIdx;
  12927. return self;
  12928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12929. }, function($ctx1) {$ctx1.fill(self,"sendIndexes",{},$globals.MethodContext)});
  12930. //>>excludeEnd("ctx");
  12931. },
  12932. //>>excludeStart("ide", pragmas.excludeIdeData);
  12933. args: [],
  12934. source: "sendIndexes\x0a\x09<return self.sendIdx>",
  12935. referencedClasses: [],
  12936. //>>excludeEnd("ide");
  12937. messageSends: []
  12938. }),
  12939. $globals.MethodContext);
  12940. $core.addMethod(
  12941. $core.method({
  12942. selector: "supercall",
  12943. protocol: 'accessing',
  12944. fn: function (){
  12945. var self=this;
  12946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12947. return $core.withContext(function($ctx1) {
  12948. //>>excludeEnd("ctx");
  12949. return self.supercall == true;
  12950. return self;
  12951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12952. }, function($ctx1) {$ctx1.fill(self,"supercall",{},$globals.MethodContext)});
  12953. //>>excludeEnd("ctx");
  12954. },
  12955. //>>excludeStart("ide", pragmas.excludeIdeData);
  12956. args: [],
  12957. source: "supercall\x0a\x09<return self.supercall == true>",
  12958. referencedClasses: [],
  12959. //>>excludeEnd("ide");
  12960. messageSends: []
  12961. }),
  12962. $globals.MethodContext);
  12963. $core.addMethod(
  12964. $core.method({
  12965. selector: "temps",
  12966. protocol: 'accessing',
  12967. fn: function (){
  12968. var self=this;
  12969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12970. return $core.withContext(function($ctx1) {
  12971. //>>excludeEnd("ctx");
  12972. var $1;
  12973. self._deprecatedAPI();
  12974. $1=self._locals();
  12975. return $1;
  12976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12977. }, function($ctx1) {$ctx1.fill(self,"temps",{},$globals.MethodContext)});
  12978. //>>excludeEnd("ctx");
  12979. },
  12980. //>>excludeStart("ide", pragmas.excludeIdeData);
  12981. args: [],
  12982. source: "temps\x0a\x09self deprecatedAPI.\x0a\x09\x0a\x09^ self locals",
  12983. referencedClasses: [],
  12984. //>>excludeEnd("ide");
  12985. messageSends: ["deprecatedAPI", "locals"]
  12986. }),
  12987. $globals.MethodContext);
  12988. $core.addClass('NativeFunction', $globals.Object, [], 'Kernel-Methods');
  12989. //>>excludeStart("ide", pragmas.excludeIdeData);
  12990. $globals.NativeFunction.comment="I am a wrapper around native functions, such as `WebSocket`.\x0aFor 'normal' functions (whose constructor is the JavaScript `Function` object), use `BlockClosure`.\x0a\x0a## API\x0a\x0aSee the class-side `instance creation` methods for instance creation.\x0a\x0aCreated instances will most probably be instance of `JSObjectProxy`.\x0a\x0a## Usage example:\x0a\x0a\x09| ws |\x0a\x09ws := NativeFunction constructor: 'WebSocket' value: 'ws://localhost'.\x0a\x09ws at: 'onopen' put: [ ws send: 'hey there from Amber' ]";
  12991. //>>excludeEnd("ide");
  12992. $core.addMethod(
  12993. $core.method({
  12994. selector: "constructor:",
  12995. protocol: 'instance creation',
  12996. fn: function (aString){
  12997. var self=this;
  12998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  12999. return $core.withContext(function($ctx1) {
  13000. //>>excludeEnd("ctx");
  13001. var nativeFunc=eval(aString);
  13002. return new nativeFunc();
  13003. ;
  13004. return self;
  13005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13006. }, function($ctx1) {$ctx1.fill(self,"constructor:",{aString:aString},$globals.NativeFunction.klass)});
  13007. //>>excludeEnd("ctx");
  13008. },
  13009. //>>excludeStart("ide", pragmas.excludeIdeData);
  13010. args: ["aString"],
  13011. source: "constructor: aString\x0a\x09<\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc();\x0a\x09>",
  13012. referencedClasses: [],
  13013. //>>excludeEnd("ide");
  13014. messageSends: []
  13015. }),
  13016. $globals.NativeFunction.klass);
  13017. $core.addMethod(
  13018. $core.method({
  13019. selector: "constructor:value:",
  13020. protocol: 'instance creation',
  13021. fn: function (aString,anObject){
  13022. var self=this;
  13023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13024. return $core.withContext(function($ctx1) {
  13025. //>>excludeEnd("ctx");
  13026. var nativeFunc=eval(aString);
  13027. return new nativeFunc(anObject);
  13028. ;
  13029. return self;
  13030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13031. }, function($ctx1) {$ctx1.fill(self,"constructor:value:",{aString:aString,anObject:anObject},$globals.NativeFunction.klass)});
  13032. //>>excludeEnd("ctx");
  13033. },
  13034. //>>excludeStart("ide", pragmas.excludeIdeData);
  13035. args: ["aString", "anObject"],
  13036. source: "constructor: aString value:anObject\x0a\x09<\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject);\x0a\x09>",
  13037. referencedClasses: [],
  13038. //>>excludeEnd("ide");
  13039. messageSends: []
  13040. }),
  13041. $globals.NativeFunction.klass);
  13042. $core.addMethod(
  13043. $core.method({
  13044. selector: "constructor:value:value:",
  13045. protocol: 'instance creation',
  13046. fn: function (aString,anObject,anObject2){
  13047. var self=this;
  13048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13049. return $core.withContext(function($ctx1) {
  13050. //>>excludeEnd("ctx");
  13051. var nativeFunc=eval(aString);
  13052. return new nativeFunc(anObject,anObject2);
  13053. ;
  13054. return self;
  13055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13056. }, function($ctx1) {$ctx1.fill(self,"constructor:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2},$globals.NativeFunction.klass)});
  13057. //>>excludeEnd("ctx");
  13058. },
  13059. //>>excludeStart("ide", pragmas.excludeIdeData);
  13060. args: ["aString", "anObject", "anObject2"],
  13061. source: "constructor: aString value:anObject value: anObject2\x0a\x09<\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject,anObject2);\x0a\x09>",
  13062. referencedClasses: [],
  13063. //>>excludeEnd("ide");
  13064. messageSends: []
  13065. }),
  13066. $globals.NativeFunction.klass);
  13067. $core.addMethod(
  13068. $core.method({
  13069. selector: "constructor:value:value:value:",
  13070. protocol: 'instance creation',
  13071. fn: function (aString,anObject,anObject2,anObject3){
  13072. var self=this;
  13073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13074. return $core.withContext(function($ctx1) {
  13075. //>>excludeEnd("ctx");
  13076. var nativeFunc=eval(aString);
  13077. return new nativeFunc(anObject,anObject2, anObject3);
  13078. ;
  13079. return self;
  13080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13081. }, function($ctx1) {$ctx1.fill(self,"constructor:value:value:value:",{aString:aString,anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.NativeFunction.klass)});
  13082. //>>excludeEnd("ctx");
  13083. },
  13084. //>>excludeStart("ide", pragmas.excludeIdeData);
  13085. args: ["aString", "anObject", "anObject2", "anObject3"],
  13086. source: "constructor: aString value:anObject value: anObject2 value:anObject3\x0a\x09<\x0a\x09\x09var nativeFunc=eval(aString);\x0a\x09\x09return new nativeFunc(anObject,anObject2, anObject3);\x0a\x09>",
  13087. referencedClasses: [],
  13088. //>>excludeEnd("ide");
  13089. messageSends: []
  13090. }),
  13091. $globals.NativeFunction.klass);
  13092. $core.addMethod(
  13093. $core.method({
  13094. selector: "exists:",
  13095. protocol: 'testing',
  13096. fn: function (aString){
  13097. var self=this;
  13098. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  13099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13100. return $core.withContext(function($ctx1) {
  13101. //>>excludeEnd("ctx");
  13102. var $1;
  13103. $1=$recv($PlatformInterface())._existsGlobal_(aString);
  13104. return $1;
  13105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13106. }, function($ctx1) {$ctx1.fill(self,"exists:",{aString:aString},$globals.NativeFunction.klass)});
  13107. //>>excludeEnd("ctx");
  13108. },
  13109. //>>excludeStart("ide", pragmas.excludeIdeData);
  13110. args: ["aString"],
  13111. source: "exists: aString\x0a\x09^ PlatformInterface existsGlobal: aString",
  13112. referencedClasses: ["PlatformInterface"],
  13113. //>>excludeEnd("ide");
  13114. messageSends: ["existsGlobal:"]
  13115. }),
  13116. $globals.NativeFunction.klass);
  13117. $core.addClass('Timeout', $globals.Object, ['rawTimeout'], 'Kernel-Methods');
  13118. //>>excludeStart("ide", pragmas.excludeIdeData);
  13119. $globals.Timeout.comment="I am wrapping the returns from `set{Timeout,Interval}`.\x0a\x0a## Motivation\x0a\x0aNumber suffices in browsers, but node.js returns an object.";
  13120. //>>excludeEnd("ide");
  13121. $core.addMethod(
  13122. $core.method({
  13123. selector: "clearInterval",
  13124. protocol: 'timeout/interval',
  13125. fn: function (){
  13126. var self=this;
  13127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13128. return $core.withContext(function($ctx1) {
  13129. //>>excludeEnd("ctx");
  13130. var interval = self["@rawTimeout"];
  13131. clearInterval(interval);
  13132. ;
  13133. return self;
  13134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13135. }, function($ctx1) {$ctx1.fill(self,"clearInterval",{},$globals.Timeout)});
  13136. //>>excludeEnd("ctx");
  13137. },
  13138. //>>excludeStart("ide", pragmas.excludeIdeData);
  13139. args: [],
  13140. source: "clearInterval\x0a\x09<\x0a\x09\x09var interval = self[\x22@rawTimeout\x22];\x0a\x09\x09clearInterval(interval);\x0a\x09>",
  13141. referencedClasses: [],
  13142. //>>excludeEnd("ide");
  13143. messageSends: []
  13144. }),
  13145. $globals.Timeout);
  13146. $core.addMethod(
  13147. $core.method({
  13148. selector: "clearTimeout",
  13149. protocol: 'timeout/interval',
  13150. fn: function (){
  13151. var self=this;
  13152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13153. return $core.withContext(function($ctx1) {
  13154. //>>excludeEnd("ctx");
  13155. var timeout = self["@rawTimeout"];
  13156. clearTimeout(timeout);
  13157. ;
  13158. return self;
  13159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13160. }, function($ctx1) {$ctx1.fill(self,"clearTimeout",{},$globals.Timeout)});
  13161. //>>excludeEnd("ctx");
  13162. },
  13163. //>>excludeStart("ide", pragmas.excludeIdeData);
  13164. args: [],
  13165. source: "clearTimeout\x0a\x09<\x0a\x09\x09var timeout = self[\x22@rawTimeout\x22];\x0a\x09\x09clearTimeout(timeout);\x0a\x09>",
  13166. referencedClasses: [],
  13167. //>>excludeEnd("ide");
  13168. messageSends: []
  13169. }),
  13170. $globals.Timeout);
  13171. $core.addMethod(
  13172. $core.method({
  13173. selector: "rawTimeout:",
  13174. protocol: 'accessing',
  13175. fn: function (anObject){
  13176. var self=this;
  13177. self["@rawTimeout"]=anObject;
  13178. return self;
  13179. },
  13180. //>>excludeStart("ide", pragmas.excludeIdeData);
  13181. args: ["anObject"],
  13182. source: "rawTimeout: anObject\x0a\x09rawTimeout := anObject",
  13183. referencedClasses: [],
  13184. //>>excludeEnd("ide");
  13185. messageSends: []
  13186. }),
  13187. $globals.Timeout);
  13188. $core.addMethod(
  13189. $core.method({
  13190. selector: "on:",
  13191. protocol: 'instance creation',
  13192. fn: function (anObject){
  13193. var self=this;
  13194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13195. return $core.withContext(function($ctx1) {
  13196. //>>excludeEnd("ctx");
  13197. var $2,$3,$1;
  13198. $2=self._new();
  13199. $recv($2)._rawTimeout_(anObject);
  13200. $3=$recv($2)._yourself();
  13201. $1=$3;
  13202. return $1;
  13203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13204. }, function($ctx1) {$ctx1.fill(self,"on:",{anObject:anObject},$globals.Timeout.klass)});
  13205. //>>excludeEnd("ctx");
  13206. },
  13207. //>>excludeStart("ide", pragmas.excludeIdeData);
  13208. args: ["anObject"],
  13209. source: "on: anObject\x0a\x09^ self new rawTimeout: anObject; yourself",
  13210. referencedClasses: [],
  13211. //>>excludeEnd("ide");
  13212. messageSends: ["rawTimeout:", "new", "yourself"]
  13213. }),
  13214. $globals.Timeout.klass);
  13215. });
  13216. define("amber_core/Kernel-Collections", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  13217. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  13218. var smalltalk=$core,_st=$recv,globals=$globals;
  13219. $core.addPackage('Kernel-Collections');
  13220. $core.packages["Kernel-Collections"].transport = {"type":"amd","amdNamespace":"amber_core"};
  13221. $core.addClass('Association', $globals.Object, ['key', 'value'], 'Kernel-Collections');
  13222. //>>excludeStart("ide", pragmas.excludeIdeData);
  13223. $globals.Association.comment="I represent a pair of associated objects, a key and a value. My instances can serve as entries in a dictionary.\x0a\x0aInstances can be created with the class-side method `#key:value:`";
  13224. //>>excludeEnd("ide");
  13225. $core.addMethod(
  13226. $core.method({
  13227. selector: "=",
  13228. protocol: 'comparing',
  13229. fn: function (anAssociation){
  13230. var self=this;
  13231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13232. return $core.withContext(function($ctx1) {
  13233. //>>excludeEnd("ctx");
  13234. var $3,$2,$5,$4,$6,$1;
  13235. $3=self._class();
  13236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13237. $ctx1.sendIdx["class"]=1;
  13238. //>>excludeEnd("ctx");
  13239. $2=$recv($3).__eq($recv(anAssociation)._class());
  13240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13241. $ctx1.sendIdx["="]=1;
  13242. //>>excludeEnd("ctx");
  13243. $1=$recv($2)._and_((function(){
  13244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13245. return $core.withContext(function($ctx2) {
  13246. //>>excludeEnd("ctx");
  13247. $5=self._key();
  13248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13249. $ctx2.sendIdx["key"]=1;
  13250. //>>excludeEnd("ctx");
  13251. $4=$recv($5).__eq($recv(anAssociation)._key());
  13252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13253. $ctx2.sendIdx["="]=2;
  13254. //>>excludeEnd("ctx");
  13255. return $recv($4)._and_((function(){
  13256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13257. return $core.withContext(function($ctx3) {
  13258. //>>excludeEnd("ctx");
  13259. $6=self._value();
  13260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13261. $ctx3.sendIdx["value"]=1;
  13262. //>>excludeEnd("ctx");
  13263. return $recv($6).__eq($recv(anAssociation)._value());
  13264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13265. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  13266. //>>excludeEnd("ctx");
  13267. }));
  13268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13269. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  13270. //>>excludeEnd("ctx");
  13271. }));
  13272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13273. $ctx1.sendIdx["and:"]=1;
  13274. //>>excludeEnd("ctx");
  13275. return $1;
  13276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13277. }, function($ctx1) {$ctx1.fill(self,"=",{anAssociation:anAssociation},$globals.Association)});
  13278. //>>excludeEnd("ctx");
  13279. },
  13280. //>>excludeStart("ide", pragmas.excludeIdeData);
  13281. args: ["anAssociation"],
  13282. source: "= anAssociation\x0a\x09^ self class = anAssociation class and: [\x0a\x09\x09self key = anAssociation key and: [\x0a\x09\x09self value = anAssociation value ]]",
  13283. referencedClasses: [],
  13284. //>>excludeEnd("ide");
  13285. messageSends: ["and:", "=", "class", "key", "value"]
  13286. }),
  13287. $globals.Association);
  13288. $core.addMethod(
  13289. $core.method({
  13290. selector: "key",
  13291. protocol: 'accessing',
  13292. fn: function (){
  13293. var self=this;
  13294. var $1;
  13295. $1=self["@key"];
  13296. return $1;
  13297. },
  13298. //>>excludeStart("ide", pragmas.excludeIdeData);
  13299. args: [],
  13300. source: "key\x0a\x09^ key",
  13301. referencedClasses: [],
  13302. //>>excludeEnd("ide");
  13303. messageSends: []
  13304. }),
  13305. $globals.Association);
  13306. $core.addMethod(
  13307. $core.method({
  13308. selector: "key:",
  13309. protocol: 'accessing',
  13310. fn: function (aKey){
  13311. var self=this;
  13312. self["@key"]=aKey;
  13313. return self;
  13314. },
  13315. //>>excludeStart("ide", pragmas.excludeIdeData);
  13316. args: ["aKey"],
  13317. source: "key: aKey\x0a\x09key := aKey",
  13318. referencedClasses: [],
  13319. //>>excludeEnd("ide");
  13320. messageSends: []
  13321. }),
  13322. $globals.Association);
  13323. $core.addMethod(
  13324. $core.method({
  13325. selector: "printOn:",
  13326. protocol: 'printing',
  13327. fn: function (aStream){
  13328. var self=this;
  13329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13330. return $core.withContext(function($ctx1) {
  13331. //>>excludeEnd("ctx");
  13332. $recv(self._key())._printOn_(aStream);
  13333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13334. $ctx1.sendIdx["printOn:"]=1;
  13335. //>>excludeEnd("ctx");
  13336. $recv(aStream)._nextPutAll_(" -> ");
  13337. $recv(self._value())._printOn_(aStream);
  13338. return self;
  13339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13340. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Association)});
  13341. //>>excludeEnd("ctx");
  13342. },
  13343. //>>excludeStart("ide", pragmas.excludeIdeData);
  13344. args: ["aStream"],
  13345. source: "printOn: aStream\x0a\x09self key printOn: aStream.\x0a\x09aStream nextPutAll: ' -> '.\x0a\x09self value printOn: aStream",
  13346. referencedClasses: [],
  13347. //>>excludeEnd("ide");
  13348. messageSends: ["printOn:", "key", "nextPutAll:", "value"]
  13349. }),
  13350. $globals.Association);
  13351. $core.addMethod(
  13352. $core.method({
  13353. selector: "value",
  13354. protocol: 'accessing',
  13355. fn: function (){
  13356. var self=this;
  13357. var $1;
  13358. $1=self["@value"];
  13359. return $1;
  13360. },
  13361. //>>excludeStart("ide", pragmas.excludeIdeData);
  13362. args: [],
  13363. source: "value\x0a\x09^ value",
  13364. referencedClasses: [],
  13365. //>>excludeEnd("ide");
  13366. messageSends: []
  13367. }),
  13368. $globals.Association);
  13369. $core.addMethod(
  13370. $core.method({
  13371. selector: "value:",
  13372. protocol: 'accessing',
  13373. fn: function (aValue){
  13374. var self=this;
  13375. self["@value"]=aValue;
  13376. return self;
  13377. },
  13378. //>>excludeStart("ide", pragmas.excludeIdeData);
  13379. args: ["aValue"],
  13380. source: "value: aValue\x0a\x09value := aValue",
  13381. referencedClasses: [],
  13382. //>>excludeEnd("ide");
  13383. messageSends: []
  13384. }),
  13385. $globals.Association);
  13386. $core.addMethod(
  13387. $core.method({
  13388. selector: "key:value:",
  13389. protocol: 'instance creation',
  13390. fn: function (aKey,aValue){
  13391. var self=this;
  13392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13393. return $core.withContext(function($ctx1) {
  13394. //>>excludeEnd("ctx");
  13395. var $2,$3,$1;
  13396. $2=self._new();
  13397. $recv($2)._key_(aKey);
  13398. $recv($2)._value_(aValue);
  13399. $3=$recv($2)._yourself();
  13400. $1=$3;
  13401. return $1;
  13402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13403. }, function($ctx1) {$ctx1.fill(self,"key:value:",{aKey:aKey,aValue:aValue},$globals.Association.klass)});
  13404. //>>excludeEnd("ctx");
  13405. },
  13406. //>>excludeStart("ide", pragmas.excludeIdeData);
  13407. args: ["aKey", "aValue"],
  13408. source: "key: aKey value: aValue\x0a\x09\x09^ self new\x0a\x09\x09key: aKey;\x0a\x09\x09value: aValue;\x0a\x09\x09yourself",
  13409. referencedClasses: [],
  13410. //>>excludeEnd("ide");
  13411. messageSends: ["key:", "new", "value:", "yourself"]
  13412. }),
  13413. $globals.Association.klass);
  13414. $core.addClass('BucketStore', $globals.Object, ['buckets', 'hashBlock'], 'Kernel-Collections');
  13415. //>>excludeStart("ide", pragmas.excludeIdeData);
  13416. $globals.BucketStore.comment="I am an helper class for hash-based stores.\x0a\x0aI hold buckets which are selected by a hash, specified using `#hashBlock:`.\x0aThe hash can be any object, and\x0ait is used as a JS property (that is, in ES5\x0aits toString() value counts).\x0a\x0a## API\x0aI maintain a list of buckets. Client code can use this API:\x0a - `#bucketOfElement:` (to ask a bucket for element, I can return JS null if n/a)\x0a - `#do:` (to enumerate all elements of all buckets)\x0a - `#removeAll` (to remove all buckets)\x0a\x0aClient code itself should add/remove elements\x0ain a bucket. The `nil` object should not be put into any bucket.\x0a\x0aTypes of buckets are the responsibility of subclasses via `#newBucket`.";
  13417. //>>excludeEnd("ide");
  13418. $core.addMethod(
  13419. $core.method({
  13420. selector: "bucketOfElement:",
  13421. protocol: 'accessing',
  13422. fn: function (anObject){
  13423. var self=this;
  13424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13425. return $core.withContext(function($ctx1) {
  13426. //>>excludeEnd("ctx");
  13427. var hash = self['@hashBlock'](anObject);
  13428. if (!hash) return null;
  13429. var buckets = self['@buckets'],
  13430. bucket = buckets[hash];
  13431. if (!bucket) { bucket = buckets[hash] = self._newBucket(); }
  13432. return bucket;
  13433. ;
  13434. return self;
  13435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13436. }, function($ctx1) {$ctx1.fill(self,"bucketOfElement:",{anObject:anObject},$globals.BucketStore)});
  13437. //>>excludeEnd("ctx");
  13438. },
  13439. //>>excludeStart("ide", pragmas.excludeIdeData);
  13440. args: ["anObject"],
  13441. source: "bucketOfElement: anObject\x0a\x09<\x0a\x09\x09var hash = self['@hashBlock'](anObject);\x0a\x09\x09if (!hash) return null;\x0a\x09\x09var buckets = self['@buckets'],\x0a\x09\x09\x09bucket = buckets[hash];\x0a\x09\x09if (!bucket) { bucket = buckets[hash] = self._newBucket(); }\x0a\x09\x09return bucket;\x0a\x09>",
  13442. referencedClasses: [],
  13443. //>>excludeEnd("ide");
  13444. messageSends: []
  13445. }),
  13446. $globals.BucketStore);
  13447. $core.addMethod(
  13448. $core.method({
  13449. selector: "do:",
  13450. protocol: 'enumerating',
  13451. fn: function (aBlock){
  13452. var self=this;
  13453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13454. return $core.withContext(function($ctx1) {
  13455. //>>excludeEnd("ctx");
  13456. var buckets = self['@buckets'];
  13457. var keys = Object.keys(buckets);
  13458. for (var i = 0; i < keys.length; ++i) { buckets[keys[i]]._do_(aBlock); }
  13459. ;
  13460. return self;
  13461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13462. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.BucketStore)});
  13463. //>>excludeEnd("ctx");
  13464. },
  13465. //>>excludeStart("ide", pragmas.excludeIdeData);
  13466. args: ["aBlock"],
  13467. source: "do: aBlock\x0a\x09<\x0a\x09\x09var buckets = self['@buckets'];\x0a\x09\x09var keys = Object.keys(buckets);\x0a\x09\x09for (var i = 0; i < keys.length; ++i) { buckets[keys[i]]._do_(aBlock); }\x0a\x09>",
  13468. referencedClasses: [],
  13469. //>>excludeEnd("ide");
  13470. messageSends: []
  13471. }),
  13472. $globals.BucketStore);
  13473. $core.addMethod(
  13474. $core.method({
  13475. selector: "hashBlock:",
  13476. protocol: 'accessing',
  13477. fn: function (aBlock){
  13478. var self=this;
  13479. self["@hashBlock"]=aBlock;
  13480. return self;
  13481. },
  13482. //>>excludeStart("ide", pragmas.excludeIdeData);
  13483. args: ["aBlock"],
  13484. source: "hashBlock: aBlock\x0a\x09hashBlock := aBlock",
  13485. referencedClasses: [],
  13486. //>>excludeEnd("ide");
  13487. messageSends: []
  13488. }),
  13489. $globals.BucketStore);
  13490. $core.addMethod(
  13491. $core.method({
  13492. selector: "initialize",
  13493. protocol: 'initialization',
  13494. fn: function (){
  13495. var self=this;
  13496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13497. return $core.withContext(function($ctx1) {
  13498. //>>excludeEnd("ctx");
  13499. (
  13500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13501. $ctx1.supercall = true,
  13502. //>>excludeEnd("ctx");
  13503. $globals.BucketStore.superclass.fn.prototype._initialize.apply($recv(self), []));
  13504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13505. $ctx1.supercall = false;
  13506. //>>excludeEnd("ctx");;
  13507. self._removeAll();
  13508. return self;
  13509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13510. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.BucketStore)});
  13511. //>>excludeEnd("ctx");
  13512. },
  13513. //>>excludeStart("ide", pragmas.excludeIdeData);
  13514. args: [],
  13515. source: "initialize\x0a\x09super initialize.\x0a\x09self removeAll",
  13516. referencedClasses: [],
  13517. //>>excludeEnd("ide");
  13518. messageSends: ["initialize", "removeAll"]
  13519. }),
  13520. $globals.BucketStore);
  13521. $core.addMethod(
  13522. $core.method({
  13523. selector: "newBucket",
  13524. protocol: 'private',
  13525. fn: function (){
  13526. var self=this;
  13527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13528. return $core.withContext(function($ctx1) {
  13529. //>>excludeEnd("ctx");
  13530. self._subclassResponsibility();
  13531. return self;
  13532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13533. }, function($ctx1) {$ctx1.fill(self,"newBucket",{},$globals.BucketStore)});
  13534. //>>excludeEnd("ctx");
  13535. },
  13536. //>>excludeStart("ide", pragmas.excludeIdeData);
  13537. args: [],
  13538. source: "newBucket\x0a\x09self subclassResponsibility",
  13539. referencedClasses: [],
  13540. //>>excludeEnd("ide");
  13541. messageSends: ["subclassResponsibility"]
  13542. }),
  13543. $globals.BucketStore);
  13544. $core.addMethod(
  13545. $core.method({
  13546. selector: "removeAll",
  13547. protocol: 'adding/removing',
  13548. fn: function (){
  13549. var self=this;
  13550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13551. return $core.withContext(function($ctx1) {
  13552. //>>excludeEnd("ctx");
  13553. self['@buckets'] = Object.create(null);;
  13554. return self;
  13555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13556. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.BucketStore)});
  13557. //>>excludeEnd("ctx");
  13558. },
  13559. //>>excludeStart("ide", pragmas.excludeIdeData);
  13560. args: [],
  13561. source: "removeAll\x0a\x09<self['@buckets'] = Object.create(null);>",
  13562. referencedClasses: [],
  13563. //>>excludeEnd("ide");
  13564. messageSends: []
  13565. }),
  13566. $globals.BucketStore);
  13567. $core.addMethod(
  13568. $core.method({
  13569. selector: "hashBlock:",
  13570. protocol: 'instance creation',
  13571. fn: function (aBlock){
  13572. var self=this;
  13573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13574. return $core.withContext(function($ctx1) {
  13575. //>>excludeEnd("ctx");
  13576. var $2,$3,$1;
  13577. $2=self._new();
  13578. $recv($2)._hashBlock_(aBlock);
  13579. $3=$recv($2)._yourself();
  13580. $1=$3;
  13581. return $1;
  13582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13583. }, function($ctx1) {$ctx1.fill(self,"hashBlock:",{aBlock:aBlock},$globals.BucketStore.klass)});
  13584. //>>excludeEnd("ctx");
  13585. },
  13586. //>>excludeStart("ide", pragmas.excludeIdeData);
  13587. args: ["aBlock"],
  13588. source: "hashBlock: aBlock\x0a\x09^ self new\x0a\x09\x09hashBlock: aBlock;\x0a\x09\x09yourself",
  13589. referencedClasses: [],
  13590. //>>excludeEnd("ide");
  13591. messageSends: ["hashBlock:", "new", "yourself"]
  13592. }),
  13593. $globals.BucketStore.klass);
  13594. $core.addClass('ArrayBucketStore', $globals.BucketStore, [], 'Kernel-Collections');
  13595. //>>excludeStart("ide", pragmas.excludeIdeData);
  13596. $globals.ArrayBucketStore.comment="I am a concrete `BucketStore` with buckets being instance of `Array`.";
  13597. //>>excludeEnd("ide");
  13598. $core.addMethod(
  13599. $core.method({
  13600. selector: "newBucket",
  13601. protocol: 'private',
  13602. fn: function (){
  13603. var self=this;
  13604. var $1;
  13605. $1=[];
  13606. return $1;
  13607. },
  13608. //>>excludeStart("ide", pragmas.excludeIdeData);
  13609. args: [],
  13610. source: "newBucket\x0a\x09^ #()",
  13611. referencedClasses: [],
  13612. //>>excludeEnd("ide");
  13613. messageSends: []
  13614. }),
  13615. $globals.ArrayBucketStore);
  13616. $core.addClass('Collection', $globals.Object, [], 'Kernel-Collections');
  13617. //>>excludeStart("ide", pragmas.excludeIdeData);
  13618. $globals.Collection.comment="I am the abstract superclass of all classes that represent a group of elements.\x0a\x0aI provide a set of useful methods to the Collection hierarchy such as enumerating and converting methods.";
  13619. //>>excludeEnd("ide");
  13620. $core.addMethod(
  13621. $core.method({
  13622. selector: ",",
  13623. protocol: 'copying',
  13624. fn: function (aCollection){
  13625. var self=this;
  13626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13627. return $core.withContext(function($ctx1) {
  13628. //>>excludeEnd("ctx");
  13629. var $2,$3,$1;
  13630. $2=self._copy();
  13631. $recv($2)._addAll_(aCollection);
  13632. $3=$recv($2)._yourself();
  13633. $1=$3;
  13634. return $1;
  13635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13636. }, function($ctx1) {$ctx1.fill(self,",",{aCollection:aCollection},$globals.Collection)});
  13637. //>>excludeEnd("ctx");
  13638. },
  13639. //>>excludeStart("ide", pragmas.excludeIdeData);
  13640. args: ["aCollection"],
  13641. source: ", aCollection\x0a\x09^ self copy\x0a\x09\x09addAll: aCollection;\x0a\x09\x09yourself",
  13642. referencedClasses: [],
  13643. //>>excludeEnd("ide");
  13644. messageSends: ["addAll:", "copy", "yourself"]
  13645. }),
  13646. $globals.Collection);
  13647. $core.addMethod(
  13648. $core.method({
  13649. selector: "add:",
  13650. protocol: 'adding/removing',
  13651. fn: function (anObject){
  13652. var self=this;
  13653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13654. return $core.withContext(function($ctx1) {
  13655. //>>excludeEnd("ctx");
  13656. self._subclassResponsibility();
  13657. return self;
  13658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13659. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.Collection)});
  13660. //>>excludeEnd("ctx");
  13661. },
  13662. //>>excludeStart("ide", pragmas.excludeIdeData);
  13663. args: ["anObject"],
  13664. source: "add: anObject\x0a\x09self subclassResponsibility",
  13665. referencedClasses: [],
  13666. //>>excludeEnd("ide");
  13667. messageSends: ["subclassResponsibility"]
  13668. }),
  13669. $globals.Collection);
  13670. $core.addMethod(
  13671. $core.method({
  13672. selector: "addAll:",
  13673. protocol: 'adding/removing',
  13674. fn: function (aCollection){
  13675. var self=this;
  13676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13677. return $core.withContext(function($ctx1) {
  13678. //>>excludeEnd("ctx");
  13679. $recv(aCollection)._do_((function(each){
  13680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13681. return $core.withContext(function($ctx2) {
  13682. //>>excludeEnd("ctx");
  13683. return self._add_(each);
  13684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13685. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  13686. //>>excludeEnd("ctx");
  13687. }));
  13688. return aCollection;
  13689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13690. }, function($ctx1) {$ctx1.fill(self,"addAll:",{aCollection:aCollection},$globals.Collection)});
  13691. //>>excludeEnd("ctx");
  13692. },
  13693. //>>excludeStart("ide", pragmas.excludeIdeData);
  13694. args: ["aCollection"],
  13695. source: "addAll: aCollection\x0a\x09aCollection do: [ :each |\x0a\x09\x09self add: each ].\x0a\x09^ aCollection",
  13696. referencedClasses: [],
  13697. //>>excludeEnd("ide");
  13698. messageSends: ["do:", "add:"]
  13699. }),
  13700. $globals.Collection);
  13701. $core.addMethod(
  13702. $core.method({
  13703. selector: "allSatisfy:",
  13704. protocol: 'enumerating',
  13705. fn: function (aBlock){
  13706. var self=this;
  13707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13708. return $core.withContext(function($ctx1) {
  13709. //>>excludeEnd("ctx");
  13710. var $1;
  13711. var $early={};
  13712. try {
  13713. self._do_((function(each){
  13714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13715. return $core.withContext(function($ctx2) {
  13716. //>>excludeEnd("ctx");
  13717. $1=$recv(aBlock)._value_(each);
  13718. if(!$core.assert($1)){
  13719. throw $early=[false];
  13720. };
  13721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13722. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  13723. //>>excludeEnd("ctx");
  13724. }));
  13725. return true;
  13726. }
  13727. catch(e) {if(e===$early)return e[0]; throw e}
  13728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13729. }, function($ctx1) {$ctx1.fill(self,"allSatisfy:",{aBlock:aBlock},$globals.Collection)});
  13730. //>>excludeEnd("ctx");
  13731. },
  13732. //>>excludeStart("ide", pragmas.excludeIdeData);
  13733. args: ["aBlock"],
  13734. source: "allSatisfy: aBlock\x0a\x09\x22Evaluate aBlock with the elements of the receiver.\x0a\x09If aBlock returns false for any element return false.\x0a\x09Otherwise return true.\x22\x0a\x0a\x09self do: [ :each | (aBlock value: each) ifFalse: [ ^ false ] ].\x0a\x09^ true",
  13735. referencedClasses: [],
  13736. //>>excludeEnd("ide");
  13737. messageSends: ["do:", "ifFalse:", "value:"]
  13738. }),
  13739. $globals.Collection);
  13740. $core.addMethod(
  13741. $core.method({
  13742. selector: "anyOne",
  13743. protocol: 'adding/removing',
  13744. fn: function (){
  13745. var self=this;
  13746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13747. return $core.withContext(function($ctx1) {
  13748. //>>excludeEnd("ctx");
  13749. var $early={};
  13750. try {
  13751. self._ifEmpty_((function(){
  13752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13753. return $core.withContext(function($ctx2) {
  13754. //>>excludeEnd("ctx");
  13755. return self._error_("Collection is empty");
  13756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13757. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  13758. //>>excludeEnd("ctx");
  13759. }));
  13760. self._do_((function(each){
  13761. throw $early=[each];
  13762. }));
  13763. return self;
  13764. }
  13765. catch(e) {if(e===$early)return e[0]; throw e}
  13766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13767. }, function($ctx1) {$ctx1.fill(self,"anyOne",{},$globals.Collection)});
  13768. //>>excludeEnd("ctx");
  13769. },
  13770. //>>excludeStart("ide", pragmas.excludeIdeData);
  13771. args: [],
  13772. source: "anyOne\x0a\x09\x22Answer a representative sample of the receiver. This method can\x0a\x09be helpful when needing to preinfer the nature of the contents of \x0a\x09semi-homogeneous collections.\x22\x0a\x0a\x09self ifEmpty: [ self error: 'Collection is empty' ].\x0a\x09self do: [ :each | ^ each ]",
  13773. referencedClasses: [],
  13774. //>>excludeEnd("ide");
  13775. messageSends: ["ifEmpty:", "error:", "do:"]
  13776. }),
  13777. $globals.Collection);
  13778. $core.addMethod(
  13779. $core.method({
  13780. selector: "anySatisfy:",
  13781. protocol: 'enumerating',
  13782. fn: function (aBlock){
  13783. var self=this;
  13784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13785. return $core.withContext(function($ctx1) {
  13786. //>>excludeEnd("ctx");
  13787. var $1;
  13788. var $early={};
  13789. try {
  13790. self._do_((function(each){
  13791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13792. return $core.withContext(function($ctx2) {
  13793. //>>excludeEnd("ctx");
  13794. $1=$recv(aBlock)._value_(each);
  13795. if($core.assert($1)){
  13796. throw $early=[true];
  13797. };
  13798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13799. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  13800. //>>excludeEnd("ctx");
  13801. }));
  13802. return false;
  13803. }
  13804. catch(e) {if(e===$early)return e[0]; throw e}
  13805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13806. }, function($ctx1) {$ctx1.fill(self,"anySatisfy:",{aBlock:aBlock},$globals.Collection)});
  13807. //>>excludeEnd("ctx");
  13808. },
  13809. //>>excludeStart("ide", pragmas.excludeIdeData);
  13810. args: ["aBlock"],
  13811. source: "anySatisfy: aBlock\x0a\x09\x22Evaluate aBlock with the elements of the receiver.\x0a\x09If aBlock returns true for any element return true.\x0a\x09Otherwise return false.\x22\x0a\x0a\x09self do: [ :each | (aBlock value: each) ifTrue: [ ^ true ] ].\x0a\x09^ false",
  13812. referencedClasses: [],
  13813. //>>excludeEnd("ide");
  13814. messageSends: ["do:", "ifTrue:", "value:"]
  13815. }),
  13816. $globals.Collection);
  13817. $core.addMethod(
  13818. $core.method({
  13819. selector: "asArray",
  13820. protocol: 'converting',
  13821. fn: function (){
  13822. var self=this;
  13823. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  13824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13825. return $core.withContext(function($ctx1) {
  13826. //>>excludeEnd("ctx");
  13827. var $1;
  13828. $1=$recv($Array())._withAll_(self);
  13829. return $1;
  13830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13831. }, function($ctx1) {$ctx1.fill(self,"asArray",{},$globals.Collection)});
  13832. //>>excludeEnd("ctx");
  13833. },
  13834. //>>excludeStart("ide", pragmas.excludeIdeData);
  13835. args: [],
  13836. source: "asArray\x0a\x09^ Array withAll: self",
  13837. referencedClasses: ["Array"],
  13838. //>>excludeEnd("ide");
  13839. messageSends: ["withAll:"]
  13840. }),
  13841. $globals.Collection);
  13842. $core.addMethod(
  13843. $core.method({
  13844. selector: "asJSON",
  13845. protocol: 'converting',
  13846. fn: function (){
  13847. var self=this;
  13848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13849. return $core.withContext(function($ctx1) {
  13850. //>>excludeEnd("ctx");
  13851. var $1;
  13852. $1=$recv(self._asArray())._collect_((function(each){
  13853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13854. return $core.withContext(function($ctx2) {
  13855. //>>excludeEnd("ctx");
  13856. return $recv(each)._asJSON();
  13857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13858. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  13859. //>>excludeEnd("ctx");
  13860. }));
  13861. return $1;
  13862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13863. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.Collection)});
  13864. //>>excludeEnd("ctx");
  13865. },
  13866. //>>excludeStart("ide", pragmas.excludeIdeData);
  13867. args: [],
  13868. source: "asJSON\x0a\x09^ self asArray collect: [ :each | each asJSON ]",
  13869. referencedClasses: [],
  13870. //>>excludeEnd("ide");
  13871. messageSends: ["collect:", "asArray", "asJSON"]
  13872. }),
  13873. $globals.Collection);
  13874. $core.addMethod(
  13875. $core.method({
  13876. selector: "asOrderedCollection",
  13877. protocol: 'converting',
  13878. fn: function (){
  13879. var self=this;
  13880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13881. return $core.withContext(function($ctx1) {
  13882. //>>excludeEnd("ctx");
  13883. var $1;
  13884. $1=self._asArray();
  13885. return $1;
  13886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13887. }, function($ctx1) {$ctx1.fill(self,"asOrderedCollection",{},$globals.Collection)});
  13888. //>>excludeEnd("ctx");
  13889. },
  13890. //>>excludeStart("ide", pragmas.excludeIdeData);
  13891. args: [],
  13892. source: "asOrderedCollection\x0a\x09^ self asArray",
  13893. referencedClasses: [],
  13894. //>>excludeEnd("ide");
  13895. messageSends: ["asArray"]
  13896. }),
  13897. $globals.Collection);
  13898. $core.addMethod(
  13899. $core.method({
  13900. selector: "asSet",
  13901. protocol: 'converting',
  13902. fn: function (){
  13903. var self=this;
  13904. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  13905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13906. return $core.withContext(function($ctx1) {
  13907. //>>excludeEnd("ctx");
  13908. var $1;
  13909. $1=$recv($Set())._withAll_(self);
  13910. return $1;
  13911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13912. }, function($ctx1) {$ctx1.fill(self,"asSet",{},$globals.Collection)});
  13913. //>>excludeEnd("ctx");
  13914. },
  13915. //>>excludeStart("ide", pragmas.excludeIdeData);
  13916. args: [],
  13917. source: "asSet\x0a\x09^ Set withAll: self",
  13918. referencedClasses: ["Set"],
  13919. //>>excludeEnd("ide");
  13920. messageSends: ["withAll:"]
  13921. }),
  13922. $globals.Collection);
  13923. $core.addMethod(
  13924. $core.method({
  13925. selector: "collect:",
  13926. protocol: 'enumerating',
  13927. fn: function (aBlock){
  13928. var self=this;
  13929. var stream;
  13930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13931. return $core.withContext(function($ctx1) {
  13932. //>>excludeEnd("ctx");
  13933. var $1;
  13934. stream=$recv($recv(self._class())._new())._writeStream();
  13935. self._do_((function(each){
  13936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13937. return $core.withContext(function($ctx2) {
  13938. //>>excludeEnd("ctx");
  13939. return $recv(stream)._nextPut_($recv(aBlock)._value_(each));
  13940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13941. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  13942. //>>excludeEnd("ctx");
  13943. }));
  13944. $1=$recv(stream)._contents();
  13945. return $1;
  13946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13947. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,stream:stream},$globals.Collection)});
  13948. //>>excludeEnd("ctx");
  13949. },
  13950. //>>excludeStart("ide", pragmas.excludeIdeData);
  13951. args: ["aBlock"],
  13952. source: "collect: aBlock\x0a\x09| stream |\x0a\x09stream := self class new writeStream.\x0a\x09self do: [ :each |\x0a\x09\x09stream nextPut: (aBlock value: each) ].\x0a\x09^ stream contents",
  13953. referencedClasses: [],
  13954. //>>excludeEnd("ide");
  13955. messageSends: ["writeStream", "new", "class", "do:", "nextPut:", "value:", "contents"]
  13956. }),
  13957. $globals.Collection);
  13958. $core.addMethod(
  13959. $core.method({
  13960. selector: "contains:",
  13961. protocol: 'testing',
  13962. fn: function (aBlock){
  13963. var self=this;
  13964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13965. return $core.withContext(function($ctx1) {
  13966. //>>excludeEnd("ctx");
  13967. var $1;
  13968. self._deprecatedAPI();
  13969. $1=self._anySatisfy_(aBlock);
  13970. return $1;
  13971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13972. }, function($ctx1) {$ctx1.fill(self,"contains:",{aBlock:aBlock},$globals.Collection)});
  13973. //>>excludeEnd("ctx");
  13974. },
  13975. //>>excludeStart("ide", pragmas.excludeIdeData);
  13976. args: ["aBlock"],
  13977. source: "contains: aBlock\x0a\x09self deprecatedAPI.\x0a\x0a\x09^ self anySatisfy: aBlock",
  13978. referencedClasses: [],
  13979. //>>excludeEnd("ide");
  13980. messageSends: ["deprecatedAPI", "anySatisfy:"]
  13981. }),
  13982. $globals.Collection);
  13983. $core.addMethod(
  13984. $core.method({
  13985. selector: "copyWith:",
  13986. protocol: 'copying',
  13987. fn: function (anObject){
  13988. var self=this;
  13989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13990. return $core.withContext(function($ctx1) {
  13991. //>>excludeEnd("ctx");
  13992. var $2,$3,$1;
  13993. $2=self._copy();
  13994. $recv($2)._add_(anObject);
  13995. $3=$recv($2)._yourself();
  13996. $1=$3;
  13997. return $1;
  13998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  13999. }, function($ctx1) {$ctx1.fill(self,"copyWith:",{anObject:anObject},$globals.Collection)});
  14000. //>>excludeEnd("ctx");
  14001. },
  14002. //>>excludeStart("ide", pragmas.excludeIdeData);
  14003. args: ["anObject"],
  14004. source: "copyWith: anObject\x0a\x09^ self copy add: anObject; yourself",
  14005. referencedClasses: [],
  14006. //>>excludeEnd("ide");
  14007. messageSends: ["add:", "copy", "yourself"]
  14008. }),
  14009. $globals.Collection);
  14010. $core.addMethod(
  14011. $core.method({
  14012. selector: "copyWithAll:",
  14013. protocol: 'copying',
  14014. fn: function (aCollection){
  14015. var self=this;
  14016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14017. return $core.withContext(function($ctx1) {
  14018. //>>excludeEnd("ctx");
  14019. var $2,$3,$1;
  14020. $2=self._copy();
  14021. $recv($2)._addAll_(aCollection);
  14022. $3=$recv($2)._yourself();
  14023. $1=$3;
  14024. return $1;
  14025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14026. }, function($ctx1) {$ctx1.fill(self,"copyWithAll:",{aCollection:aCollection},$globals.Collection)});
  14027. //>>excludeEnd("ctx");
  14028. },
  14029. //>>excludeStart("ide", pragmas.excludeIdeData);
  14030. args: ["aCollection"],
  14031. source: "copyWithAll: aCollection\x0a\x09^ self copy addAll: aCollection; yourself",
  14032. referencedClasses: [],
  14033. //>>excludeEnd("ide");
  14034. messageSends: ["addAll:", "copy", "yourself"]
  14035. }),
  14036. $globals.Collection);
  14037. $core.addMethod(
  14038. $core.method({
  14039. selector: "copyWithoutAll:",
  14040. protocol: 'copying',
  14041. fn: function (aCollection){
  14042. var self=this;
  14043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14044. return $core.withContext(function($ctx1) {
  14045. //>>excludeEnd("ctx");
  14046. var $1;
  14047. $1=self._reject_((function(each){
  14048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14049. return $core.withContext(function($ctx2) {
  14050. //>>excludeEnd("ctx");
  14051. return $recv(aCollection)._includes_(each);
  14052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14053. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14054. //>>excludeEnd("ctx");
  14055. }));
  14056. return $1;
  14057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14058. }, function($ctx1) {$ctx1.fill(self,"copyWithoutAll:",{aCollection:aCollection},$globals.Collection)});
  14059. //>>excludeEnd("ctx");
  14060. },
  14061. //>>excludeStart("ide", pragmas.excludeIdeData);
  14062. args: ["aCollection"],
  14063. source: "copyWithoutAll: aCollection\x0a\x09\x22Answer a copy of the receiver that does not contain any elements\x0a\x09equal to those in aCollection.\x22\x0a\x0a\x09^ self reject: [ :each | aCollection includes: each ]",
  14064. referencedClasses: [],
  14065. //>>excludeEnd("ide");
  14066. messageSends: ["reject:", "includes:"]
  14067. }),
  14068. $globals.Collection);
  14069. $core.addMethod(
  14070. $core.method({
  14071. selector: "detect:",
  14072. protocol: 'enumerating',
  14073. fn: function (aBlock){
  14074. var self=this;
  14075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14076. return $core.withContext(function($ctx1) {
  14077. //>>excludeEnd("ctx");
  14078. var $1;
  14079. $1=self._detect_ifNone_(aBlock,(function(){
  14080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14081. return $core.withContext(function($ctx2) {
  14082. //>>excludeEnd("ctx");
  14083. return self._errorNotFound();
  14084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14085. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14086. //>>excludeEnd("ctx");
  14087. }));
  14088. return $1;
  14089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14090. }, function($ctx1) {$ctx1.fill(self,"detect:",{aBlock:aBlock},$globals.Collection)});
  14091. //>>excludeEnd("ctx");
  14092. },
  14093. //>>excludeStart("ide", pragmas.excludeIdeData);
  14094. args: ["aBlock"],
  14095. source: "detect: aBlock\x0a\x09^ self detect: aBlock ifNone: [ self errorNotFound ]",
  14096. referencedClasses: [],
  14097. //>>excludeEnd("ide");
  14098. messageSends: ["detect:ifNone:", "errorNotFound"]
  14099. }),
  14100. $globals.Collection);
  14101. $core.addMethod(
  14102. $core.method({
  14103. selector: "detect:ifNone:",
  14104. protocol: 'enumerating',
  14105. fn: function (aBlock,anotherBlock){
  14106. var self=this;
  14107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14108. return $core.withContext(function($ctx1) {
  14109. //>>excludeEnd("ctx");
  14110. self._subclassResponsibility();
  14111. return self;
  14112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14113. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14114. //>>excludeEnd("ctx");
  14115. },
  14116. //>>excludeStart("ide", pragmas.excludeIdeData);
  14117. args: ["aBlock", "anotherBlock"],
  14118. source: "detect: aBlock ifNone: anotherBlock\x0a\x09self subclassResponsibility",
  14119. referencedClasses: [],
  14120. //>>excludeEnd("ide");
  14121. messageSends: ["subclassResponsibility"]
  14122. }),
  14123. $globals.Collection);
  14124. $core.addMethod(
  14125. $core.method({
  14126. selector: "do:",
  14127. protocol: 'enumerating',
  14128. fn: function (aBlock){
  14129. var self=this;
  14130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14131. return $core.withContext(function($ctx1) {
  14132. //>>excludeEnd("ctx");
  14133. self._subclassResponsibility();
  14134. return self;
  14135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14136. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Collection)});
  14137. //>>excludeEnd("ctx");
  14138. },
  14139. //>>excludeStart("ide", pragmas.excludeIdeData);
  14140. args: ["aBlock"],
  14141. source: "do: aBlock\x0a\x09self subclassResponsibility",
  14142. referencedClasses: [],
  14143. //>>excludeEnd("ide");
  14144. messageSends: ["subclassResponsibility"]
  14145. }),
  14146. $globals.Collection);
  14147. $core.addMethod(
  14148. $core.method({
  14149. selector: "do:separatedBy:",
  14150. protocol: 'enumerating',
  14151. fn: function (aBlock,anotherBlock){
  14152. var self=this;
  14153. var actionBeforeElement;
  14154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14155. return $core.withContext(function($ctx1) {
  14156. //>>excludeEnd("ctx");
  14157. actionBeforeElement=(function(){
  14158. actionBeforeElement=anotherBlock;
  14159. return actionBeforeElement;
  14160. });
  14161. self._do_((function(each){
  14162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14163. return $core.withContext(function($ctx2) {
  14164. //>>excludeEnd("ctx");
  14165. $recv(actionBeforeElement)._value();
  14166. return $recv(aBlock)._value_(each);
  14167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14168. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  14169. //>>excludeEnd("ctx");
  14170. }));
  14171. return self;
  14172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14173. }, function($ctx1) {$ctx1.fill(self,"do:separatedBy:",{aBlock:aBlock,anotherBlock:anotherBlock,actionBeforeElement:actionBeforeElement},$globals.Collection)});
  14174. //>>excludeEnd("ctx");
  14175. },
  14176. //>>excludeStart("ide", pragmas.excludeIdeData);
  14177. args: ["aBlock", "anotherBlock"],
  14178. source: "do: aBlock separatedBy: anotherBlock\x0a\x09| actionBeforeElement |\x0a\x09actionBeforeElement := [ actionBeforeElement := anotherBlock ].\x0a\x09self do: [ :each |\x0a\x09\x09actionBeforeElement value.\x0a\x09\x09aBlock value: each ]",
  14179. referencedClasses: [],
  14180. //>>excludeEnd("ide");
  14181. messageSends: ["do:", "value", "value:"]
  14182. }),
  14183. $globals.Collection);
  14184. $core.addMethod(
  14185. $core.method({
  14186. selector: "errorNotFound",
  14187. protocol: 'error handling',
  14188. fn: function (){
  14189. var self=this;
  14190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14191. return $core.withContext(function($ctx1) {
  14192. //>>excludeEnd("ctx");
  14193. self._error_("Object is not in the collection");
  14194. return self;
  14195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14196. }, function($ctx1) {$ctx1.fill(self,"errorNotFound",{},$globals.Collection)});
  14197. //>>excludeEnd("ctx");
  14198. },
  14199. //>>excludeStart("ide", pragmas.excludeIdeData);
  14200. args: [],
  14201. source: "errorNotFound\x0a\x09self error: 'Object is not in the collection'",
  14202. referencedClasses: [],
  14203. //>>excludeEnd("ide");
  14204. messageSends: ["error:"]
  14205. }),
  14206. $globals.Collection);
  14207. $core.addMethod(
  14208. $core.method({
  14209. selector: "ifEmpty:",
  14210. protocol: 'testing',
  14211. fn: function (aBlock){
  14212. var self=this;
  14213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14214. return $core.withContext(function($ctx1) {
  14215. //>>excludeEnd("ctx");
  14216. var $2,$1;
  14217. $2=self._isEmpty();
  14218. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  14219. return self;
  14220. }));
  14221. return $1;
  14222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14223. }, function($ctx1) {$ctx1.fill(self,"ifEmpty:",{aBlock:aBlock},$globals.Collection)});
  14224. //>>excludeEnd("ctx");
  14225. },
  14226. //>>excludeStart("ide", pragmas.excludeIdeData);
  14227. args: ["aBlock"],
  14228. source: "ifEmpty: aBlock\x0a\x09\x22Evaluate the given block with the receiver as argument, answering its value if the receiver is empty, otherwise answer the receiver. \x0a\x09Note that the fact that this method returns its argument in case the receiver is not empty allows one to write expressions like the following ones: \x0a\x09\x09self classifyMethodAs:\x0a\x09\x09\x09(myProtocol ifEmpty: ['As yet unclassified'])\x22\x0a\x09^ self isEmpty\x0a\x09\x09ifTrue: aBlock\x0a\x09\x09ifFalse: [ self ]",
  14229. referencedClasses: [],
  14230. //>>excludeEnd("ide");
  14231. messageSends: ["ifTrue:ifFalse:", "isEmpty"]
  14232. }),
  14233. $globals.Collection);
  14234. $core.addMethod(
  14235. $core.method({
  14236. selector: "ifEmpty:ifNotEmpty:",
  14237. protocol: 'testing',
  14238. fn: function (aBlock,anotherBlock){
  14239. var self=this;
  14240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14241. return $core.withContext(function($ctx1) {
  14242. //>>excludeEnd("ctx");
  14243. var $2,$1;
  14244. $2=self._isEmpty();
  14245. $1=$recv($2)._ifTrue_ifFalse_(aBlock,(function(){
  14246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14247. return $core.withContext(function($ctx2) {
  14248. //>>excludeEnd("ctx");
  14249. return $recv(anotherBlock)._value_(self);
  14250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14251. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14252. //>>excludeEnd("ctx");
  14253. }));
  14254. return $1;
  14255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14256. }, function($ctx1) {$ctx1.fill(self,"ifEmpty:ifNotEmpty:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14257. //>>excludeEnd("ctx");
  14258. },
  14259. //>>excludeStart("ide", pragmas.excludeIdeData);
  14260. args: ["aBlock", "anotherBlock"],
  14261. source: "ifEmpty: aBlock ifNotEmpty: anotherBlock\x0a\x09^ self isEmpty\x0a\x09\x09ifTrue: aBlock\x0a\x09\x09ifFalse: [ anotherBlock value: self ]",
  14262. referencedClasses: [],
  14263. //>>excludeEnd("ide");
  14264. messageSends: ["ifTrue:ifFalse:", "isEmpty", "value:"]
  14265. }),
  14266. $globals.Collection);
  14267. $core.addMethod(
  14268. $core.method({
  14269. selector: "ifNotEmpty:",
  14270. protocol: 'testing',
  14271. fn: function (aBlock){
  14272. var self=this;
  14273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14274. return $core.withContext(function($ctx1) {
  14275. //>>excludeEnd("ctx");
  14276. var $2,$1;
  14277. $2=self._notEmpty();
  14278. if($core.assert($2)){
  14279. $1=$recv(aBlock)._value_(self);
  14280. } else {
  14281. $1=self;
  14282. };
  14283. return $1;
  14284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14285. }, function($ctx1) {$ctx1.fill(self,"ifNotEmpty:",{aBlock:aBlock},$globals.Collection)});
  14286. //>>excludeEnd("ctx");
  14287. },
  14288. //>>excludeStart("ide", pragmas.excludeIdeData);
  14289. args: ["aBlock"],
  14290. source: "ifNotEmpty: aBlock\x0a\x09^ self notEmpty\x0a\x09\x09ifTrue: [ aBlock value: self ]\x0a\x09\x09ifFalse: [ self ]",
  14291. referencedClasses: [],
  14292. //>>excludeEnd("ide");
  14293. messageSends: ["ifTrue:ifFalse:", "notEmpty", "value:"]
  14294. }),
  14295. $globals.Collection);
  14296. $core.addMethod(
  14297. $core.method({
  14298. selector: "ifNotEmpty:ifEmpty:",
  14299. protocol: 'testing',
  14300. fn: function (aBlock,anotherBlock){
  14301. var self=this;
  14302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14303. return $core.withContext(function($ctx1) {
  14304. //>>excludeEnd("ctx");
  14305. var $2,$1;
  14306. $2=self._notEmpty();
  14307. $1=$recv($2)._ifTrue_ifFalse_((function(){
  14308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14309. return $core.withContext(function($ctx2) {
  14310. //>>excludeEnd("ctx");
  14311. return $recv(aBlock)._value_(self);
  14312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14313. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14314. //>>excludeEnd("ctx");
  14315. }),anotherBlock);
  14316. return $1;
  14317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14318. }, function($ctx1) {$ctx1.fill(self,"ifNotEmpty:ifEmpty:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Collection)});
  14319. //>>excludeEnd("ctx");
  14320. },
  14321. //>>excludeStart("ide", pragmas.excludeIdeData);
  14322. args: ["aBlock", "anotherBlock"],
  14323. source: "ifNotEmpty: aBlock ifEmpty: anotherBlock\x0a\x09^ self notEmpty\x0a\x09\x09ifTrue: [ aBlock value: self ]\x0a\x09\x09ifFalse: anotherBlock",
  14324. referencedClasses: [],
  14325. //>>excludeEnd("ide");
  14326. messageSends: ["ifTrue:ifFalse:", "notEmpty", "value:"]
  14327. }),
  14328. $globals.Collection);
  14329. $core.addMethod(
  14330. $core.method({
  14331. selector: "includes:",
  14332. protocol: 'testing',
  14333. fn: function (anObject){
  14334. var self=this;
  14335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14336. return $core.withContext(function($ctx1) {
  14337. //>>excludeEnd("ctx");
  14338. var $1;
  14339. $1=self._anySatisfy_((function(each){
  14340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14341. return $core.withContext(function($ctx2) {
  14342. //>>excludeEnd("ctx");
  14343. return $recv(each).__eq(anObject);
  14344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14345. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14346. //>>excludeEnd("ctx");
  14347. }));
  14348. return $1;
  14349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14350. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.Collection)});
  14351. //>>excludeEnd("ctx");
  14352. },
  14353. //>>excludeStart("ide", pragmas.excludeIdeData);
  14354. args: ["anObject"],
  14355. source: "includes: anObject\x0a\x09^ self anySatisfy: [ :each | each = anObject ]",
  14356. referencedClasses: [],
  14357. //>>excludeEnd("ide");
  14358. messageSends: ["anySatisfy:", "="]
  14359. }),
  14360. $globals.Collection);
  14361. $core.addMethod(
  14362. $core.method({
  14363. selector: "inject:into:",
  14364. protocol: 'enumerating',
  14365. fn: function (anObject,aBlock){
  14366. var self=this;
  14367. var result;
  14368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14369. return $core.withContext(function($ctx1) {
  14370. //>>excludeEnd("ctx");
  14371. var $1;
  14372. result=anObject;
  14373. self._do_((function(each){
  14374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14375. return $core.withContext(function($ctx2) {
  14376. //>>excludeEnd("ctx");
  14377. result=$recv(aBlock)._value_value_(result,each);
  14378. return result;
  14379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14380. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14381. //>>excludeEnd("ctx");
  14382. }));
  14383. $1=result;
  14384. return $1;
  14385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14386. }, function($ctx1) {$ctx1.fill(self,"inject:into:",{anObject:anObject,aBlock:aBlock,result:result},$globals.Collection)});
  14387. //>>excludeEnd("ctx");
  14388. },
  14389. //>>excludeStart("ide", pragmas.excludeIdeData);
  14390. args: ["anObject", "aBlock"],
  14391. source: "inject: anObject into: aBlock\x0a\x09| result |\x0a\x09result := anObject.\x0a\x09self do: [ :each |\x0a\x09\x09result := aBlock value: result value: each ].\x0a\x09^ result",
  14392. referencedClasses: [],
  14393. //>>excludeEnd("ide");
  14394. messageSends: ["do:", "value:value:"]
  14395. }),
  14396. $globals.Collection);
  14397. $core.addMethod(
  14398. $core.method({
  14399. selector: "intersection:",
  14400. protocol: 'enumerating',
  14401. fn: function (aCollection){
  14402. var self=this;
  14403. var set,outputSet;
  14404. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  14405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14406. return $core.withContext(function($ctx1) {
  14407. //>>excludeEnd("ctx");
  14408. var $2,$1,$3;
  14409. set=self._asSet();
  14410. outputSet=$recv($Set())._new();
  14411. $recv(aCollection)._do_((function(each){
  14412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14413. return $core.withContext(function($ctx2) {
  14414. //>>excludeEnd("ctx");
  14415. $2=$recv(set)._includes_(each);
  14416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14417. $ctx2.sendIdx["includes:"]=1;
  14418. //>>excludeEnd("ctx");
  14419. $1=$recv($2)._and_((function(){
  14420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14421. return $core.withContext(function($ctx3) {
  14422. //>>excludeEnd("ctx");
  14423. return $recv($recv(outputSet)._includes_(each))._not();
  14424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14425. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  14426. //>>excludeEnd("ctx");
  14427. }));
  14428. if($core.assert($1)){
  14429. return $recv(outputSet)._add_(each);
  14430. };
  14431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14432. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14433. //>>excludeEnd("ctx");
  14434. }));
  14435. $3=$recv(self._class())._withAll_($recv(outputSet)._asArray());
  14436. return $3;
  14437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14438. }, function($ctx1) {$ctx1.fill(self,"intersection:",{aCollection:aCollection,set:set,outputSet:outputSet},$globals.Collection)});
  14439. //>>excludeEnd("ctx");
  14440. },
  14441. //>>excludeStart("ide", pragmas.excludeIdeData);
  14442. args: ["aCollection"],
  14443. source: "intersection: aCollection\x0a\x09\x22Answer the set theoretic intersection of two collections.\x22\x0a\x0a\x09| set outputSet |\x0a\x09\x0a\x09set := self asSet.\x0a\x09outputSet := Set new.\x0a\x09\x0a\x09aCollection do: [ :each |\x0a\x09\x09((set includes: each) and: [ (outputSet includes: each) not ])\x0a\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09outputSet add: each ]].\x0a\x09\x09\x0a\x09^ self class withAll: outputSet asArray",
  14444. referencedClasses: ["Set"],
  14445. //>>excludeEnd("ide");
  14446. messageSends: ["asSet", "new", "do:", "ifTrue:", "and:", "includes:", "not", "add:", "withAll:", "class", "asArray"]
  14447. }),
  14448. $globals.Collection);
  14449. $core.addMethod(
  14450. $core.method({
  14451. selector: "isEmpty",
  14452. protocol: 'testing',
  14453. fn: function (){
  14454. var self=this;
  14455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14456. return $core.withContext(function($ctx1) {
  14457. //>>excludeEnd("ctx");
  14458. var $1;
  14459. $1=$recv(self._size()).__eq((0));
  14460. return $1;
  14461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14462. }, function($ctx1) {$ctx1.fill(self,"isEmpty",{},$globals.Collection)});
  14463. //>>excludeEnd("ctx");
  14464. },
  14465. //>>excludeStart("ide", pragmas.excludeIdeData);
  14466. args: [],
  14467. source: "isEmpty\x0a\x09^ self size = 0",
  14468. referencedClasses: [],
  14469. //>>excludeEnd("ide");
  14470. messageSends: ["=", "size"]
  14471. }),
  14472. $globals.Collection);
  14473. $core.addMethod(
  14474. $core.method({
  14475. selector: "noneSatisfy:",
  14476. protocol: 'enumerating',
  14477. fn: function (aBlock){
  14478. var self=this;
  14479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14480. return $core.withContext(function($ctx1) {
  14481. //>>excludeEnd("ctx");
  14482. var $1;
  14483. var $early={};
  14484. try {
  14485. self._do_((function(item){
  14486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14487. return $core.withContext(function($ctx2) {
  14488. //>>excludeEnd("ctx");
  14489. $1=$recv(aBlock)._value_(item);
  14490. if($core.assert($1)){
  14491. throw $early=[false];
  14492. };
  14493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14494. }, function($ctx2) {$ctx2.fillBlock({item:item},$ctx1,1)});
  14495. //>>excludeEnd("ctx");
  14496. }));
  14497. return true;
  14498. }
  14499. catch(e) {if(e===$early)return e[0]; throw e}
  14500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14501. }, function($ctx1) {$ctx1.fill(self,"noneSatisfy:",{aBlock:aBlock},$globals.Collection)});
  14502. //>>excludeEnd("ctx");
  14503. },
  14504. //>>excludeStart("ide", pragmas.excludeIdeData);
  14505. args: ["aBlock"],
  14506. source: "noneSatisfy: aBlock\x0a\x09\x22Evaluate aBlock with the elements of the receiver.\x0a\x09If aBlock returns false for all elements return true.\x0a\x09Otherwise return false\x22\x0a\x0a\x09self do: [ :item | (aBlock value: item) ifTrue: [ ^ false ] ].\x0a\x09^ true",
  14507. referencedClasses: [],
  14508. //>>excludeEnd("ide");
  14509. messageSends: ["do:", "ifTrue:", "value:"]
  14510. }),
  14511. $globals.Collection);
  14512. $core.addMethod(
  14513. $core.method({
  14514. selector: "notEmpty",
  14515. protocol: 'testing',
  14516. fn: function (){
  14517. var self=this;
  14518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14519. return $core.withContext(function($ctx1) {
  14520. //>>excludeEnd("ctx");
  14521. var $1;
  14522. $1=$recv(self._isEmpty())._not();
  14523. return $1;
  14524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14525. }, function($ctx1) {$ctx1.fill(self,"notEmpty",{},$globals.Collection)});
  14526. //>>excludeEnd("ctx");
  14527. },
  14528. //>>excludeStart("ide", pragmas.excludeIdeData);
  14529. args: [],
  14530. source: "notEmpty\x0a\x09^ self isEmpty not",
  14531. referencedClasses: [],
  14532. //>>excludeEnd("ide");
  14533. messageSends: ["not", "isEmpty"]
  14534. }),
  14535. $globals.Collection);
  14536. $core.addMethod(
  14537. $core.method({
  14538. selector: "occurrencesOf:",
  14539. protocol: 'accessing',
  14540. fn: function (anObject){
  14541. var self=this;
  14542. var tally;
  14543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14544. return $core.withContext(function($ctx1) {
  14545. //>>excludeEnd("ctx");
  14546. var $1,$2;
  14547. tally=(0);
  14548. self._do_((function(each){
  14549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14550. return $core.withContext(function($ctx2) {
  14551. //>>excludeEnd("ctx");
  14552. $1=$recv(anObject).__eq(each);
  14553. if($core.assert($1)){
  14554. tally=$recv(tally).__plus((1));
  14555. return tally;
  14556. };
  14557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14558. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14559. //>>excludeEnd("ctx");
  14560. }));
  14561. $2=tally;
  14562. return $2;
  14563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14564. }, function($ctx1) {$ctx1.fill(self,"occurrencesOf:",{anObject:anObject,tally:tally},$globals.Collection)});
  14565. //>>excludeEnd("ctx");
  14566. },
  14567. //>>excludeStart("ide", pragmas.excludeIdeData);
  14568. args: ["anObject"],
  14569. source: "occurrencesOf: anObject\x0a\x09\x22Answer how many of the receiver's elements are equal to anObject.\x22\x0a\x0a\x09| tally |\x0a\x09tally := 0.\x0a\x09self do: [ :each | anObject = each ifTrue: [ tally := tally + 1 ]].\x0a\x09^ tally",
  14570. referencedClasses: [],
  14571. //>>excludeEnd("ide");
  14572. messageSends: ["do:", "ifTrue:", "=", "+"]
  14573. }),
  14574. $globals.Collection);
  14575. $core.addMethod(
  14576. $core.method({
  14577. selector: "putOn:",
  14578. protocol: 'streaming',
  14579. fn: function (aStream){
  14580. var self=this;
  14581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14582. return $core.withContext(function($ctx1) {
  14583. //>>excludeEnd("ctx");
  14584. self._do_((function(each){
  14585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14586. return $core.withContext(function($ctx2) {
  14587. //>>excludeEnd("ctx");
  14588. return $recv(each)._putOn_(aStream);
  14589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14590. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14591. //>>excludeEnd("ctx");
  14592. }));
  14593. return self;
  14594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14595. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.Collection)});
  14596. //>>excludeEnd("ctx");
  14597. },
  14598. //>>excludeStart("ide", pragmas.excludeIdeData);
  14599. args: ["aStream"],
  14600. source: "putOn: aStream\x0a\x09self do: [ :each | each putOn: aStream ]",
  14601. referencedClasses: [],
  14602. //>>excludeEnd("ide");
  14603. messageSends: ["do:", "putOn:"]
  14604. }),
  14605. $globals.Collection);
  14606. $core.addMethod(
  14607. $core.method({
  14608. selector: "reject:",
  14609. protocol: 'enumerating',
  14610. fn: function (aBlock){
  14611. var self=this;
  14612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14613. return $core.withContext(function($ctx1) {
  14614. //>>excludeEnd("ctx");
  14615. var $1;
  14616. $1=self._select_((function(each){
  14617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14618. return $core.withContext(function($ctx2) {
  14619. //>>excludeEnd("ctx");
  14620. return $recv($recv(aBlock)._value_(each)).__eq(false);
  14621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14622. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14623. //>>excludeEnd("ctx");
  14624. }));
  14625. return $1;
  14626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14627. }, function($ctx1) {$ctx1.fill(self,"reject:",{aBlock:aBlock},$globals.Collection)});
  14628. //>>excludeEnd("ctx");
  14629. },
  14630. //>>excludeStart("ide", pragmas.excludeIdeData);
  14631. args: ["aBlock"],
  14632. source: "reject: aBlock\x0a\x09^ self select: [ :each | (aBlock value: each) = false ]",
  14633. referencedClasses: [],
  14634. //>>excludeEnd("ide");
  14635. messageSends: ["select:", "=", "value:"]
  14636. }),
  14637. $globals.Collection);
  14638. $core.addMethod(
  14639. $core.method({
  14640. selector: "remove:",
  14641. protocol: 'adding/removing',
  14642. fn: function (anObject){
  14643. var self=this;
  14644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14645. return $core.withContext(function($ctx1) {
  14646. //>>excludeEnd("ctx");
  14647. var $1;
  14648. $1=self._remove_ifAbsent_(anObject,(function(){
  14649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14650. return $core.withContext(function($ctx2) {
  14651. //>>excludeEnd("ctx");
  14652. return self._errorNotFound();
  14653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14654. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14655. //>>excludeEnd("ctx");
  14656. }));
  14657. return $1;
  14658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14659. }, function($ctx1) {$ctx1.fill(self,"remove:",{anObject:anObject},$globals.Collection)});
  14660. //>>excludeEnd("ctx");
  14661. },
  14662. //>>excludeStart("ide", pragmas.excludeIdeData);
  14663. args: ["anObject"],
  14664. source: "remove: anObject\x0a\x09^ self remove: anObject ifAbsent: [ self errorNotFound ]",
  14665. referencedClasses: [],
  14666. //>>excludeEnd("ide");
  14667. messageSends: ["remove:ifAbsent:", "errorNotFound"]
  14668. }),
  14669. $globals.Collection);
  14670. $core.addMethod(
  14671. $core.method({
  14672. selector: "remove:ifAbsent:",
  14673. protocol: 'adding/removing',
  14674. fn: function (anObject,aBlock){
  14675. var self=this;
  14676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14677. return $core.withContext(function($ctx1) {
  14678. //>>excludeEnd("ctx");
  14679. self._subclassResponsibility();
  14680. return self;
  14681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14682. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.Collection)});
  14683. //>>excludeEnd("ctx");
  14684. },
  14685. //>>excludeStart("ide", pragmas.excludeIdeData);
  14686. args: ["anObject", "aBlock"],
  14687. source: "remove: anObject ifAbsent: aBlock\x0a\x09self subclassResponsibility",
  14688. referencedClasses: [],
  14689. //>>excludeEnd("ide");
  14690. messageSends: ["subclassResponsibility"]
  14691. }),
  14692. $globals.Collection);
  14693. $core.addMethod(
  14694. $core.method({
  14695. selector: "removeAll",
  14696. protocol: 'adding/removing',
  14697. fn: function (){
  14698. var self=this;
  14699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14700. return $core.withContext(function($ctx1) {
  14701. //>>excludeEnd("ctx");
  14702. self._subclassResponsibility();
  14703. return self;
  14704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14705. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Collection)});
  14706. //>>excludeEnd("ctx");
  14707. },
  14708. //>>excludeStart("ide", pragmas.excludeIdeData);
  14709. args: [],
  14710. source: "removeAll\x0a\x09self subclassResponsibility",
  14711. referencedClasses: [],
  14712. //>>excludeEnd("ide");
  14713. messageSends: ["subclassResponsibility"]
  14714. }),
  14715. $globals.Collection);
  14716. $core.addMethod(
  14717. $core.method({
  14718. selector: "select:",
  14719. protocol: 'enumerating',
  14720. fn: function (aBlock){
  14721. var self=this;
  14722. var stream;
  14723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14724. return $core.withContext(function($ctx1) {
  14725. //>>excludeEnd("ctx");
  14726. var $1,$2;
  14727. stream=$recv($recv(self._class())._new())._writeStream();
  14728. self._do_((function(each){
  14729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14730. return $core.withContext(function($ctx2) {
  14731. //>>excludeEnd("ctx");
  14732. $1=$recv(aBlock)._value_(each);
  14733. if($core.assert($1)){
  14734. return $recv(stream)._nextPut_(each);
  14735. };
  14736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14737. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14738. //>>excludeEnd("ctx");
  14739. }));
  14740. $2=$recv(stream)._contents();
  14741. return $2;
  14742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14743. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,stream:stream},$globals.Collection)});
  14744. //>>excludeEnd("ctx");
  14745. },
  14746. //>>excludeStart("ide", pragmas.excludeIdeData);
  14747. args: ["aBlock"],
  14748. source: "select: aBlock\x0a\x09| stream |\x0a\x09stream := self class new writeStream.\x0a\x09self do: [ :each |\x0a\x09\x09(aBlock value: each) ifTrue: [\x0a\x09\x09stream nextPut: each ] ].\x0a\x09^ stream contents",
  14749. referencedClasses: [],
  14750. //>>excludeEnd("ide");
  14751. messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"]
  14752. }),
  14753. $globals.Collection);
  14754. $core.addMethod(
  14755. $core.method({
  14756. selector: "select:thenCollect:",
  14757. protocol: 'enumerating',
  14758. fn: function (selectBlock,collectBlock){
  14759. var self=this;
  14760. var stream;
  14761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14762. return $core.withContext(function($ctx1) {
  14763. //>>excludeEnd("ctx");
  14764. var $1,$2;
  14765. stream=$recv($recv(self._class())._new())._writeStream();
  14766. self._do_((function(each){
  14767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14768. return $core.withContext(function($ctx2) {
  14769. //>>excludeEnd("ctx");
  14770. $1=$recv(selectBlock)._value_(each);
  14771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14772. $ctx2.sendIdx["value:"]=1;
  14773. //>>excludeEnd("ctx");
  14774. if($core.assert($1)){
  14775. return $recv(stream)._nextPut_($recv(collectBlock)._value_(each));
  14776. };
  14777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14778. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  14779. //>>excludeEnd("ctx");
  14780. }));
  14781. $2=$recv(stream)._contents();
  14782. return $2;
  14783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14784. }, function($ctx1) {$ctx1.fill(self,"select:thenCollect:",{selectBlock:selectBlock,collectBlock:collectBlock,stream:stream},$globals.Collection)});
  14785. //>>excludeEnd("ctx");
  14786. },
  14787. //>>excludeStart("ide", pragmas.excludeIdeData);
  14788. args: ["selectBlock", "collectBlock"],
  14789. source: "select: selectBlock thenCollect: collectBlock\x0a\x09| stream |\x0a\x09stream := self class new writeStream.\x0a\x09self do: [ :each |\x0a\x09\x09(selectBlock value: each) ifTrue: [\x0a\x09\x09stream nextPut: (collectBlock value: each) ] ].\x0a\x09^ stream contents",
  14790. referencedClasses: [],
  14791. //>>excludeEnd("ide");
  14792. messageSends: ["writeStream", "new", "class", "do:", "ifTrue:", "value:", "nextPut:", "contents"]
  14793. }),
  14794. $globals.Collection);
  14795. $core.addMethod(
  14796. $core.method({
  14797. selector: "size",
  14798. protocol: 'accessing',
  14799. fn: function (){
  14800. var self=this;
  14801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14802. return $core.withContext(function($ctx1) {
  14803. //>>excludeEnd("ctx");
  14804. self._subclassResponsibility();
  14805. return self;
  14806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14807. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Collection)});
  14808. //>>excludeEnd("ctx");
  14809. },
  14810. //>>excludeStart("ide", pragmas.excludeIdeData);
  14811. args: [],
  14812. source: "size\x0a\x09self subclassResponsibility",
  14813. referencedClasses: [],
  14814. //>>excludeEnd("ide");
  14815. messageSends: ["subclassResponsibility"]
  14816. }),
  14817. $globals.Collection);
  14818. $core.addMethod(
  14819. $core.method({
  14820. selector: "heliosClass",
  14821. protocol: 'helios',
  14822. fn: function (){
  14823. var self=this;
  14824. return "collection";
  14825. },
  14826. //>>excludeStart("ide", pragmas.excludeIdeData);
  14827. args: [],
  14828. source: "heliosClass\x0a\x09^ 'collection'",
  14829. referencedClasses: [],
  14830. //>>excludeEnd("ide");
  14831. messageSends: []
  14832. }),
  14833. $globals.Collection.klass);
  14834. $core.addMethod(
  14835. $core.method({
  14836. selector: "new:",
  14837. protocol: 'instance creation',
  14838. fn: function (anInteger){
  14839. var self=this;
  14840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14841. return $core.withContext(function($ctx1) {
  14842. //>>excludeEnd("ctx");
  14843. var $1;
  14844. $1=self._new();
  14845. return $1;
  14846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14847. }, function($ctx1) {$ctx1.fill(self,"new:",{anInteger:anInteger},$globals.Collection.klass)});
  14848. //>>excludeEnd("ctx");
  14849. },
  14850. //>>excludeStart("ide", pragmas.excludeIdeData);
  14851. args: ["anInteger"],
  14852. source: "new: anInteger\x0a\x09^ self new",
  14853. referencedClasses: [],
  14854. //>>excludeEnd("ide");
  14855. messageSends: ["new"]
  14856. }),
  14857. $globals.Collection.klass);
  14858. $core.addMethod(
  14859. $core.method({
  14860. selector: "with:",
  14861. protocol: 'instance creation',
  14862. fn: function (anObject){
  14863. var self=this;
  14864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14865. return $core.withContext(function($ctx1) {
  14866. //>>excludeEnd("ctx");
  14867. var $2,$3,$1;
  14868. $2=self._new();
  14869. $recv($2)._add_(anObject);
  14870. $3=$recv($2)._yourself();
  14871. $1=$3;
  14872. return $1;
  14873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14874. }, function($ctx1) {$ctx1.fill(self,"with:",{anObject:anObject},$globals.Collection.klass)});
  14875. //>>excludeEnd("ctx");
  14876. },
  14877. //>>excludeStart("ide", pragmas.excludeIdeData);
  14878. args: ["anObject"],
  14879. source: "with: anObject\x0a\x09\x09^ self new\x0a\x09\x09add: anObject;\x0a\x09\x09yourself",
  14880. referencedClasses: [],
  14881. //>>excludeEnd("ide");
  14882. messageSends: ["add:", "new", "yourself"]
  14883. }),
  14884. $globals.Collection.klass);
  14885. $core.addMethod(
  14886. $core.method({
  14887. selector: "with:with:",
  14888. protocol: 'instance creation',
  14889. fn: function (anObject,anotherObject){
  14890. var self=this;
  14891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14892. return $core.withContext(function($ctx1) {
  14893. //>>excludeEnd("ctx");
  14894. var $2,$3,$1;
  14895. $2=self._new();
  14896. $recv($2)._add_(anObject);
  14897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14898. $ctx1.sendIdx["add:"]=1;
  14899. //>>excludeEnd("ctx");
  14900. $recv($2)._add_(anotherObject);
  14901. $3=$recv($2)._yourself();
  14902. $1=$3;
  14903. return $1;
  14904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14905. }, function($ctx1) {$ctx1.fill(self,"with:with:",{anObject:anObject,anotherObject:anotherObject},$globals.Collection.klass)});
  14906. //>>excludeEnd("ctx");
  14907. },
  14908. //>>excludeStart("ide", pragmas.excludeIdeData);
  14909. args: ["anObject", "anotherObject"],
  14910. source: "with: anObject with: anotherObject\x0a\x09\x09^ self new\x0a\x09\x09add: anObject;\x0a\x09\x09add: anotherObject;\x0a\x09\x09yourself",
  14911. referencedClasses: [],
  14912. //>>excludeEnd("ide");
  14913. messageSends: ["add:", "new", "yourself"]
  14914. }),
  14915. $globals.Collection.klass);
  14916. $core.addMethod(
  14917. $core.method({
  14918. selector: "with:with:with:",
  14919. protocol: 'instance creation',
  14920. fn: function (firstObject,secondObject,thirdObject){
  14921. var self=this;
  14922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14923. return $core.withContext(function($ctx1) {
  14924. //>>excludeEnd("ctx");
  14925. var $2,$3,$1;
  14926. $2=self._new();
  14927. $recv($2)._add_(firstObject);
  14928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14929. $ctx1.sendIdx["add:"]=1;
  14930. //>>excludeEnd("ctx");
  14931. $recv($2)._add_(secondObject);
  14932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14933. $ctx1.sendIdx["add:"]=2;
  14934. //>>excludeEnd("ctx");
  14935. $recv($2)._add_(thirdObject);
  14936. $3=$recv($2)._yourself();
  14937. $1=$3;
  14938. return $1;
  14939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14940. }, function($ctx1) {$ctx1.fill(self,"with:with:with:",{firstObject:firstObject,secondObject:secondObject,thirdObject:thirdObject},$globals.Collection.klass)});
  14941. //>>excludeEnd("ctx");
  14942. },
  14943. //>>excludeStart("ide", pragmas.excludeIdeData);
  14944. args: ["firstObject", "secondObject", "thirdObject"],
  14945. source: "with: firstObject with: secondObject with: thirdObject\x0a\x09\x09^ self new\x0a\x09\x09add: firstObject;\x0a\x09\x09add: secondObject;\x0a\x09\x09add: thirdObject;\x0a\x09\x09yourself",
  14946. referencedClasses: [],
  14947. //>>excludeEnd("ide");
  14948. messageSends: ["add:", "new", "yourself"]
  14949. }),
  14950. $globals.Collection.klass);
  14951. $core.addMethod(
  14952. $core.method({
  14953. selector: "withAll:",
  14954. protocol: 'instance creation',
  14955. fn: function (aCollection){
  14956. var self=this;
  14957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14958. return $core.withContext(function($ctx1) {
  14959. //>>excludeEnd("ctx");
  14960. var $2,$3,$1;
  14961. $2=self._new();
  14962. $recv($2)._addAll_(aCollection);
  14963. $3=$recv($2)._yourself();
  14964. $1=$3;
  14965. return $1;
  14966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14967. }, function($ctx1) {$ctx1.fill(self,"withAll:",{aCollection:aCollection},$globals.Collection.klass)});
  14968. //>>excludeEnd("ctx");
  14969. },
  14970. //>>excludeStart("ide", pragmas.excludeIdeData);
  14971. args: ["aCollection"],
  14972. source: "withAll: aCollection\x0a\x09\x09^ self new\x0a\x09\x09addAll: aCollection;\x0a\x09\x09yourself",
  14973. referencedClasses: [],
  14974. //>>excludeEnd("ide");
  14975. messageSends: ["addAll:", "new", "yourself"]
  14976. }),
  14977. $globals.Collection.klass);
  14978. $core.addClass('IndexableCollection', $globals.Collection, [], 'Kernel-Collections');
  14979. //>>excludeStart("ide", pragmas.excludeIdeData);
  14980. $globals.IndexableCollection.comment="I am a key-value store collection, that is,\x0aI store values under indexes.\x0a\x0aAs a rule of thumb, if a collection has `#at:` and `#at:put:`,\x0ait is an IndexableCollection.";
  14981. //>>excludeEnd("ide");
  14982. $core.addMethod(
  14983. $core.method({
  14984. selector: "at:",
  14985. protocol: 'accessing',
  14986. fn: function (anIndex){
  14987. var self=this;
  14988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14989. return $core.withContext(function($ctx1) {
  14990. //>>excludeEnd("ctx");
  14991. var $1;
  14992. $1=self._at_ifAbsent_(anIndex,(function(){
  14993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14994. return $core.withContext(function($ctx2) {
  14995. //>>excludeEnd("ctx");
  14996. return self._errorNotFound();
  14997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  14998. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  14999. //>>excludeEnd("ctx");
  15000. }));
  15001. return $1;
  15002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15003. }, function($ctx1) {$ctx1.fill(self,"at:",{anIndex:anIndex},$globals.IndexableCollection)});
  15004. //>>excludeEnd("ctx");
  15005. },
  15006. //>>excludeStart("ide", pragmas.excludeIdeData);
  15007. args: ["anIndex"],
  15008. source: "at: anIndex\x0a\x09\x22Lookup the given index in the receiver.\x0a\x09If it is present, answer the value stored at anIndex.\x0a\x09Otherwise, raise an error.\x22\x0a\x0a\x09^ self at: anIndex ifAbsent: [ self errorNotFound ]",
  15009. referencedClasses: [],
  15010. //>>excludeEnd("ide");
  15011. messageSends: ["at:ifAbsent:", "errorNotFound"]
  15012. }),
  15013. $globals.IndexableCollection);
  15014. $core.addMethod(
  15015. $core.method({
  15016. selector: "at:ifAbsent:",
  15017. protocol: 'accessing',
  15018. fn: function (anIndex,aBlock){
  15019. var self=this;
  15020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15021. return $core.withContext(function($ctx1) {
  15022. //>>excludeEnd("ctx");
  15023. self._subclassResponsibility();
  15024. return self;
  15025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15026. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.IndexableCollection)});
  15027. //>>excludeEnd("ctx");
  15028. },
  15029. //>>excludeStart("ide", pragmas.excludeIdeData);
  15030. args: ["anIndex", "aBlock"],
  15031. source: "at: anIndex ifAbsent: aBlock\x0a\x09\x22Lookup the given index in the receiver.\x0a\x09If it is present, answer the value stored at anIndex.\x0a\x09Otherwise, answer the value of aBlock.\x22\x0a\x0a\x09self subclassResponsibility",
  15032. referencedClasses: [],
  15033. //>>excludeEnd("ide");
  15034. messageSends: ["subclassResponsibility"]
  15035. }),
  15036. $globals.IndexableCollection);
  15037. $core.addMethod(
  15038. $core.method({
  15039. selector: "at:ifAbsentPut:",
  15040. protocol: 'accessing',
  15041. fn: function (aKey,aBlock){
  15042. var self=this;
  15043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15044. return $core.withContext(function($ctx1) {
  15045. //>>excludeEnd("ctx");
  15046. var $1;
  15047. $1=self._at_ifAbsent_(aKey,(function(){
  15048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15049. return $core.withContext(function($ctx2) {
  15050. //>>excludeEnd("ctx");
  15051. return self._at_put_(aKey,$recv(aBlock)._value());
  15052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15053. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15054. //>>excludeEnd("ctx");
  15055. }));
  15056. return $1;
  15057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15058. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsentPut:",{aKey:aKey,aBlock:aBlock},$globals.IndexableCollection)});
  15059. //>>excludeEnd("ctx");
  15060. },
  15061. //>>excludeStart("ide", pragmas.excludeIdeData);
  15062. args: ["aKey", "aBlock"],
  15063. source: "at: aKey ifAbsentPut: aBlock\x0a\x09^ self at: aKey ifAbsent: [\x0a\x09\x09self at: aKey put: aBlock value ]",
  15064. referencedClasses: [],
  15065. //>>excludeEnd("ide");
  15066. messageSends: ["at:ifAbsent:", "at:put:", "value"]
  15067. }),
  15068. $globals.IndexableCollection);
  15069. $core.addMethod(
  15070. $core.method({
  15071. selector: "at:ifPresent:",
  15072. protocol: 'accessing',
  15073. fn: function (anIndex,aBlock){
  15074. var self=this;
  15075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15076. return $core.withContext(function($ctx1) {
  15077. //>>excludeEnd("ctx");
  15078. var $1;
  15079. $1=self._at_ifPresent_ifAbsent_(anIndex,aBlock,(function(){
  15080. return nil;
  15081. }));
  15082. return $1;
  15083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15084. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:",{anIndex:anIndex,aBlock:aBlock},$globals.IndexableCollection)});
  15085. //>>excludeEnd("ctx");
  15086. },
  15087. //>>excludeStart("ide", pragmas.excludeIdeData);
  15088. args: ["anIndex", "aBlock"],
  15089. source: "at: anIndex ifPresent: aBlock\x0a\x09\x22Lookup the given index in the receiver.\x0a\x09If it is present, answer the value of evaluating aBlock with the value stored at anIndex.\x0a\x09Otherwise, answer nil.\x22\x0a\x0a\x09^ self at: anIndex ifPresent: aBlock ifAbsent: [ nil ]",
  15090. referencedClasses: [],
  15091. //>>excludeEnd("ide");
  15092. messageSends: ["at:ifPresent:ifAbsent:"]
  15093. }),
  15094. $globals.IndexableCollection);
  15095. $core.addMethod(
  15096. $core.method({
  15097. selector: "at:ifPresent:ifAbsent:",
  15098. protocol: 'accessing',
  15099. fn: function (anIndex,aBlock,anotherBlock){
  15100. var self=this;
  15101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15102. return $core.withContext(function($ctx1) {
  15103. //>>excludeEnd("ctx");
  15104. self._subclassResponsibility();
  15105. return self;
  15106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15107. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.IndexableCollection)});
  15108. //>>excludeEnd("ctx");
  15109. },
  15110. //>>excludeStart("ide", pragmas.excludeIdeData);
  15111. args: ["anIndex", "aBlock", "anotherBlock"],
  15112. source: "at: anIndex ifPresent: aBlock ifAbsent: anotherBlock\x0a\x09\x22Lookup the given index in the receiver.\x0a\x09If it is present, answer the value of evaluating aBlock with the value stored at anIndex.\x0a\x09Otherwise, answer the value of anotherBlock.\x22\x0a\x0a\x09self subclassResponsibility",
  15113. referencedClasses: [],
  15114. //>>excludeEnd("ide");
  15115. messageSends: ["subclassResponsibility"]
  15116. }),
  15117. $globals.IndexableCollection);
  15118. $core.addMethod(
  15119. $core.method({
  15120. selector: "at:put:",
  15121. protocol: 'accessing',
  15122. fn: function (anIndex,anObject){
  15123. var self=this;
  15124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15125. return $core.withContext(function($ctx1) {
  15126. //>>excludeEnd("ctx");
  15127. self._subclassResponsibility();
  15128. return self;
  15129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15130. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.IndexableCollection)});
  15131. //>>excludeEnd("ctx");
  15132. },
  15133. //>>excludeStart("ide", pragmas.excludeIdeData);
  15134. args: ["anIndex", "anObject"],
  15135. source: "at: anIndex put: anObject\x0a\x09\x22Store anObject under the given index in the receiver.\x22\x0a\x0a\x09self subclassResponsibility",
  15136. referencedClasses: [],
  15137. //>>excludeEnd("ide");
  15138. messageSends: ["subclassResponsibility"]
  15139. }),
  15140. $globals.IndexableCollection);
  15141. $core.addMethod(
  15142. $core.method({
  15143. selector: "indexOf:",
  15144. protocol: 'accessing',
  15145. fn: function (anObject){
  15146. var self=this;
  15147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15148. return $core.withContext(function($ctx1) {
  15149. //>>excludeEnd("ctx");
  15150. var $1;
  15151. $1=self._indexOf_ifAbsent_(anObject,(function(){
  15152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15153. return $core.withContext(function($ctx2) {
  15154. //>>excludeEnd("ctx");
  15155. return self._errorNotFound();
  15156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15157. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15158. //>>excludeEnd("ctx");
  15159. }));
  15160. return $1;
  15161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15162. }, function($ctx1) {$ctx1.fill(self,"indexOf:",{anObject:anObject},$globals.IndexableCollection)});
  15163. //>>excludeEnd("ctx");
  15164. },
  15165. //>>excludeStart("ide", pragmas.excludeIdeData);
  15166. args: ["anObject"],
  15167. source: "indexOf: anObject\x0a\x09\x22Lookup index at which anObject is stored in the receiver.\x0a\x09If not present, raise an error.\x22\x0a\x0a\x09^ self indexOf: anObject ifAbsent: [ self errorNotFound ]",
  15168. referencedClasses: [],
  15169. //>>excludeEnd("ide");
  15170. messageSends: ["indexOf:ifAbsent:", "errorNotFound"]
  15171. }),
  15172. $globals.IndexableCollection);
  15173. $core.addMethod(
  15174. $core.method({
  15175. selector: "indexOf:ifAbsent:",
  15176. protocol: 'accessing',
  15177. fn: function (anObject,aBlock){
  15178. var self=this;
  15179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15180. return $core.withContext(function($ctx1) {
  15181. //>>excludeEnd("ctx");
  15182. self._subclassResponsibility();
  15183. return self;
  15184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15185. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.IndexableCollection)});
  15186. //>>excludeEnd("ctx");
  15187. },
  15188. //>>excludeStart("ide", pragmas.excludeIdeData);
  15189. args: ["anObject", "aBlock"],
  15190. source: "indexOf: anObject ifAbsent: aBlock\x0a\x09\x22Lookup index at which anObject is stored in the receiver.\x0a\x09If not present, return value of executing aBlock.\x22\x0a\x0a\x09self subclassResponsibility",
  15191. referencedClasses: [],
  15192. //>>excludeEnd("ide");
  15193. messageSends: ["subclassResponsibility"]
  15194. }),
  15195. $globals.IndexableCollection);
  15196. $core.addMethod(
  15197. $core.method({
  15198. selector: "with:do:",
  15199. protocol: 'enumerating',
  15200. fn: function (anotherCollection,aBlock){
  15201. var self=this;
  15202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15203. return $core.withContext(function($ctx1) {
  15204. //>>excludeEnd("ctx");
  15205. self._withIndexDo_((function(each,index){
  15206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15207. return $core.withContext(function($ctx2) {
  15208. //>>excludeEnd("ctx");
  15209. return $recv(aBlock)._value_value_(each,$recv(anotherCollection)._at_(index));
  15210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15211. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  15212. //>>excludeEnd("ctx");
  15213. }));
  15214. return self;
  15215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15216. }, function($ctx1) {$ctx1.fill(self,"with:do:",{anotherCollection:anotherCollection,aBlock:aBlock},$globals.IndexableCollection)});
  15217. //>>excludeEnd("ctx");
  15218. },
  15219. //>>excludeStart("ide", pragmas.excludeIdeData);
  15220. args: ["anotherCollection", "aBlock"],
  15221. source: "with: anotherCollection do: aBlock\x0a\x09\x22Calls aBlock with every value from self\x0a\x09and with indetically-indexed value from anotherCollection\x22\x0a\x0a\x09self withIndexDo: [ :each :index |\x0a\x09\x09aBlock value: each value: (anotherCollection at: index) ]",
  15222. referencedClasses: [],
  15223. //>>excludeEnd("ide");
  15224. messageSends: ["withIndexDo:", "value:value:", "at:"]
  15225. }),
  15226. $globals.IndexableCollection);
  15227. $core.addMethod(
  15228. $core.method({
  15229. selector: "withIndexDo:",
  15230. protocol: 'enumerating',
  15231. fn: function (aBlock){
  15232. var self=this;
  15233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15234. return $core.withContext(function($ctx1) {
  15235. //>>excludeEnd("ctx");
  15236. self._subclassResponsibility();
  15237. return self;
  15238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15239. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.IndexableCollection)});
  15240. //>>excludeEnd("ctx");
  15241. },
  15242. //>>excludeStart("ide", pragmas.excludeIdeData);
  15243. args: ["aBlock"],
  15244. source: "withIndexDo: aBlock\x0a\x09\x22Calls aBlock with every value from self\x0a\x09and with its index as the second argument\x22\x0a\x0a\x09self subclassResponsibility",
  15245. referencedClasses: [],
  15246. //>>excludeEnd("ide");
  15247. messageSends: ["subclassResponsibility"]
  15248. }),
  15249. $globals.IndexableCollection);
  15250. $core.addClass('AssociativeCollection', $globals.IndexableCollection, [], 'Kernel-Collections');
  15251. //>>excludeStart("ide", pragmas.excludeIdeData);
  15252. $globals.AssociativeCollection.comment="I am a base class for object-indexed collections (Dictionary et.al.).";
  15253. //>>excludeEnd("ide");
  15254. $core.addMethod(
  15255. $core.method({
  15256. selector: "=",
  15257. protocol: 'comparing',
  15258. fn: function (anAssocitativeCollection){
  15259. var self=this;
  15260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15261. return $core.withContext(function($ctx1) {
  15262. //>>excludeEnd("ctx");
  15263. var $2,$1,$4,$3,$6,$5;
  15264. $2=self._class();
  15265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15266. $ctx1.sendIdx["class"]=1;
  15267. //>>excludeEnd("ctx");
  15268. $1=$recv($2).__eq($recv(anAssocitativeCollection)._class());
  15269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15270. $ctx1.sendIdx["="]=1;
  15271. //>>excludeEnd("ctx");
  15272. if(!$core.assert($1)){
  15273. return false;
  15274. };
  15275. $4=self._size();
  15276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15277. $ctx1.sendIdx["size"]=1;
  15278. //>>excludeEnd("ctx");
  15279. $3=$recv($4).__eq($recv(anAssocitativeCollection)._size());
  15280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15281. $ctx1.sendIdx["="]=2;
  15282. //>>excludeEnd("ctx");
  15283. if(!$core.assert($3)){
  15284. return false;
  15285. };
  15286. $6=self._associations();
  15287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15288. $ctx1.sendIdx["associations"]=1;
  15289. //>>excludeEnd("ctx");
  15290. $5=$recv($6).__eq($recv(anAssocitativeCollection)._associations());
  15291. return $5;
  15292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15293. }, function($ctx1) {$ctx1.fill(self,"=",{anAssocitativeCollection:anAssocitativeCollection},$globals.AssociativeCollection)});
  15294. //>>excludeEnd("ctx");
  15295. },
  15296. //>>excludeStart("ide", pragmas.excludeIdeData);
  15297. args: ["anAssocitativeCollection"],
  15298. source: "= anAssocitativeCollection\x0a\x09self class = anAssocitativeCollection class ifFalse: [ ^ false ].\x0a\x09self size = anAssocitativeCollection size ifFalse: [ ^ false ].\x0a\x09^ self associations = anAssocitativeCollection associations",
  15299. referencedClasses: [],
  15300. //>>excludeEnd("ide");
  15301. messageSends: ["ifFalse:", "=", "class", "size", "associations"]
  15302. }),
  15303. $globals.AssociativeCollection);
  15304. $core.addMethod(
  15305. $core.method({
  15306. selector: "add:",
  15307. protocol: 'adding/removing',
  15308. fn: function (anAssociation){
  15309. var self=this;
  15310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15311. return $core.withContext(function($ctx1) {
  15312. //>>excludeEnd("ctx");
  15313. self._at_put_($recv(anAssociation)._key(),$recv(anAssociation)._value());
  15314. return self;
  15315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15316. }, function($ctx1) {$ctx1.fill(self,"add:",{anAssociation:anAssociation},$globals.AssociativeCollection)});
  15317. //>>excludeEnd("ctx");
  15318. },
  15319. //>>excludeStart("ide", pragmas.excludeIdeData);
  15320. args: ["anAssociation"],
  15321. source: "add: anAssociation\x0a\x09self at: anAssociation key put: anAssociation value",
  15322. referencedClasses: [],
  15323. //>>excludeEnd("ide");
  15324. messageSends: ["at:put:", "key", "value"]
  15325. }),
  15326. $globals.AssociativeCollection);
  15327. $core.addMethod(
  15328. $core.method({
  15329. selector: "addAll:",
  15330. protocol: 'adding/removing',
  15331. fn: function (anAssociativeCollection){
  15332. var self=this;
  15333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15334. return $core.withContext(function($ctx1) {
  15335. //>>excludeEnd("ctx");
  15336. (
  15337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15338. $ctx1.supercall = true,
  15339. //>>excludeEnd("ctx");
  15340. $globals.AssociativeCollection.superclass.fn.prototype._addAll_.apply($recv(self), [$recv(anAssociativeCollection)._associations()]));
  15341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15342. $ctx1.supercall = false;
  15343. //>>excludeEnd("ctx");;
  15344. return anAssociativeCollection;
  15345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15346. }, function($ctx1) {$ctx1.fill(self,"addAll:",{anAssociativeCollection:anAssociativeCollection},$globals.AssociativeCollection)});
  15347. //>>excludeEnd("ctx");
  15348. },
  15349. //>>excludeStart("ide", pragmas.excludeIdeData);
  15350. args: ["anAssociativeCollection"],
  15351. source: "addAll: anAssociativeCollection\x0a\x09super addAll: anAssociativeCollection associations.\x0a\x09^ anAssociativeCollection",
  15352. referencedClasses: [],
  15353. //>>excludeEnd("ide");
  15354. messageSends: ["addAll:", "associations"]
  15355. }),
  15356. $globals.AssociativeCollection);
  15357. $core.addMethod(
  15358. $core.method({
  15359. selector: "asDictionary",
  15360. protocol: 'converting',
  15361. fn: function (){
  15362. var self=this;
  15363. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  15364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15365. return $core.withContext(function($ctx1) {
  15366. //>>excludeEnd("ctx");
  15367. var $1;
  15368. $1=$recv($Dictionary())._from_(self._associations());
  15369. return $1;
  15370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15371. }, function($ctx1) {$ctx1.fill(self,"asDictionary",{},$globals.AssociativeCollection)});
  15372. //>>excludeEnd("ctx");
  15373. },
  15374. //>>excludeStart("ide", pragmas.excludeIdeData);
  15375. args: [],
  15376. source: "asDictionary\x0a\x09^ Dictionary from: self associations",
  15377. referencedClasses: ["Dictionary"],
  15378. //>>excludeEnd("ide");
  15379. messageSends: ["from:", "associations"]
  15380. }),
  15381. $globals.AssociativeCollection);
  15382. $core.addMethod(
  15383. $core.method({
  15384. selector: "asHashedCollection",
  15385. protocol: 'converting',
  15386. fn: function (){
  15387. var self=this;
  15388. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  15389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15390. return $core.withContext(function($ctx1) {
  15391. //>>excludeEnd("ctx");
  15392. var $1;
  15393. $1=$recv($HashedCollection())._from_(self._associations());
  15394. return $1;
  15395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15396. }, function($ctx1) {$ctx1.fill(self,"asHashedCollection",{},$globals.AssociativeCollection)});
  15397. //>>excludeEnd("ctx");
  15398. },
  15399. //>>excludeStart("ide", pragmas.excludeIdeData);
  15400. args: [],
  15401. source: "asHashedCollection\x0a\x09^ HashedCollection from: self associations",
  15402. referencedClasses: ["HashedCollection"],
  15403. //>>excludeEnd("ide");
  15404. messageSends: ["from:", "associations"]
  15405. }),
  15406. $globals.AssociativeCollection);
  15407. $core.addMethod(
  15408. $core.method({
  15409. selector: "asJSON",
  15410. protocol: 'converting',
  15411. fn: function (){
  15412. var self=this;
  15413. var hash;
  15414. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  15415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15416. return $core.withContext(function($ctx1) {
  15417. //>>excludeEnd("ctx");
  15418. var $1;
  15419. hash=$recv($HashedCollection())._new();
  15420. self._keysAndValuesDo_((function(key,value){
  15421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15422. return $core.withContext(function($ctx2) {
  15423. //>>excludeEnd("ctx");
  15424. return $recv(hash)._at_put_(key,$recv(value)._asJSON());
  15425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15426. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15427. //>>excludeEnd("ctx");
  15428. }));
  15429. $1=hash;
  15430. return $1;
  15431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15432. }, function($ctx1) {$ctx1.fill(self,"asJSON",{hash:hash},$globals.AssociativeCollection)});
  15433. //>>excludeEnd("ctx");
  15434. },
  15435. //>>excludeStart("ide", pragmas.excludeIdeData);
  15436. args: [],
  15437. source: "asJSON\x0a\x09| hash |\x0a\x09hash := HashedCollection new.\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09hash at: key put: value asJSON ].\x0a\x09^ hash",
  15438. referencedClasses: ["HashedCollection"],
  15439. //>>excludeEnd("ide");
  15440. messageSends: ["new", "keysAndValuesDo:", "at:put:", "asJSON"]
  15441. }),
  15442. $globals.AssociativeCollection);
  15443. $core.addMethod(
  15444. $core.method({
  15445. selector: "associations",
  15446. protocol: 'accessing',
  15447. fn: function (){
  15448. var self=this;
  15449. var associations;
  15450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15451. return $core.withContext(function($ctx1) {
  15452. //>>excludeEnd("ctx");
  15453. var $1;
  15454. associations=[];
  15455. self._associationsDo_((function(each){
  15456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15457. return $core.withContext(function($ctx2) {
  15458. //>>excludeEnd("ctx");
  15459. return $recv(associations)._add_(each);
  15460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15461. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15462. //>>excludeEnd("ctx");
  15463. }));
  15464. $1=associations;
  15465. return $1;
  15466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15467. }, function($ctx1) {$ctx1.fill(self,"associations",{associations:associations},$globals.AssociativeCollection)});
  15468. //>>excludeEnd("ctx");
  15469. },
  15470. //>>excludeStart("ide", pragmas.excludeIdeData);
  15471. args: [],
  15472. source: "associations\x0a\x09| associations |\x0a\x09associations := #().\x0a\x09self associationsDo: [ :each | associations add: each ].\x0a\x09^ associations",
  15473. referencedClasses: [],
  15474. //>>excludeEnd("ide");
  15475. messageSends: ["associationsDo:", "add:"]
  15476. }),
  15477. $globals.AssociativeCollection);
  15478. $core.addMethod(
  15479. $core.method({
  15480. selector: "associationsDo:",
  15481. protocol: 'enumerating',
  15482. fn: function (aBlock){
  15483. var self=this;
  15484. function $Association(){return $globals.Association||(typeof Association=="undefined"?nil:Association)}
  15485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15486. return $core.withContext(function($ctx1) {
  15487. //>>excludeEnd("ctx");
  15488. self._keysAndValuesDo_((function(key,value){
  15489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15490. return $core.withContext(function($ctx2) {
  15491. //>>excludeEnd("ctx");
  15492. return $recv(aBlock)._value_($recv($Association())._key_value_(key,value));
  15493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15494. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15495. //>>excludeEnd("ctx");
  15496. }));
  15497. return self;
  15498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15499. }, function($ctx1) {$ctx1.fill(self,"associationsDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  15500. //>>excludeEnd("ctx");
  15501. },
  15502. //>>excludeStart("ide", pragmas.excludeIdeData);
  15503. args: ["aBlock"],
  15504. source: "associationsDo: aBlock\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09aBlock value: (Association key: key value: value) ]",
  15505. referencedClasses: ["Association"],
  15506. //>>excludeEnd("ide");
  15507. messageSends: ["keysAndValuesDo:", "value:", "key:value:"]
  15508. }),
  15509. $globals.AssociativeCollection);
  15510. $core.addMethod(
  15511. $core.method({
  15512. selector: "at:ifPresent:ifAbsent:",
  15513. protocol: 'accessing',
  15514. fn: function (aKey,aBlock,anotherBlock){
  15515. var self=this;
  15516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15517. return $core.withContext(function($ctx1) {
  15518. //>>excludeEnd("ctx");
  15519. var $2,$1;
  15520. $2=self._includesKey_(aKey);
  15521. if($core.assert($2)){
  15522. $1=$recv(aBlock)._value_(self._at_(aKey));
  15523. } else {
  15524. $1=$recv(anotherBlock)._value();
  15525. };
  15526. return $1;
  15527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15528. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{aKey:aKey,aBlock:aBlock,anotherBlock:anotherBlock},$globals.AssociativeCollection)});
  15529. //>>excludeEnd("ctx");
  15530. },
  15531. //>>excludeStart("ide", pragmas.excludeIdeData);
  15532. args: ["aKey", "aBlock", "anotherBlock"],
  15533. source: "at: aKey ifPresent: aBlock ifAbsent: anotherBlock\x0a\x09\x22Lookup the given key in the receiver.\x0a\x09If it is present, answer the value of evaluating the oneArgBlock \x0a\x09with the value associated with the key, otherwise answer the value \x0a\x09of absentBlock.\x22\x0a\x09\x0a\x09^ (self includesKey: aKey)\x0a\x09\x09ifTrue: [ aBlock value: (self at: aKey) ]\x0a\x09\x09ifFalse: [ anotherBlock value ]",
  15534. referencedClasses: [],
  15535. //>>excludeEnd("ide");
  15536. messageSends: ["ifTrue:ifFalse:", "includesKey:", "value:", "at:", "value"]
  15537. }),
  15538. $globals.AssociativeCollection);
  15539. $core.addMethod(
  15540. $core.method({
  15541. selector: "collect:",
  15542. protocol: 'enumerating',
  15543. fn: function (aBlock){
  15544. var self=this;
  15545. var newDict;
  15546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15547. return $core.withContext(function($ctx1) {
  15548. //>>excludeEnd("ctx");
  15549. var $1;
  15550. newDict=$recv(self._class())._new();
  15551. self._keysAndValuesDo_((function(key,value){
  15552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15553. return $core.withContext(function($ctx2) {
  15554. //>>excludeEnd("ctx");
  15555. return $recv(newDict)._at_put_(key,$recv(aBlock)._value_(value));
  15556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15557. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15558. //>>excludeEnd("ctx");
  15559. }));
  15560. $1=newDict;
  15561. return $1;
  15562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15563. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,newDict:newDict},$globals.AssociativeCollection)});
  15564. //>>excludeEnd("ctx");
  15565. },
  15566. //>>excludeStart("ide", pragmas.excludeIdeData);
  15567. args: ["aBlock"],
  15568. source: "collect: aBlock\x0a\x09| newDict |\x0a\x09newDict := self class new.\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09newDict at: key put: (aBlock value: value) ].\x0a\x09^ newDict",
  15569. referencedClasses: [],
  15570. //>>excludeEnd("ide");
  15571. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "value:"]
  15572. }),
  15573. $globals.AssociativeCollection);
  15574. $core.addMethod(
  15575. $core.method({
  15576. selector: "deepCopy",
  15577. protocol: 'copying',
  15578. fn: function (){
  15579. var self=this;
  15580. var copy;
  15581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15582. return $core.withContext(function($ctx1) {
  15583. //>>excludeEnd("ctx");
  15584. var $1;
  15585. copy=$recv(self._class())._new();
  15586. self._keysAndValuesDo_((function(key,value){
  15587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15588. return $core.withContext(function($ctx2) {
  15589. //>>excludeEnd("ctx");
  15590. return $recv(copy)._at_put_(key,$recv(value)._deepCopy());
  15591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15592. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  15593. //>>excludeEnd("ctx");
  15594. }));
  15595. $1=copy;
  15596. return $1;
  15597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15598. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{copy:copy},$globals.AssociativeCollection)});
  15599. //>>excludeEnd("ctx");
  15600. },
  15601. //>>excludeStart("ide", pragmas.excludeIdeData);
  15602. args: [],
  15603. source: "deepCopy\x0a\x09| copy |\x0a\x09copy := self class new.\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09copy at: key put: value deepCopy ].\x0a\x09^ copy",
  15604. referencedClasses: [],
  15605. //>>excludeEnd("ide");
  15606. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:", "deepCopy"]
  15607. }),
  15608. $globals.AssociativeCollection);
  15609. $core.addMethod(
  15610. $core.method({
  15611. selector: "detect:ifNone:",
  15612. protocol: 'enumerating',
  15613. fn: function (aBlock,anotherBlock){
  15614. var self=this;
  15615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15616. return $core.withContext(function($ctx1) {
  15617. //>>excludeEnd("ctx");
  15618. var $1;
  15619. $1=$recv(self._values())._detect_ifNone_(aBlock,anotherBlock);
  15620. return $1;
  15621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15622. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.AssociativeCollection)});
  15623. //>>excludeEnd("ctx");
  15624. },
  15625. //>>excludeStart("ide", pragmas.excludeIdeData);
  15626. args: ["aBlock", "anotherBlock"],
  15627. source: "detect: aBlock ifNone: anotherBlock\x0a\x09^ self values detect: aBlock ifNone: anotherBlock",
  15628. referencedClasses: [],
  15629. //>>excludeEnd("ide");
  15630. messageSends: ["detect:ifNone:", "values"]
  15631. }),
  15632. $globals.AssociativeCollection);
  15633. $core.addMethod(
  15634. $core.method({
  15635. selector: "do:",
  15636. protocol: 'enumerating',
  15637. fn: function (aBlock){
  15638. var self=this;
  15639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15640. return $core.withContext(function($ctx1) {
  15641. //>>excludeEnd("ctx");
  15642. self._valuesDo_(aBlock);
  15643. return self;
  15644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15645. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.AssociativeCollection)});
  15646. //>>excludeEnd("ctx");
  15647. },
  15648. //>>excludeStart("ide", pragmas.excludeIdeData);
  15649. args: ["aBlock"],
  15650. source: "do: aBlock\x0a\x09self valuesDo: aBlock",
  15651. referencedClasses: [],
  15652. //>>excludeEnd("ide");
  15653. messageSends: ["valuesDo:"]
  15654. }),
  15655. $globals.AssociativeCollection);
  15656. $core.addMethod(
  15657. $core.method({
  15658. selector: "includes:",
  15659. protocol: 'enumerating',
  15660. fn: function (anObject){
  15661. var self=this;
  15662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15663. return $core.withContext(function($ctx1) {
  15664. //>>excludeEnd("ctx");
  15665. var $1;
  15666. $1=$recv(self._values())._includes_(anObject);
  15667. return $1;
  15668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15669. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.AssociativeCollection)});
  15670. //>>excludeEnd("ctx");
  15671. },
  15672. //>>excludeStart("ide", pragmas.excludeIdeData);
  15673. args: ["anObject"],
  15674. source: "includes: anObject\x0a\x09^ self values includes: anObject",
  15675. referencedClasses: [],
  15676. //>>excludeEnd("ide");
  15677. messageSends: ["includes:", "values"]
  15678. }),
  15679. $globals.AssociativeCollection);
  15680. $core.addMethod(
  15681. $core.method({
  15682. selector: "includesKey:",
  15683. protocol: 'testing',
  15684. fn: function (aKey){
  15685. var self=this;
  15686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15687. return $core.withContext(function($ctx1) {
  15688. //>>excludeEnd("ctx");
  15689. self._subclassResponsibility();
  15690. return self;
  15691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15692. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.AssociativeCollection)});
  15693. //>>excludeEnd("ctx");
  15694. },
  15695. //>>excludeStart("ide", pragmas.excludeIdeData);
  15696. args: ["aKey"],
  15697. source: "includesKey: aKey\x0a\x09self subclassResponsibility",
  15698. referencedClasses: [],
  15699. //>>excludeEnd("ide");
  15700. messageSends: ["subclassResponsibility"]
  15701. }),
  15702. $globals.AssociativeCollection);
  15703. $core.addMethod(
  15704. $core.method({
  15705. selector: "indexOf:ifAbsent:",
  15706. protocol: 'accessing',
  15707. fn: function (anObject,aBlock){
  15708. var self=this;
  15709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15710. return $core.withContext(function($ctx1) {
  15711. //>>excludeEnd("ctx");
  15712. var $1;
  15713. $1=$recv(self._keys())._detect_ifNone_((function(each){
  15714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15715. return $core.withContext(function($ctx2) {
  15716. //>>excludeEnd("ctx");
  15717. return $recv(self._at_(each)).__eq(anObject);
  15718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15719. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15720. //>>excludeEnd("ctx");
  15721. }),aBlock);
  15722. return $1;
  15723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15724. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.AssociativeCollection)});
  15725. //>>excludeEnd("ctx");
  15726. },
  15727. //>>excludeStart("ide", pragmas.excludeIdeData);
  15728. args: ["anObject", "aBlock"],
  15729. source: "indexOf: anObject ifAbsent: aBlock\x0a\x09^ self keys \x0a\x09\x09detect: [ :each | (self at: each) = anObject ] \x0a\x09\x09ifNone: aBlock",
  15730. referencedClasses: [],
  15731. //>>excludeEnd("ide");
  15732. messageSends: ["detect:ifNone:", "keys", "=", "at:"]
  15733. }),
  15734. $globals.AssociativeCollection);
  15735. $core.addMethod(
  15736. $core.method({
  15737. selector: "keyAtValue:",
  15738. protocol: 'accessing',
  15739. fn: function (anObject){
  15740. var self=this;
  15741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15742. return $core.withContext(function($ctx1) {
  15743. //>>excludeEnd("ctx");
  15744. var $1;
  15745. $1=self._keyAtValue_ifAbsent_(anObject,(function(){
  15746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15747. return $core.withContext(function($ctx2) {
  15748. //>>excludeEnd("ctx");
  15749. return self._errorNotFound();
  15750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15751. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  15752. //>>excludeEnd("ctx");
  15753. }));
  15754. return $1;
  15755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15756. }, function($ctx1) {$ctx1.fill(self,"keyAtValue:",{anObject:anObject},$globals.AssociativeCollection)});
  15757. //>>excludeEnd("ctx");
  15758. },
  15759. //>>excludeStart("ide", pragmas.excludeIdeData);
  15760. args: ["anObject"],
  15761. source: "keyAtValue: anObject\x0a\x09^ self keyAtValue: anObject ifAbsent: [ self errorNotFound ]",
  15762. referencedClasses: [],
  15763. //>>excludeEnd("ide");
  15764. messageSends: ["keyAtValue:ifAbsent:", "errorNotFound"]
  15765. }),
  15766. $globals.AssociativeCollection);
  15767. $core.addMethod(
  15768. $core.method({
  15769. selector: "keyAtValue:ifAbsent:",
  15770. protocol: 'accessing',
  15771. fn: function (anObject,aBlock){
  15772. var self=this;
  15773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15774. return $core.withContext(function($ctx1) {
  15775. //>>excludeEnd("ctx");
  15776. var $1;
  15777. $1=self._indexOf_ifAbsent_(anObject,aBlock);
  15778. return $1;
  15779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15780. }, function($ctx1) {$ctx1.fill(self,"keyAtValue:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.AssociativeCollection)});
  15781. //>>excludeEnd("ctx");
  15782. },
  15783. //>>excludeStart("ide", pragmas.excludeIdeData);
  15784. args: ["anObject", "aBlock"],
  15785. source: "keyAtValue: anObject ifAbsent: aBlock\x0a\x09^ self indexOf: anObject ifAbsent: aBlock",
  15786. referencedClasses: [],
  15787. //>>excludeEnd("ide");
  15788. messageSends: ["indexOf:ifAbsent:"]
  15789. }),
  15790. $globals.AssociativeCollection);
  15791. $core.addMethod(
  15792. $core.method({
  15793. selector: "keys",
  15794. protocol: 'accessing',
  15795. fn: function (){
  15796. var self=this;
  15797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15798. return $core.withContext(function($ctx1) {
  15799. //>>excludeEnd("ctx");
  15800. self._subclassResponsibility();
  15801. return self;
  15802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15803. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.AssociativeCollection)});
  15804. //>>excludeEnd("ctx");
  15805. },
  15806. //>>excludeStart("ide", pragmas.excludeIdeData);
  15807. args: [],
  15808. source: "keys\x0a\x09self subclassResponsibility",
  15809. referencedClasses: [],
  15810. //>>excludeEnd("ide");
  15811. messageSends: ["subclassResponsibility"]
  15812. }),
  15813. $globals.AssociativeCollection);
  15814. $core.addMethod(
  15815. $core.method({
  15816. selector: "keysAndValuesDo:",
  15817. protocol: 'enumerating',
  15818. fn: function (aBlock){
  15819. var self=this;
  15820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15821. return $core.withContext(function($ctx1) {
  15822. //>>excludeEnd("ctx");
  15823. self._keysDo_((function(each){
  15824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15825. return $core.withContext(function($ctx2) {
  15826. //>>excludeEnd("ctx");
  15827. return $recv(aBlock)._value_value_(each,self._at_(each));
  15828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15829. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15830. //>>excludeEnd("ctx");
  15831. }));
  15832. return self;
  15833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15834. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  15835. //>>excludeEnd("ctx");
  15836. },
  15837. //>>excludeStart("ide", pragmas.excludeIdeData);
  15838. args: ["aBlock"],
  15839. source: "keysAndValuesDo: aBlock\x0a\x09self keysDo: [ :each |\x0a\x09\x09aBlock value: each value: (self at: each) ]",
  15840. referencedClasses: [],
  15841. //>>excludeEnd("ide");
  15842. messageSends: ["keysDo:", "value:value:", "at:"]
  15843. }),
  15844. $globals.AssociativeCollection);
  15845. $core.addMethod(
  15846. $core.method({
  15847. selector: "keysDo:",
  15848. protocol: 'enumerating',
  15849. fn: function (aBlock){
  15850. var self=this;
  15851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15852. return $core.withContext(function($ctx1) {
  15853. //>>excludeEnd("ctx");
  15854. self._subclassResponsibility();
  15855. return self;
  15856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15857. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  15858. //>>excludeEnd("ctx");
  15859. },
  15860. //>>excludeStart("ide", pragmas.excludeIdeData);
  15861. args: ["aBlock"],
  15862. source: "keysDo: aBlock\x0a\x09self subclassResponsibility",
  15863. referencedClasses: [],
  15864. //>>excludeEnd("ide");
  15865. messageSends: ["subclassResponsibility"]
  15866. }),
  15867. $globals.AssociativeCollection);
  15868. $core.addMethod(
  15869. $core.method({
  15870. selector: "printOn:",
  15871. protocol: 'printing',
  15872. fn: function (aStream){
  15873. var self=this;
  15874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15875. return $core.withContext(function($ctx1) {
  15876. //>>excludeEnd("ctx");
  15877. (
  15878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15879. $ctx1.supercall = true,
  15880. //>>excludeEnd("ctx");
  15881. $globals.AssociativeCollection.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  15882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15883. $ctx1.supercall = false;
  15884. //>>excludeEnd("ctx");;
  15885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15886. $ctx1.sendIdx["printOn:"]=1;
  15887. //>>excludeEnd("ctx");
  15888. $recv(aStream)._nextPutAll_(" (");
  15889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15890. $ctx1.sendIdx["nextPutAll:"]=1;
  15891. //>>excludeEnd("ctx");
  15892. $recv(self._associations())._do_separatedBy_((function(each){
  15893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15894. return $core.withContext(function($ctx2) {
  15895. //>>excludeEnd("ctx");
  15896. return $recv(each)._printOn_(aStream);
  15897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15898. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15899. //>>excludeEnd("ctx");
  15900. }),(function(){
  15901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15902. return $core.withContext(function($ctx2) {
  15903. //>>excludeEnd("ctx");
  15904. return $recv(aStream)._nextPutAll_(" , ");
  15905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15906. $ctx2.sendIdx["nextPutAll:"]=2;
  15907. //>>excludeEnd("ctx");
  15908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15909. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  15910. //>>excludeEnd("ctx");
  15911. }));
  15912. $recv(aStream)._nextPutAll_(")");
  15913. return self;
  15914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15915. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.AssociativeCollection)});
  15916. //>>excludeEnd("ctx");
  15917. },
  15918. //>>excludeStart("ide", pragmas.excludeIdeData);
  15919. args: ["aStream"],
  15920. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self associations\x0a\x09\x09do: [ :each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' , ' ].\x0a\x09aStream nextPutAll: ')'",
  15921. referencedClasses: [],
  15922. //>>excludeEnd("ide");
  15923. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:", "associations"]
  15924. }),
  15925. $globals.AssociativeCollection);
  15926. $core.addMethod(
  15927. $core.method({
  15928. selector: "remove:ifAbsent:",
  15929. protocol: 'adding/removing',
  15930. fn: function (aKey,aBlock){
  15931. var self=this;
  15932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15933. return $core.withContext(function($ctx1) {
  15934. //>>excludeEnd("ctx");
  15935. var $1;
  15936. $1=self._removeKey_ifAbsent_(aKey,aBlock);
  15937. return $1;
  15938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15939. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.AssociativeCollection)});
  15940. //>>excludeEnd("ctx");
  15941. },
  15942. //>>excludeStart("ide", pragmas.excludeIdeData);
  15943. args: ["aKey", "aBlock"],
  15944. source: "remove: aKey ifAbsent: aBlock\x0a\x09^ self removeKey: aKey ifAbsent: aBlock",
  15945. referencedClasses: [],
  15946. //>>excludeEnd("ide");
  15947. messageSends: ["removeKey:ifAbsent:"]
  15948. }),
  15949. $globals.AssociativeCollection);
  15950. $core.addMethod(
  15951. $core.method({
  15952. selector: "removeAll",
  15953. protocol: 'adding/removing',
  15954. fn: function (){
  15955. var self=this;
  15956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15957. return $core.withContext(function($ctx1) {
  15958. //>>excludeEnd("ctx");
  15959. var $1;
  15960. $1=$recv(self._keys())._do_((function(each){
  15961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15962. return $core.withContext(function($ctx2) {
  15963. //>>excludeEnd("ctx");
  15964. return self._removeKey_(each);
  15965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15966. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  15967. //>>excludeEnd("ctx");
  15968. }));
  15969. return $1;
  15970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15971. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.AssociativeCollection)});
  15972. //>>excludeEnd("ctx");
  15973. },
  15974. //>>excludeStart("ide", pragmas.excludeIdeData);
  15975. args: [],
  15976. source: "removeAll\x0a\x09^ self keys do: [ :each | self removeKey: each ]",
  15977. referencedClasses: [],
  15978. //>>excludeEnd("ide");
  15979. messageSends: ["do:", "keys", "removeKey:"]
  15980. }),
  15981. $globals.AssociativeCollection);
  15982. $core.addMethod(
  15983. $core.method({
  15984. selector: "removeKey:",
  15985. protocol: 'adding/removing',
  15986. fn: function (aKey){
  15987. var self=this;
  15988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15989. return $core.withContext(function($ctx1) {
  15990. //>>excludeEnd("ctx");
  15991. var $1;
  15992. $1=self._remove_(aKey);
  15993. return $1;
  15994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  15995. }, function($ctx1) {$ctx1.fill(self,"removeKey:",{aKey:aKey},$globals.AssociativeCollection)});
  15996. //>>excludeEnd("ctx");
  15997. },
  15998. //>>excludeStart("ide", pragmas.excludeIdeData);
  15999. args: ["aKey"],
  16000. source: "removeKey: aKey\x0a\x09^ self remove: aKey",
  16001. referencedClasses: [],
  16002. //>>excludeEnd("ide");
  16003. messageSends: ["remove:"]
  16004. }),
  16005. $globals.AssociativeCollection);
  16006. $core.addMethod(
  16007. $core.method({
  16008. selector: "removeKey:ifAbsent:",
  16009. protocol: 'adding/removing',
  16010. fn: function (aKey,aBlock){
  16011. var self=this;
  16012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16013. return $core.withContext(function($ctx1) {
  16014. //>>excludeEnd("ctx");
  16015. self._subclassResponsibility();
  16016. return self;
  16017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16018. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.AssociativeCollection)});
  16019. //>>excludeEnd("ctx");
  16020. },
  16021. //>>excludeStart("ide", pragmas.excludeIdeData);
  16022. args: ["aKey", "aBlock"],
  16023. source: "removeKey: aKey ifAbsent: aBlock\x0a\x09self subclassResponsibility",
  16024. referencedClasses: [],
  16025. //>>excludeEnd("ide");
  16026. messageSends: ["subclassResponsibility"]
  16027. }),
  16028. $globals.AssociativeCollection);
  16029. $core.addMethod(
  16030. $core.method({
  16031. selector: "select:",
  16032. protocol: 'enumerating',
  16033. fn: function (aBlock){
  16034. var self=this;
  16035. var newDict;
  16036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16037. return $core.withContext(function($ctx1) {
  16038. //>>excludeEnd("ctx");
  16039. var $1,$2;
  16040. newDict=$recv(self._class())._new();
  16041. self._keysAndValuesDo_((function(key,value){
  16042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16043. return $core.withContext(function($ctx2) {
  16044. //>>excludeEnd("ctx");
  16045. $1=$recv(aBlock)._value_(value);
  16046. if($core.assert($1)){
  16047. return $recv(newDict)._at_put_(key,value);
  16048. };
  16049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16050. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16051. //>>excludeEnd("ctx");
  16052. }));
  16053. $2=newDict;
  16054. return $2;
  16055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16056. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,newDict:newDict},$globals.AssociativeCollection)});
  16057. //>>excludeEnd("ctx");
  16058. },
  16059. //>>excludeStart("ide", pragmas.excludeIdeData);
  16060. args: ["aBlock"],
  16061. source: "select: aBlock\x0a\x09| newDict |\x0a\x09newDict := self class new.\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09(aBlock value: value) ifTrue: [ newDict at: key put: value ]].\x0a\x09^ newDict",
  16062. referencedClasses: [],
  16063. //>>excludeEnd("ide");
  16064. messageSends: ["new", "class", "keysAndValuesDo:", "ifTrue:", "value:", "at:put:"]
  16065. }),
  16066. $globals.AssociativeCollection);
  16067. $core.addMethod(
  16068. $core.method({
  16069. selector: "shallowCopy",
  16070. protocol: 'copying',
  16071. fn: function (){
  16072. var self=this;
  16073. var copy;
  16074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16075. return $core.withContext(function($ctx1) {
  16076. //>>excludeEnd("ctx");
  16077. var $1;
  16078. copy=$recv(self._class())._new();
  16079. self._keysAndValuesDo_((function(key,value){
  16080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16081. return $core.withContext(function($ctx2) {
  16082. //>>excludeEnd("ctx");
  16083. return $recv(copy)._at_put_(key,value);
  16084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16085. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16086. //>>excludeEnd("ctx");
  16087. }));
  16088. $1=copy;
  16089. return $1;
  16090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16091. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{copy:copy},$globals.AssociativeCollection)});
  16092. //>>excludeEnd("ctx");
  16093. },
  16094. //>>excludeStart("ide", pragmas.excludeIdeData);
  16095. args: [],
  16096. source: "shallowCopy\x0a\x09| copy |\x0a\x09copy := self class new.\x0a\x09self keysAndValuesDo: [ :key :value |\x0a\x09\x09copy at: key put: value ].\x0a\x09^ copy",
  16097. referencedClasses: [],
  16098. //>>excludeEnd("ide");
  16099. messageSends: ["new", "class", "keysAndValuesDo:", "at:put:"]
  16100. }),
  16101. $globals.AssociativeCollection);
  16102. $core.addMethod(
  16103. $core.method({
  16104. selector: "size",
  16105. protocol: 'accessing',
  16106. fn: function (){
  16107. var self=this;
  16108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16109. return $core.withContext(function($ctx1) {
  16110. //>>excludeEnd("ctx");
  16111. var $1;
  16112. $1=$recv(self._keys())._size();
  16113. return $1;
  16114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16115. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.AssociativeCollection)});
  16116. //>>excludeEnd("ctx");
  16117. },
  16118. //>>excludeStart("ide", pragmas.excludeIdeData);
  16119. args: [],
  16120. source: "size\x0a\x09^ self keys size",
  16121. referencedClasses: [],
  16122. //>>excludeEnd("ide");
  16123. messageSends: ["size", "keys"]
  16124. }),
  16125. $globals.AssociativeCollection);
  16126. $core.addMethod(
  16127. $core.method({
  16128. selector: "values",
  16129. protocol: 'accessing',
  16130. fn: function (){
  16131. var self=this;
  16132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16133. return $core.withContext(function($ctx1) {
  16134. //>>excludeEnd("ctx");
  16135. self._subclassResponsibility();
  16136. return self;
  16137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16138. }, function($ctx1) {$ctx1.fill(self,"values",{},$globals.AssociativeCollection)});
  16139. //>>excludeEnd("ctx");
  16140. },
  16141. //>>excludeStart("ide", pragmas.excludeIdeData);
  16142. args: [],
  16143. source: "values\x0a\x09self subclassResponsibility",
  16144. referencedClasses: [],
  16145. //>>excludeEnd("ide");
  16146. messageSends: ["subclassResponsibility"]
  16147. }),
  16148. $globals.AssociativeCollection);
  16149. $core.addMethod(
  16150. $core.method({
  16151. selector: "valuesDo:",
  16152. protocol: 'enumerating',
  16153. fn: function (aBlock){
  16154. var self=this;
  16155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16156. return $core.withContext(function($ctx1) {
  16157. //>>excludeEnd("ctx");
  16158. self._subclassResponsibility();
  16159. return self;
  16160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16161. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16162. //>>excludeEnd("ctx");
  16163. },
  16164. //>>excludeStart("ide", pragmas.excludeIdeData);
  16165. args: ["aBlock"],
  16166. source: "valuesDo: aBlock\x0a\x09self subclassResponsibility",
  16167. referencedClasses: [],
  16168. //>>excludeEnd("ide");
  16169. messageSends: ["subclassResponsibility"]
  16170. }),
  16171. $globals.AssociativeCollection);
  16172. $core.addMethod(
  16173. $core.method({
  16174. selector: "withIndexDo:",
  16175. protocol: 'enumerating',
  16176. fn: function (aBlock){
  16177. var self=this;
  16178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16179. return $core.withContext(function($ctx1) {
  16180. //>>excludeEnd("ctx");
  16181. self._keysAndValuesDo_((function(key,value){
  16182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16183. return $core.withContext(function($ctx2) {
  16184. //>>excludeEnd("ctx");
  16185. return $recv(aBlock)._value_value_(value,key);
  16186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16187. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,1)});
  16188. //>>excludeEnd("ctx");
  16189. }));
  16190. return self;
  16191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16192. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.AssociativeCollection)});
  16193. //>>excludeEnd("ctx");
  16194. },
  16195. //>>excludeStart("ide", pragmas.excludeIdeData);
  16196. args: ["aBlock"],
  16197. source: "withIndexDo: aBlock\x0a\x09self keysAndValuesDo: [ :key :value | aBlock value: value value: key ]",
  16198. referencedClasses: [],
  16199. //>>excludeEnd("ide");
  16200. messageSends: ["keysAndValuesDo:", "value:value:"]
  16201. }),
  16202. $globals.AssociativeCollection);
  16203. $core.addMethod(
  16204. $core.method({
  16205. selector: "from:",
  16206. protocol: 'instance creation',
  16207. fn: function (aCollection){
  16208. var self=this;
  16209. var newCollection;
  16210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16211. return $core.withContext(function($ctx1) {
  16212. //>>excludeEnd("ctx");
  16213. var $1;
  16214. newCollection=self._new();
  16215. $recv(aCollection)._do_((function(each){
  16216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16217. return $core.withContext(function($ctx2) {
  16218. //>>excludeEnd("ctx");
  16219. return $recv(newCollection)._add_(each);
  16220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16221. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  16222. //>>excludeEnd("ctx");
  16223. }));
  16224. $1=newCollection;
  16225. return $1;
  16226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16227. }, function($ctx1) {$ctx1.fill(self,"from:",{aCollection:aCollection,newCollection:newCollection},$globals.AssociativeCollection.klass)});
  16228. //>>excludeEnd("ctx");
  16229. },
  16230. //>>excludeStart("ide", pragmas.excludeIdeData);
  16231. args: ["aCollection"],
  16232. source: "from: aCollection\x0a\x09| newCollection |\x0a\x09newCollection := self new.\x0a\x09aCollection do: [ :each | newCollection add: each ].\x0a\x09^ newCollection",
  16233. referencedClasses: [],
  16234. //>>excludeEnd("ide");
  16235. messageSends: ["new", "do:", "add:"]
  16236. }),
  16237. $globals.AssociativeCollection.klass);
  16238. $core.addMethod(
  16239. $core.method({
  16240. selector: "fromPairs:",
  16241. protocol: 'instance creation',
  16242. fn: function (aCollection){
  16243. var self=this;
  16244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16245. return $core.withContext(function($ctx1) {
  16246. //>>excludeEnd("ctx");
  16247. var $1;
  16248. $1=self._from_(aCollection);
  16249. return $1;
  16250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16251. }, function($ctx1) {$ctx1.fill(self,"fromPairs:",{aCollection:aCollection},$globals.AssociativeCollection.klass)});
  16252. //>>excludeEnd("ctx");
  16253. },
  16254. //>>excludeStart("ide", pragmas.excludeIdeData);
  16255. args: ["aCollection"],
  16256. source: "fromPairs: aCollection\x0a\x09\x22This message is poorly named and has been replaced by #from:\x22\x0a\x09^ self from: aCollection",
  16257. referencedClasses: [],
  16258. //>>excludeEnd("ide");
  16259. messageSends: ["from:"]
  16260. }),
  16261. $globals.AssociativeCollection.klass);
  16262. $core.addMethod(
  16263. $core.method({
  16264. selector: "newFromPairs:",
  16265. protocol: 'instance creation',
  16266. fn: function (aCollection){
  16267. var self=this;
  16268. var newCollection;
  16269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16270. return $core.withContext(function($ctx1) {
  16271. //>>excludeEnd("ctx");
  16272. var $2,$1,$3,$4,$5;
  16273. $2=$recv(aCollection)._size();
  16274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16275. $ctx1.sendIdx["size"]=1;
  16276. //>>excludeEnd("ctx");
  16277. $1=$recv($2)._even();
  16278. if(!$core.assert($1)){
  16279. self._error_("#newFromPairs only accepts arrays of an even length");
  16280. };
  16281. newCollection=self._new();
  16282. $recv((1)._to_by_($recv(aCollection)._size(),(2)))._do_((function(each){
  16283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16284. return $core.withContext(function($ctx2) {
  16285. //>>excludeEnd("ctx");
  16286. $3=newCollection;
  16287. $4=$recv(aCollection)._at_(each);
  16288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16289. $ctx2.sendIdx["at:"]=1;
  16290. //>>excludeEnd("ctx");
  16291. return $recv($3)._at_put_($4,$recv(aCollection)._at_($recv(each).__plus((1))));
  16292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16293. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  16294. //>>excludeEnd("ctx");
  16295. }));
  16296. $5=newCollection;
  16297. return $5;
  16298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16299. }, function($ctx1) {$ctx1.fill(self,"newFromPairs:",{aCollection:aCollection,newCollection:newCollection},$globals.AssociativeCollection.klass)});
  16300. //>>excludeEnd("ctx");
  16301. },
  16302. //>>excludeStart("ide", pragmas.excludeIdeData);
  16303. args: ["aCollection"],
  16304. source: "newFromPairs: aCollection\x0a\x09\x22Accept an array of elements where every two elements form an \x0a\x09association - the odd element being the key, and the even element the value.\x22\x0a\x09\x0a\x09| newCollection |\x0a\x09\x0a\x09aCollection size even ifFalse: [ \x0a\x09\x09self error: '#newFromPairs only accepts arrays of an even length' ].\x0a\x09\x09\x0a\x09newCollection := self new.\x0a\x09( 1 to: aCollection size by: 2 ) do: [ :each | \x0a\x09\x09newCollection at: (aCollection at: each) put: (aCollection at: each + 1) ].\x0a\x09\x09\x0a\x09^ newCollection",
  16305. referencedClasses: [],
  16306. //>>excludeEnd("ide");
  16307. messageSends: ["ifFalse:", "even", "size", "error:", "new", "do:", "to:by:", "at:put:", "at:", "+"]
  16308. }),
  16309. $globals.AssociativeCollection.klass);
  16310. $core.addClass('Dictionary', $globals.AssociativeCollection, ['keys', 'values'], 'Kernel-Collections');
  16311. //>>excludeStart("ide", pragmas.excludeIdeData);
  16312. $globals.Dictionary.comment="I represent a set of elements that can be viewed from one of two perspectives: a set of associations,\x0aor a container of values that are externally named where the name can be any object that responds to `=`.\x0a\x0aThe external name is referred to as the key.";
  16313. //>>excludeEnd("ide");
  16314. $core.addMethod(
  16315. $core.method({
  16316. selector: "at:ifAbsent:",
  16317. protocol: 'accessing',
  16318. fn: function (aKey,aBlock){
  16319. var self=this;
  16320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16321. return $core.withContext(function($ctx1) {
  16322. //>>excludeEnd("ctx");
  16323. var index = self._positionOfKey_(aKey);
  16324. return index >=0 ? self['@values'][index] : aBlock._value();
  16325. ;
  16326. return self;
  16327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16328. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.Dictionary)});
  16329. //>>excludeEnd("ctx");
  16330. },
  16331. //>>excludeStart("ide", pragmas.excludeIdeData);
  16332. args: ["aKey", "aBlock"],
  16333. source: "at: aKey ifAbsent: aBlock\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09return index >>=0 ? self['@values'][index] : aBlock._value();\x0a\x09>",
  16334. referencedClasses: [],
  16335. //>>excludeEnd("ide");
  16336. messageSends: []
  16337. }),
  16338. $globals.Dictionary);
  16339. $core.addMethod(
  16340. $core.method({
  16341. selector: "at:put:",
  16342. protocol: 'accessing',
  16343. fn: function (aKey,aValue){
  16344. var self=this;
  16345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16346. return $core.withContext(function($ctx1) {
  16347. //>>excludeEnd("ctx");
  16348. var index = self._positionOfKey_(aKey);
  16349. if(index === -1) {
  16350. var keys = self['@keys'];
  16351. index = keys.length;
  16352. keys.push(aKey);
  16353. }
  16354. return self['@values'][index] = aValue;
  16355. ;
  16356. return self;
  16357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16358. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aKey:aKey,aValue:aValue},$globals.Dictionary)});
  16359. //>>excludeEnd("ctx");
  16360. },
  16361. //>>excludeStart("ide", pragmas.excludeIdeData);
  16362. args: ["aKey", "aValue"],
  16363. source: "at: aKey put: aValue\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09if(index === -1) {\x0a\x09\x09\x09var keys = self['@keys'];\x0a\x09\x09\x09index = keys.length;\x0a\x09\x09\x09keys.push(aKey);\x0a\x09\x09}\x0a\x0a\x09\x09return self['@values'][index] = aValue;\x0a\x09>",
  16364. referencedClasses: [],
  16365. //>>excludeEnd("ide");
  16366. messageSends: []
  16367. }),
  16368. $globals.Dictionary);
  16369. $core.addMethod(
  16370. $core.method({
  16371. selector: "includesKey:",
  16372. protocol: 'testing',
  16373. fn: function (aKey){
  16374. var self=this;
  16375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16376. return $core.withContext(function($ctx1) {
  16377. //>>excludeEnd("ctx");
  16378. return self._positionOfKey_(aKey) >= 0; ;
  16379. return self;
  16380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16381. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.Dictionary)});
  16382. //>>excludeEnd("ctx");
  16383. },
  16384. //>>excludeStart("ide", pragmas.excludeIdeData);
  16385. args: ["aKey"],
  16386. source: "includesKey: aKey\x0a\x09< return self._positionOfKey_(aKey) >>= 0; >",
  16387. referencedClasses: [],
  16388. //>>excludeEnd("ide");
  16389. messageSends: []
  16390. }),
  16391. $globals.Dictionary);
  16392. $core.addMethod(
  16393. $core.method({
  16394. selector: "indexOf:ifAbsent:",
  16395. protocol: 'accessing',
  16396. fn: function (anObject,aBlock){
  16397. var self=this;
  16398. var index;
  16399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16400. return $core.withContext(function($ctx1) {
  16401. //>>excludeEnd("ctx");
  16402. var $2,$1;
  16403. index=$recv(self["@values"])._indexOf_ifAbsent_(anObject,(function(){
  16404. return (0);
  16405. }));
  16406. $2=$recv(index).__eq((0));
  16407. if($core.assert($2)){
  16408. $1=$recv(aBlock)._value();
  16409. } else {
  16410. $1=$recv(self["@keys"])._at_(index);
  16411. };
  16412. return $1;
  16413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16414. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock,index:index},$globals.Dictionary)});
  16415. //>>excludeEnd("ctx");
  16416. },
  16417. //>>excludeStart("ide", pragmas.excludeIdeData);
  16418. args: ["anObject", "aBlock"],
  16419. source: "indexOf: anObject ifAbsent: aBlock\x0a\x09| index |\x0a\x09index := values \x0a\x09\x09indexOf: anObject \x0a\x09\x09ifAbsent: [ 0 ].\x0a\x09^ index = 0 \x0a\x09\x09ifTrue: [ aBlock value ] \x0a\x09\x09ifFalse: [ keys at: index ]",
  16420. referencedClasses: [],
  16421. //>>excludeEnd("ide");
  16422. messageSends: ["indexOf:ifAbsent:", "ifTrue:ifFalse:", "=", "value", "at:"]
  16423. }),
  16424. $globals.Dictionary);
  16425. $core.addMethod(
  16426. $core.method({
  16427. selector: "initialize",
  16428. protocol: 'initialization',
  16429. fn: function (){
  16430. var self=this;
  16431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16432. return $core.withContext(function($ctx1) {
  16433. //>>excludeEnd("ctx");
  16434. (
  16435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16436. $ctx1.supercall = true,
  16437. //>>excludeEnd("ctx");
  16438. $globals.Dictionary.superclass.fn.prototype._initialize.apply($recv(self), []));
  16439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16440. $ctx1.supercall = false;
  16441. //>>excludeEnd("ctx");;
  16442. self["@keys"]=[];
  16443. self["@values"]=[];
  16444. return self;
  16445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16446. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Dictionary)});
  16447. //>>excludeEnd("ctx");
  16448. },
  16449. //>>excludeStart("ide", pragmas.excludeIdeData);
  16450. args: [],
  16451. source: "initialize\x0a\x09super initialize.\x0a\x09keys := #().\x0a\x09values := #()",
  16452. referencedClasses: [],
  16453. //>>excludeEnd("ide");
  16454. messageSends: ["initialize"]
  16455. }),
  16456. $globals.Dictionary);
  16457. $core.addMethod(
  16458. $core.method({
  16459. selector: "keys",
  16460. protocol: 'accessing',
  16461. fn: function (){
  16462. var self=this;
  16463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16464. return $core.withContext(function($ctx1) {
  16465. //>>excludeEnd("ctx");
  16466. var $1;
  16467. $1=$recv(self["@keys"])._copy();
  16468. return $1;
  16469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16470. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.Dictionary)});
  16471. //>>excludeEnd("ctx");
  16472. },
  16473. //>>excludeStart("ide", pragmas.excludeIdeData);
  16474. args: [],
  16475. source: "keys\x0a\x09^ keys copy",
  16476. referencedClasses: [],
  16477. //>>excludeEnd("ide");
  16478. messageSends: ["copy"]
  16479. }),
  16480. $globals.Dictionary);
  16481. $core.addMethod(
  16482. $core.method({
  16483. selector: "keysAndValuesDo:",
  16484. protocol: 'enumerating',
  16485. fn: function (aBlock){
  16486. var self=this;
  16487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16488. return $core.withContext(function($ctx1) {
  16489. //>>excludeEnd("ctx");
  16490. var $1;
  16491. $1=$recv(self["@keys"])._with_do_(self["@values"],aBlock);
  16492. return $1;
  16493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16494. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.Dictionary)});
  16495. //>>excludeEnd("ctx");
  16496. },
  16497. //>>excludeStart("ide", pragmas.excludeIdeData);
  16498. args: ["aBlock"],
  16499. source: "keysAndValuesDo: aBlock\x0a\x09^ keys with: values do: aBlock",
  16500. referencedClasses: [],
  16501. //>>excludeEnd("ide");
  16502. messageSends: ["with:do:"]
  16503. }),
  16504. $globals.Dictionary);
  16505. $core.addMethod(
  16506. $core.method({
  16507. selector: "keysDo:",
  16508. protocol: 'enumerating',
  16509. fn: function (aBlock){
  16510. var self=this;
  16511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16512. return $core.withContext(function($ctx1) {
  16513. //>>excludeEnd("ctx");
  16514. var $1;
  16515. $1=$recv(self["@keys"])._do_(aBlock);
  16516. return $1;
  16517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16518. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.Dictionary)});
  16519. //>>excludeEnd("ctx");
  16520. },
  16521. //>>excludeStart("ide", pragmas.excludeIdeData);
  16522. args: ["aBlock"],
  16523. source: "keysDo: aBlock\x0a\x09^ keys do: aBlock",
  16524. referencedClasses: [],
  16525. //>>excludeEnd("ide");
  16526. messageSends: ["do:"]
  16527. }),
  16528. $globals.Dictionary);
  16529. $core.addMethod(
  16530. $core.method({
  16531. selector: "positionOfKey:",
  16532. protocol: 'private',
  16533. fn: function (anObject){
  16534. var self=this;
  16535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16536. return $core.withContext(function($ctx1) {
  16537. //>>excludeEnd("ctx");
  16538. var keys = self['@keys'];
  16539. for(var i=0;i<keys.length;i++){
  16540. if(keys[i].__eq(anObject)) { return i;}
  16541. }
  16542. return -1;
  16543. ;
  16544. return self;
  16545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16546. }, function($ctx1) {$ctx1.fill(self,"positionOfKey:",{anObject:anObject},$globals.Dictionary)});
  16547. //>>excludeEnd("ctx");
  16548. },
  16549. //>>excludeStart("ide", pragmas.excludeIdeData);
  16550. args: ["anObject"],
  16551. source: "positionOfKey: anObject\x0a\x09<\x0a\x09\x09var keys = self['@keys'];\x0a\x09\x09for(var i=0;i<keys.length;i++){\x0a\x09\x09\x09if(keys[i].__eq(anObject)) { return i;}\x0a\x09\x09}\x0a\x09\x09return -1;\x0a\x09>",
  16552. referencedClasses: [],
  16553. //>>excludeEnd("ide");
  16554. messageSends: []
  16555. }),
  16556. $globals.Dictionary);
  16557. $core.addMethod(
  16558. $core.method({
  16559. selector: "removeAll",
  16560. protocol: 'adding/removing',
  16561. fn: function (){
  16562. var self=this;
  16563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16564. return $core.withContext(function($ctx1) {
  16565. //>>excludeEnd("ctx");
  16566. $recv(self["@keys"])._removeAll();
  16567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16568. $ctx1.sendIdx["removeAll"]=1;
  16569. //>>excludeEnd("ctx");
  16570. $recv(self["@values"])._removeAll();
  16571. return self;
  16572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16573. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Dictionary)});
  16574. //>>excludeEnd("ctx");
  16575. },
  16576. //>>excludeStart("ide", pragmas.excludeIdeData);
  16577. args: [],
  16578. source: "removeAll\x0a\x09keys removeAll.\x0a\x09values removeAll",
  16579. referencedClasses: [],
  16580. //>>excludeEnd("ide");
  16581. messageSends: ["removeAll"]
  16582. }),
  16583. $globals.Dictionary);
  16584. $core.addMethod(
  16585. $core.method({
  16586. selector: "removeKey:ifAbsent:",
  16587. protocol: 'adding/removing',
  16588. fn: function (aKey,aBlock){
  16589. var self=this;
  16590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16591. return $core.withContext(function($ctx1) {
  16592. //>>excludeEnd("ctx");
  16593. var index = self._positionOfKey_(aKey);
  16594. if(index === -1) {
  16595. return aBlock._value()
  16596. } else {
  16597. var keys = self['@keys'], values = self['@values'];
  16598. var value = values[index], l = keys.length;
  16599. keys[index] = keys[l-1];
  16600. keys.pop();
  16601. values[index] = values[l-1];
  16602. values.pop();
  16603. return value;
  16604. }
  16605. ;
  16606. return self;
  16607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16608. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.Dictionary)});
  16609. //>>excludeEnd("ctx");
  16610. },
  16611. //>>excludeStart("ide", pragmas.excludeIdeData);
  16612. args: ["aKey", "aBlock"],
  16613. source: "removeKey: aKey ifAbsent: aBlock\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09if(index === -1) {\x0a\x09\x09\x09return aBlock._value()\x0a\x09\x09} else {\x0a\x09\x09\x09var keys = self['@keys'], values = self['@values'];\x0a\x09\x09\x09var value = values[index], l = keys.length;\x0a\x09\x09\x09keys[index] = keys[l-1];\x0a\x09\x09\x09keys.pop();\x0a\x09\x09\x09values[index] = values[l-1];\x0a\x09\x09\x09values.pop();\x0a\x09\x09\x09return value;\x0a\x09\x09}\x0a\x09>",
  16614. referencedClasses: [],
  16615. //>>excludeEnd("ide");
  16616. messageSends: []
  16617. }),
  16618. $globals.Dictionary);
  16619. $core.addMethod(
  16620. $core.method({
  16621. selector: "values",
  16622. protocol: 'accessing',
  16623. fn: function (){
  16624. var self=this;
  16625. var $1;
  16626. $1=self["@values"];
  16627. return $1;
  16628. },
  16629. //>>excludeStart("ide", pragmas.excludeIdeData);
  16630. args: [],
  16631. source: "values\x0a\x09^ values",
  16632. referencedClasses: [],
  16633. //>>excludeEnd("ide");
  16634. messageSends: []
  16635. }),
  16636. $globals.Dictionary);
  16637. $core.addMethod(
  16638. $core.method({
  16639. selector: "valuesDo:",
  16640. protocol: 'enumerating',
  16641. fn: function (aBlock){
  16642. var self=this;
  16643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16644. return $core.withContext(function($ctx1) {
  16645. //>>excludeEnd("ctx");
  16646. var $1;
  16647. $1=$recv(self["@values"])._do_(aBlock);
  16648. return $1;
  16649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16650. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.Dictionary)});
  16651. //>>excludeEnd("ctx");
  16652. },
  16653. //>>excludeStart("ide", pragmas.excludeIdeData);
  16654. args: ["aBlock"],
  16655. source: "valuesDo: aBlock\x0a\x09^ values do: aBlock",
  16656. referencedClasses: [],
  16657. //>>excludeEnd("ide");
  16658. messageSends: ["do:"]
  16659. }),
  16660. $globals.Dictionary);
  16661. $core.addClass('HashedCollection', $globals.AssociativeCollection, [], 'Kernel-Collections');
  16662. //>>excludeStart("ide", pragmas.excludeIdeData);
  16663. $globals.HashedCollection.comment="I am a traditional JavaScript object, or a Smalltalk `Dictionary`.\x0a\x0aUnlike a `Dictionary`, I can only have strings as keys.";
  16664. //>>excludeEnd("ide");
  16665. $core.addMethod(
  16666. $core.method({
  16667. selector: "at:ifAbsent:",
  16668. protocol: 'accessing',
  16669. fn: function (aKey,aBlock){
  16670. var self=this;
  16671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16672. return $core.withContext(function($ctx1) {
  16673. //>>excludeEnd("ctx");
  16674. var $2,$1;
  16675. $2=self._includesKey_(aKey);
  16676. if($core.assert($2)){
  16677. $1=self._basicAt_(aKey);
  16678. } else {
  16679. $1=$recv(aBlock)._value();
  16680. };
  16681. return $1;
  16682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16683. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.HashedCollection)});
  16684. //>>excludeEnd("ctx");
  16685. },
  16686. //>>excludeStart("ide", pragmas.excludeIdeData);
  16687. args: ["aKey", "aBlock"],
  16688. source: "at: aKey ifAbsent: aBlock\x0a\x09^ (self includesKey: aKey)\x0a\x09\x09ifTrue: [ self basicAt: aKey ]\x0a\x09\x09ifFalse: [ aBlock value ]",
  16689. referencedClasses: [],
  16690. //>>excludeEnd("ide");
  16691. messageSends: ["ifTrue:ifFalse:", "includesKey:", "basicAt:", "value"]
  16692. }),
  16693. $globals.HashedCollection);
  16694. $core.addMethod(
  16695. $core.method({
  16696. selector: "at:put:",
  16697. protocol: 'accessing',
  16698. fn: function (aKey,aValue){
  16699. var self=this;
  16700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16701. return $core.withContext(function($ctx1) {
  16702. //>>excludeEnd("ctx");
  16703. var $1;
  16704. $1=self._basicAt_put_(aKey,aValue);
  16705. return $1;
  16706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16707. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aKey:aKey,aValue:aValue},$globals.HashedCollection)});
  16708. //>>excludeEnd("ctx");
  16709. },
  16710. //>>excludeStart("ide", pragmas.excludeIdeData);
  16711. args: ["aKey", "aValue"],
  16712. source: "at: aKey put: aValue\x0a\x09^ self basicAt: aKey put: aValue",
  16713. referencedClasses: [],
  16714. //>>excludeEnd("ide");
  16715. messageSends: ["basicAt:put:"]
  16716. }),
  16717. $globals.HashedCollection);
  16718. $core.addMethod(
  16719. $core.method({
  16720. selector: "includesKey:",
  16721. protocol: 'testing',
  16722. fn: function (aKey){
  16723. var self=this;
  16724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16725. return $core.withContext(function($ctx1) {
  16726. //>>excludeEnd("ctx");
  16727. return self.hasOwnProperty(aKey);
  16728. return self;
  16729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16730. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.HashedCollection)});
  16731. //>>excludeEnd("ctx");
  16732. },
  16733. //>>excludeStart("ide", pragmas.excludeIdeData);
  16734. args: ["aKey"],
  16735. source: "includesKey: aKey\x0a\x09<return self.hasOwnProperty(aKey)>",
  16736. referencedClasses: [],
  16737. //>>excludeEnd("ide");
  16738. messageSends: []
  16739. }),
  16740. $globals.HashedCollection);
  16741. $core.addMethod(
  16742. $core.method({
  16743. selector: "keys",
  16744. protocol: 'accessing',
  16745. fn: function (){
  16746. var self=this;
  16747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16748. return $core.withContext(function($ctx1) {
  16749. //>>excludeEnd("ctx");
  16750. return Object.keys(self);
  16751. return self;
  16752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16753. }, function($ctx1) {$ctx1.fill(self,"keys",{},$globals.HashedCollection)});
  16754. //>>excludeEnd("ctx");
  16755. },
  16756. //>>excludeStart("ide", pragmas.excludeIdeData);
  16757. args: [],
  16758. source: "keys\x0a\x09<return Object.keys(self)>",
  16759. referencedClasses: [],
  16760. //>>excludeEnd("ide");
  16761. messageSends: []
  16762. }),
  16763. $globals.HashedCollection);
  16764. $core.addMethod(
  16765. $core.method({
  16766. selector: "keysDo:",
  16767. protocol: 'enumerating',
  16768. fn: function (aBlock){
  16769. var self=this;
  16770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16771. return $core.withContext(function($ctx1) {
  16772. //>>excludeEnd("ctx");
  16773. $recv(self._keys())._do_(aBlock);
  16774. return self;
  16775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16776. }, function($ctx1) {$ctx1.fill(self,"keysDo:",{aBlock:aBlock},$globals.HashedCollection)});
  16777. //>>excludeEnd("ctx");
  16778. },
  16779. //>>excludeStart("ide", pragmas.excludeIdeData);
  16780. args: ["aBlock"],
  16781. source: "keysDo: aBlock\x0a\x09self keys do: aBlock",
  16782. referencedClasses: [],
  16783. //>>excludeEnd("ide");
  16784. messageSends: ["do:", "keys"]
  16785. }),
  16786. $globals.HashedCollection);
  16787. $core.addMethod(
  16788. $core.method({
  16789. selector: "removeKey:ifAbsent:",
  16790. protocol: 'adding/removing',
  16791. fn: function (aKey,aBlock){
  16792. var self=this;
  16793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16794. return $core.withContext(function($ctx1) {
  16795. //>>excludeEnd("ctx");
  16796. var $1;
  16797. $1=self._at_ifPresent_ifAbsent_(aKey,(function(removed){
  16798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16799. return $core.withContext(function($ctx2) {
  16800. //>>excludeEnd("ctx");
  16801. self._basicDelete_(aKey);
  16802. return removed;
  16803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16804. }, function($ctx2) {$ctx2.fillBlock({removed:removed},$ctx1,1)});
  16805. //>>excludeEnd("ctx");
  16806. }),(function(){
  16807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16808. return $core.withContext(function($ctx2) {
  16809. //>>excludeEnd("ctx");
  16810. return $recv(aBlock)._value();
  16811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16812. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  16813. //>>excludeEnd("ctx");
  16814. }));
  16815. return $1;
  16816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16817. }, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.HashedCollection)});
  16818. //>>excludeEnd("ctx");
  16819. },
  16820. //>>excludeStart("ide", pragmas.excludeIdeData);
  16821. args: ["aKey", "aBlock"],
  16822. source: "removeKey: aKey ifAbsent: aBlock\x0a\x09^ self\x0a\x09\x09at: aKey\x0a\x09\x09ifPresent: [ :removed | self basicDelete: aKey. removed ]\x0a\x09\x09ifAbsent: [ aBlock value ]",
  16823. referencedClasses: [],
  16824. //>>excludeEnd("ide");
  16825. messageSends: ["at:ifPresent:ifAbsent:", "basicDelete:", "value"]
  16826. }),
  16827. $globals.HashedCollection);
  16828. $core.addMethod(
  16829. $core.method({
  16830. selector: "values",
  16831. protocol: 'accessing',
  16832. fn: function (){
  16833. var self=this;
  16834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16835. return $core.withContext(function($ctx1) {
  16836. //>>excludeEnd("ctx");
  16837. return self._keys().map(function(key){
  16838. return self._at_(key);
  16839. });
  16840. ;
  16841. return self;
  16842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16843. }, function($ctx1) {$ctx1.fill(self,"values",{},$globals.HashedCollection)});
  16844. //>>excludeEnd("ctx");
  16845. },
  16846. //>>excludeStart("ide", pragmas.excludeIdeData);
  16847. args: [],
  16848. source: "values\x0a\x09<\x0a\x09\x09return self._keys().map(function(key){\x0a\x09\x09\x09return self._at_(key);\x0a\x09\x09});\x0a\x09>",
  16849. referencedClasses: [],
  16850. //>>excludeEnd("ide");
  16851. messageSends: []
  16852. }),
  16853. $globals.HashedCollection);
  16854. $core.addMethod(
  16855. $core.method({
  16856. selector: "valuesDo:",
  16857. protocol: 'enumerating',
  16858. fn: function (aBlock){
  16859. var self=this;
  16860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16861. return $core.withContext(function($ctx1) {
  16862. //>>excludeEnd("ctx");
  16863. $recv(self._values())._do_(aBlock);
  16864. return self;
  16865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16866. }, function($ctx1) {$ctx1.fill(self,"valuesDo:",{aBlock:aBlock},$globals.HashedCollection)});
  16867. //>>excludeEnd("ctx");
  16868. },
  16869. //>>excludeStart("ide", pragmas.excludeIdeData);
  16870. args: ["aBlock"],
  16871. source: "valuesDo: aBlock\x0a\x09self values do: aBlock",
  16872. referencedClasses: [],
  16873. //>>excludeEnd("ide");
  16874. messageSends: ["do:", "values"]
  16875. }),
  16876. $globals.HashedCollection);
  16877. $core.addClass('SequenceableCollection', $globals.IndexableCollection, [], 'Kernel-Collections');
  16878. //>>excludeStart("ide", pragmas.excludeIdeData);
  16879. $globals.SequenceableCollection.comment="I am an IndexableCollection\x0awith numeric indexes starting with 1.";
  16880. //>>excludeEnd("ide");
  16881. $core.addMethod(
  16882. $core.method({
  16883. selector: "=",
  16884. protocol: 'comparing',
  16885. fn: function (aCollection){
  16886. var self=this;
  16887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16888. return $core.withContext(function($ctx1) {
  16889. //>>excludeEnd("ctx");
  16890. var $3,$2,$4,$1,$5;
  16891. var $early={};
  16892. try {
  16893. $3=self._class();
  16894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16895. $ctx1.sendIdx["class"]=1;
  16896. //>>excludeEnd("ctx");
  16897. $2=$recv($3).__eq($recv(aCollection)._class());
  16898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16899. $ctx1.sendIdx["="]=1;
  16900. //>>excludeEnd("ctx");
  16901. $1=$recv($2)._and_((function(){
  16902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16903. return $core.withContext(function($ctx2) {
  16904. //>>excludeEnd("ctx");
  16905. $4=self._size();
  16906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16907. $ctx2.sendIdx["size"]=1;
  16908. //>>excludeEnd("ctx");
  16909. return $recv($4).__eq($recv(aCollection)._size());
  16910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16911. $ctx2.sendIdx["="]=2;
  16912. //>>excludeEnd("ctx");
  16913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16914. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  16915. //>>excludeEnd("ctx");
  16916. }));
  16917. if(!$core.assert($1)){
  16918. return false;
  16919. };
  16920. self._withIndexDo_((function(each,i){
  16921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16922. return $core.withContext(function($ctx2) {
  16923. //>>excludeEnd("ctx");
  16924. $5=$recv($recv(aCollection)._at_(i)).__eq(each);
  16925. if(!$core.assert($5)){
  16926. throw $early=[false];
  16927. };
  16928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16929. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,3)});
  16930. //>>excludeEnd("ctx");
  16931. }));
  16932. return true;
  16933. }
  16934. catch(e) {if(e===$early)return e[0]; throw e}
  16935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16936. }, function($ctx1) {$ctx1.fill(self,"=",{aCollection:aCollection},$globals.SequenceableCollection)});
  16937. //>>excludeEnd("ctx");
  16938. },
  16939. //>>excludeStart("ide", pragmas.excludeIdeData);
  16940. args: ["aCollection"],
  16941. source: "= aCollection\x0a\x09(self class = aCollection class and: [\x0a\x09\x09self size = aCollection size ]) ifFalse: [ ^ false ].\x0a\x09self withIndexDo: [ :each :i |\x0a\x09\x09\x09\x09(aCollection at: i) = each ifFalse: [ ^ false ]].\x0a\x09^ true",
  16942. referencedClasses: [],
  16943. //>>excludeEnd("ide");
  16944. messageSends: ["ifFalse:", "and:", "=", "class", "size", "withIndexDo:", "at:"]
  16945. }),
  16946. $globals.SequenceableCollection);
  16947. $core.addMethod(
  16948. $core.method({
  16949. selector: "addLast:",
  16950. protocol: 'adding/removing',
  16951. fn: function (anObject){
  16952. var self=this;
  16953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16954. return $core.withContext(function($ctx1) {
  16955. //>>excludeEnd("ctx");
  16956. self._add_(anObject);
  16957. return self;
  16958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16959. }, function($ctx1) {$ctx1.fill(self,"addLast:",{anObject:anObject},$globals.SequenceableCollection)});
  16960. //>>excludeEnd("ctx");
  16961. },
  16962. //>>excludeStart("ide", pragmas.excludeIdeData);
  16963. args: ["anObject"],
  16964. source: "addLast: anObject\x0a\x09self add: anObject",
  16965. referencedClasses: [],
  16966. //>>excludeEnd("ide");
  16967. messageSends: ["add:"]
  16968. }),
  16969. $globals.SequenceableCollection);
  16970. $core.addMethod(
  16971. $core.method({
  16972. selector: "allButFirst",
  16973. protocol: 'accessing',
  16974. fn: function (){
  16975. var self=this;
  16976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16977. return $core.withContext(function($ctx1) {
  16978. //>>excludeEnd("ctx");
  16979. var $1;
  16980. $1=self._copyFrom_to_((2),self._size());
  16981. return $1;
  16982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16983. }, function($ctx1) {$ctx1.fill(self,"allButFirst",{},$globals.SequenceableCollection)});
  16984. //>>excludeEnd("ctx");
  16985. },
  16986. //>>excludeStart("ide", pragmas.excludeIdeData);
  16987. args: [],
  16988. source: "allButFirst\x0a\x09^ self copyFrom: 2 to: self size",
  16989. referencedClasses: [],
  16990. //>>excludeEnd("ide");
  16991. messageSends: ["copyFrom:to:", "size"]
  16992. }),
  16993. $globals.SequenceableCollection);
  16994. $core.addMethod(
  16995. $core.method({
  16996. selector: "allButLast",
  16997. protocol: 'accessing',
  16998. fn: function (){
  16999. var self=this;
  17000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17001. return $core.withContext(function($ctx1) {
  17002. //>>excludeEnd("ctx");
  17003. var $1;
  17004. $1=self._copyFrom_to_((1),$recv(self._size()).__minus((1)));
  17005. return $1;
  17006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17007. }, function($ctx1) {$ctx1.fill(self,"allButLast",{},$globals.SequenceableCollection)});
  17008. //>>excludeEnd("ctx");
  17009. },
  17010. //>>excludeStart("ide", pragmas.excludeIdeData);
  17011. args: [],
  17012. source: "allButLast\x0a\x09^ self copyFrom: 1 to: self size - 1",
  17013. referencedClasses: [],
  17014. //>>excludeEnd("ide");
  17015. messageSends: ["copyFrom:to:", "-", "size"]
  17016. }),
  17017. $globals.SequenceableCollection);
  17018. $core.addMethod(
  17019. $core.method({
  17020. selector: "atRandom",
  17021. protocol: 'accessing',
  17022. fn: function (){
  17023. var self=this;
  17024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17025. return $core.withContext(function($ctx1) {
  17026. //>>excludeEnd("ctx");
  17027. var $1;
  17028. $1=self._at_($recv(self._size())._atRandom());
  17029. return $1;
  17030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17031. }, function($ctx1) {$ctx1.fill(self,"atRandom",{},$globals.SequenceableCollection)});
  17032. //>>excludeEnd("ctx");
  17033. },
  17034. //>>excludeStart("ide", pragmas.excludeIdeData);
  17035. args: [],
  17036. source: "atRandom\x0a\x09^ self at: self size atRandom",
  17037. referencedClasses: [],
  17038. //>>excludeEnd("ide");
  17039. messageSends: ["at:", "atRandom", "size"]
  17040. }),
  17041. $globals.SequenceableCollection);
  17042. $core.addMethod(
  17043. $core.method({
  17044. selector: "beginsWith:",
  17045. protocol: 'testing',
  17046. fn: function (prefix){
  17047. var self=this;
  17048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17049. return $core.withContext(function($ctx1) {
  17050. //>>excludeEnd("ctx");
  17051. var $2,$3,$1,$4;
  17052. $2=self._size();
  17053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17054. $ctx1.sendIdx["size"]=1;
  17055. //>>excludeEnd("ctx");
  17056. $3=$recv(prefix)._size();
  17057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17058. $ctx1.sendIdx["size"]=2;
  17059. //>>excludeEnd("ctx");
  17060. $1=$recv($2).__lt($3);
  17061. if($core.assert($1)){
  17062. return false;
  17063. };
  17064. $4=$recv(self._first_($recv(prefix)._size())).__eq(prefix);
  17065. return $4;
  17066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17067. }, function($ctx1) {$ctx1.fill(self,"beginsWith:",{prefix:prefix},$globals.SequenceableCollection)});
  17068. //>>excludeEnd("ctx");
  17069. },
  17070. //>>excludeStart("ide", pragmas.excludeIdeData);
  17071. args: ["prefix"],
  17072. source: "beginsWith: prefix\x0a\x09self size < prefix size ifTrue: [ ^ false ].\x0a\x09^ (self first: prefix size) = prefix",
  17073. referencedClasses: [],
  17074. //>>excludeEnd("ide");
  17075. messageSends: ["ifTrue:", "<", "size", "=", "first:"]
  17076. }),
  17077. $globals.SequenceableCollection);
  17078. $core.addMethod(
  17079. $core.method({
  17080. selector: "copyFrom:to:",
  17081. protocol: 'copying',
  17082. fn: function (anIndex,anotherIndex){
  17083. var self=this;
  17084. var range,newCollection;
  17085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17086. return $core.withContext(function($ctx1) {
  17087. //>>excludeEnd("ctx");
  17088. var $1;
  17089. range=$recv(anIndex)._to_(anotherIndex);
  17090. newCollection=$recv(self._class())._new_($recv(range)._size());
  17091. $recv(range)._withIndexDo_((function(each,i){
  17092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17093. return $core.withContext(function($ctx2) {
  17094. //>>excludeEnd("ctx");
  17095. return $recv(newCollection)._at_put_(i,self._at_(each));
  17096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17097. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,1)});
  17098. //>>excludeEnd("ctx");
  17099. }));
  17100. $1=newCollection;
  17101. return $1;
  17102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17103. }, function($ctx1) {$ctx1.fill(self,"copyFrom:to:",{anIndex:anIndex,anotherIndex:anotherIndex,range:range,newCollection:newCollection},$globals.SequenceableCollection)});
  17104. //>>excludeEnd("ctx");
  17105. },
  17106. //>>excludeStart("ide", pragmas.excludeIdeData);
  17107. args: ["anIndex", "anotherIndex"],
  17108. source: "copyFrom: anIndex to: anotherIndex\x0a\x09| range newCollection |\x0a\x09range := anIndex to: anotherIndex.\x0a\x09newCollection := self class new: range size.\x0a\x09range withIndexDo: [ :each :i |\x0a\x09\x09newCollection at: i put: (self at: each) ].\x0a\x09^ newCollection",
  17109. referencedClasses: [],
  17110. //>>excludeEnd("ide");
  17111. messageSends: ["to:", "new:", "class", "size", "withIndexDo:", "at:put:", "at:"]
  17112. }),
  17113. $globals.SequenceableCollection);
  17114. $core.addMethod(
  17115. $core.method({
  17116. selector: "deepCopy",
  17117. protocol: 'copying',
  17118. fn: function (){
  17119. var self=this;
  17120. var newCollection;
  17121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17122. return $core.withContext(function($ctx1) {
  17123. //>>excludeEnd("ctx");
  17124. var $1;
  17125. newCollection=$recv(self._class())._new_(self._size());
  17126. self._withIndexDo_((function(each,index){
  17127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17128. return $core.withContext(function($ctx2) {
  17129. //>>excludeEnd("ctx");
  17130. return $recv(newCollection)._at_put_(index,$recv(each)._deepCopy());
  17131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17132. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  17133. //>>excludeEnd("ctx");
  17134. }));
  17135. $1=newCollection;
  17136. return $1;
  17137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17138. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{newCollection:newCollection},$globals.SequenceableCollection)});
  17139. //>>excludeEnd("ctx");
  17140. },
  17141. //>>excludeStart("ide", pragmas.excludeIdeData);
  17142. args: [],
  17143. source: "deepCopy\x0a\x09| newCollection |\x0a\x09newCollection := self class new: self size.\x0a\x09self withIndexDo: [ :each :index |\x0a\x09\x09newCollection at: index put: each deepCopy ].\x0a\x09^ newCollection",
  17144. referencedClasses: [],
  17145. //>>excludeEnd("ide");
  17146. messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:", "deepCopy"]
  17147. }),
  17148. $globals.SequenceableCollection);
  17149. $core.addMethod(
  17150. $core.method({
  17151. selector: "detect:ifNone:",
  17152. protocol: 'enumerating',
  17153. fn: function (aBlock,anotherBlock){
  17154. var self=this;
  17155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17156. return $core.withContext(function($ctx1) {
  17157. //>>excludeEnd("ctx");
  17158. self = self._numericallyIndexable();
  17159. for(var i = 0; i < self.length; i++)
  17160. if(aBlock._value_(self[i]))
  17161. return self[i];
  17162. return anotherBlock._value();
  17163. ;
  17164. return self;
  17165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17166. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.SequenceableCollection)});
  17167. //>>excludeEnd("ctx");
  17168. },
  17169. //>>excludeStart("ide", pragmas.excludeIdeData);
  17170. args: ["aBlock", "anotherBlock"],
  17171. source: "detect: aBlock ifNone: anotherBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09for(var i = 0; i < self.length; i++)\x0a\x09\x09\x09if(aBlock._value_(self[i]))\x0a\x09\x09\x09\x09return self[i];\x0a\x09\x09return anotherBlock._value();\x0a\x09>",
  17172. referencedClasses: [],
  17173. //>>excludeEnd("ide");
  17174. messageSends: []
  17175. }),
  17176. $globals.SequenceableCollection);
  17177. $core.addMethod(
  17178. $core.method({
  17179. selector: "do:",
  17180. protocol: 'enumerating',
  17181. fn: function (aBlock){
  17182. var self=this;
  17183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17184. return $core.withContext(function($ctx1) {
  17185. //>>excludeEnd("ctx");
  17186. self = self._numericallyIndexable();
  17187. for(var i=0; i < self.length; i++) {
  17188. aBlock._value_(self[i]);
  17189. }
  17190. ;
  17191. return self;
  17192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17193. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.SequenceableCollection)});
  17194. //>>excludeEnd("ctx");
  17195. },
  17196. //>>excludeStart("ide", pragmas.excludeIdeData);
  17197. args: ["aBlock"],
  17198. source: "do: aBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09for(var i=0; i < self.length; i++) {\x0a\x09\x09\x09aBlock._value_(self[i]);\x0a\x09\x09}\x0a\x09>",
  17199. referencedClasses: [],
  17200. //>>excludeEnd("ide");
  17201. messageSends: []
  17202. }),
  17203. $globals.SequenceableCollection);
  17204. $core.addMethod(
  17205. $core.method({
  17206. selector: "endsWith:",
  17207. protocol: 'testing',
  17208. fn: function (suffix){
  17209. var self=this;
  17210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17211. return $core.withContext(function($ctx1) {
  17212. //>>excludeEnd("ctx");
  17213. var $2,$3,$1,$4;
  17214. $2=self._size();
  17215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17216. $ctx1.sendIdx["size"]=1;
  17217. //>>excludeEnd("ctx");
  17218. $3=$recv(suffix)._size();
  17219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17220. $ctx1.sendIdx["size"]=2;
  17221. //>>excludeEnd("ctx");
  17222. $1=$recv($2).__lt($3);
  17223. if($core.assert($1)){
  17224. return false;
  17225. };
  17226. $4=$recv(self._last_($recv(suffix)._size())).__eq(suffix);
  17227. return $4;
  17228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17229. }, function($ctx1) {$ctx1.fill(self,"endsWith:",{suffix:suffix},$globals.SequenceableCollection)});
  17230. //>>excludeEnd("ctx");
  17231. },
  17232. //>>excludeStart("ide", pragmas.excludeIdeData);
  17233. args: ["suffix"],
  17234. source: "endsWith: suffix\x0a\x09self size < suffix size ifTrue: [ ^ false ].\x0a\x09^ (self last: suffix size) = suffix",
  17235. referencedClasses: [],
  17236. //>>excludeEnd("ide");
  17237. messageSends: ["ifTrue:", "<", "size", "=", "last:"]
  17238. }),
  17239. $globals.SequenceableCollection);
  17240. $core.addMethod(
  17241. $core.method({
  17242. selector: "first",
  17243. protocol: 'accessing',
  17244. fn: function (){
  17245. var self=this;
  17246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17247. return $core.withContext(function($ctx1) {
  17248. //>>excludeEnd("ctx");
  17249. var $1;
  17250. $1=self._at_((1));
  17251. return $1;
  17252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17253. }, function($ctx1) {$ctx1.fill(self,"first",{},$globals.SequenceableCollection)});
  17254. //>>excludeEnd("ctx");
  17255. },
  17256. //>>excludeStart("ide", pragmas.excludeIdeData);
  17257. args: [],
  17258. source: "first\x0a\x09^ self at: 1",
  17259. referencedClasses: [],
  17260. //>>excludeEnd("ide");
  17261. messageSends: ["at:"]
  17262. }),
  17263. $globals.SequenceableCollection);
  17264. $core.addMethod(
  17265. $core.method({
  17266. selector: "first:",
  17267. protocol: 'accessing',
  17268. fn: function (aNumber){
  17269. var self=this;
  17270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17271. return $core.withContext(function($ctx1) {
  17272. //>>excludeEnd("ctx");
  17273. var $1,$2;
  17274. $1=$recv(self._size()).__lt(aNumber);
  17275. if($core.assert($1)){
  17276. self._error_("Invalid number of elements");
  17277. };
  17278. $2=self._copyFrom_to_((1),aNumber);
  17279. return $2;
  17280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17281. }, function($ctx1) {$ctx1.fill(self,"first:",{aNumber:aNumber},$globals.SequenceableCollection)});
  17282. //>>excludeEnd("ctx");
  17283. },
  17284. //>>excludeStart("ide", pragmas.excludeIdeData);
  17285. args: ["aNumber"],
  17286. source: "first: aNumber\x0a\x09\x22Answer the first `aNumber` elements of the receiver.\x0a\x09Raise an error if there are not enough elements in the receiver.\x22\x0a\x0a\x09self size < aNumber ifTrue: [ self error: 'Invalid number of elements' ].\x0a\x0a\x09^ self copyFrom: 1 to: aNumber",
  17287. referencedClasses: [],
  17288. //>>excludeEnd("ide");
  17289. messageSends: ["ifTrue:", "<", "size", "error:", "copyFrom:to:"]
  17290. }),
  17291. $globals.SequenceableCollection);
  17292. $core.addMethod(
  17293. $core.method({
  17294. selector: "fourth",
  17295. protocol: 'accessing',
  17296. fn: function (){
  17297. var self=this;
  17298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17299. return $core.withContext(function($ctx1) {
  17300. //>>excludeEnd("ctx");
  17301. var $1;
  17302. $1=self._at_((4));
  17303. return $1;
  17304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17305. }, function($ctx1) {$ctx1.fill(self,"fourth",{},$globals.SequenceableCollection)});
  17306. //>>excludeEnd("ctx");
  17307. },
  17308. //>>excludeStart("ide", pragmas.excludeIdeData);
  17309. args: [],
  17310. source: "fourth\x0a\x09^ self at: 4",
  17311. referencedClasses: [],
  17312. //>>excludeEnd("ide");
  17313. messageSends: ["at:"]
  17314. }),
  17315. $globals.SequenceableCollection);
  17316. $core.addMethod(
  17317. $core.method({
  17318. selector: "includes:",
  17319. protocol: 'testing',
  17320. fn: function (anObject){
  17321. var self=this;
  17322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17323. return $core.withContext(function($ctx1) {
  17324. //>>excludeEnd("ctx");
  17325. var $1;
  17326. $1=$recv(self._indexOf_ifAbsent_(anObject,(function(){
  17327. return nil;
  17328. })))._notNil();
  17329. return $1;
  17330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17331. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject},$globals.SequenceableCollection)});
  17332. //>>excludeEnd("ctx");
  17333. },
  17334. //>>excludeStart("ide", pragmas.excludeIdeData);
  17335. args: ["anObject"],
  17336. source: "includes: anObject\x0a\x09^ (self indexOf: anObject ifAbsent: [ nil ]) notNil",
  17337. referencedClasses: [],
  17338. //>>excludeEnd("ide");
  17339. messageSends: ["notNil", "indexOf:ifAbsent:"]
  17340. }),
  17341. $globals.SequenceableCollection);
  17342. $core.addMethod(
  17343. $core.method({
  17344. selector: "indexOf:ifAbsent:",
  17345. protocol: 'accessing',
  17346. fn: function (anObject,aBlock){
  17347. var self=this;
  17348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17349. return $core.withContext(function($ctx1) {
  17350. //>>excludeEnd("ctx");
  17351. self = self._numericallyIndexable();
  17352. for(var i=0; i < self.length; i++) {
  17353. if($recv(self[i]).__eq(anObject)) {return i+1}
  17354. };
  17355. return aBlock._value();
  17356. ;
  17357. return self;
  17358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17359. }, function($ctx1) {$ctx1.fill(self,"indexOf:ifAbsent:",{anObject:anObject,aBlock:aBlock},$globals.SequenceableCollection)});
  17360. //>>excludeEnd("ctx");
  17361. },
  17362. //>>excludeStart("ide", pragmas.excludeIdeData);
  17363. args: ["anObject", "aBlock"],
  17364. source: "indexOf: anObject ifAbsent: aBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09for(var i=0; i < self.length; i++) {\x0a\x09\x09\x09if($recv(self[i]).__eq(anObject)) {return i+1}\x0a\x09\x09};\x0a\x09\x09return aBlock._value();\x0a\x09>",
  17365. referencedClasses: [],
  17366. //>>excludeEnd("ide");
  17367. messageSends: []
  17368. }),
  17369. $globals.SequenceableCollection);
  17370. $core.addMethod(
  17371. $core.method({
  17372. selector: "indexOf:startingAt:",
  17373. protocol: 'accessing',
  17374. fn: function (anObject,start){
  17375. var self=this;
  17376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17377. return $core.withContext(function($ctx1) {
  17378. //>>excludeEnd("ctx");
  17379. var $1;
  17380. $1=self._indexOf_startingAt_ifAbsent_(anObject,start,(function(){
  17381. return (0);
  17382. }));
  17383. return $1;
  17384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17385. }, function($ctx1) {$ctx1.fill(self,"indexOf:startingAt:",{anObject:anObject,start:start},$globals.SequenceableCollection)});
  17386. //>>excludeEnd("ctx");
  17387. },
  17388. //>>excludeStart("ide", pragmas.excludeIdeData);
  17389. args: ["anObject", "start"],
  17390. source: "indexOf: anObject startingAt: start\x0a\x09\x22Answer the index of the first occurence of anElement after start\x0a\x09within the receiver. If the receiver does not contain anElement,\x0a\x09answer 0.\x22\x0a\x09^ self indexOf: anObject startingAt: start ifAbsent: [ 0 ]",
  17391. referencedClasses: [],
  17392. //>>excludeEnd("ide");
  17393. messageSends: ["indexOf:startingAt:ifAbsent:"]
  17394. }),
  17395. $globals.SequenceableCollection);
  17396. $core.addMethod(
  17397. $core.method({
  17398. selector: "indexOf:startingAt:ifAbsent:",
  17399. protocol: 'accessing',
  17400. fn: function (anObject,start,aBlock){
  17401. var self=this;
  17402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17403. return $core.withContext(function($ctx1) {
  17404. //>>excludeEnd("ctx");
  17405. self = self._numericallyIndexable();
  17406. for(var i=start - 1; i < self.length; i++){
  17407. if($recv(self[i]).__eq(anObject)) {return i+1}
  17408. }
  17409. return aBlock._value();
  17410. ;
  17411. return self;
  17412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17413. }, function($ctx1) {$ctx1.fill(self,"indexOf:startingAt:ifAbsent:",{anObject:anObject,start:start,aBlock:aBlock},$globals.SequenceableCollection)});
  17414. //>>excludeEnd("ctx");
  17415. },
  17416. //>>excludeStart("ide", pragmas.excludeIdeData);
  17417. args: ["anObject", "start", "aBlock"],
  17418. source: "indexOf: anObject startingAt: start ifAbsent: aBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09for(var i=start - 1; i < self.length; i++){\x0a\x09\x09\x09if($recv(self[i]).__eq(anObject)) {return i+1}\x0a\x09\x09}\x0a\x09\x09return aBlock._value();\x0a\x09>",
  17419. referencedClasses: [],
  17420. //>>excludeEnd("ide");
  17421. messageSends: []
  17422. }),
  17423. $globals.SequenceableCollection);
  17424. $core.addMethod(
  17425. $core.method({
  17426. selector: "last",
  17427. protocol: 'accessing',
  17428. fn: function (){
  17429. var self=this;
  17430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17431. return $core.withContext(function($ctx1) {
  17432. //>>excludeEnd("ctx");
  17433. var $1;
  17434. $1=self._at_(self._size());
  17435. return $1;
  17436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17437. }, function($ctx1) {$ctx1.fill(self,"last",{},$globals.SequenceableCollection)});
  17438. //>>excludeEnd("ctx");
  17439. },
  17440. //>>excludeStart("ide", pragmas.excludeIdeData);
  17441. args: [],
  17442. source: "last\x0a\x09^ self at: self size",
  17443. referencedClasses: [],
  17444. //>>excludeEnd("ide");
  17445. messageSends: ["at:", "size"]
  17446. }),
  17447. $globals.SequenceableCollection);
  17448. $core.addMethod(
  17449. $core.method({
  17450. selector: "last:",
  17451. protocol: 'accessing',
  17452. fn: function (aNumber){
  17453. var self=this;
  17454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17455. return $core.withContext(function($ctx1) {
  17456. //>>excludeEnd("ctx");
  17457. var $2,$1,$6,$5,$4,$3;
  17458. $2=self._size();
  17459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17460. $ctx1.sendIdx["size"]=1;
  17461. //>>excludeEnd("ctx");
  17462. $1=$recv($2).__lt(aNumber);
  17463. if($core.assert($1)){
  17464. self._error_("Invalid number of elements");
  17465. };
  17466. $6=self._size();
  17467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17468. $ctx1.sendIdx["size"]=2;
  17469. //>>excludeEnd("ctx");
  17470. $5=$recv($6).__minus(aNumber);
  17471. $4=$recv($5).__plus((1));
  17472. $3=self._copyFrom_to_($4,self._size());
  17473. return $3;
  17474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17475. }, function($ctx1) {$ctx1.fill(self,"last:",{aNumber:aNumber},$globals.SequenceableCollection)});
  17476. //>>excludeEnd("ctx");
  17477. },
  17478. //>>excludeStart("ide", pragmas.excludeIdeData);
  17479. args: ["aNumber"],
  17480. source: "last: aNumber\x0a\x09\x22Answer the last aNumber elements of the receiver.\x0a\x09Raise an error if there are not enough elements in the receiver.\x22\x0a\x0a\x09self size < aNumber ifTrue: [ self error: 'Invalid number of elements' ].\x0a\x0a\x09^ self copyFrom: self size - aNumber + 1 to: self size",
  17481. referencedClasses: [],
  17482. //>>excludeEnd("ide");
  17483. messageSends: ["ifTrue:", "<", "size", "error:", "copyFrom:to:", "+", "-"]
  17484. }),
  17485. $globals.SequenceableCollection);
  17486. $core.addMethod(
  17487. $core.method({
  17488. selector: "newStream",
  17489. protocol: 'streaming',
  17490. fn: function (){
  17491. var self=this;
  17492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17493. return $core.withContext(function($ctx1) {
  17494. //>>excludeEnd("ctx");
  17495. var $1;
  17496. $1=$recv(self._streamClass())._on_(self);
  17497. return $1;
  17498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17499. }, function($ctx1) {$ctx1.fill(self,"newStream",{},$globals.SequenceableCollection)});
  17500. //>>excludeEnd("ctx");
  17501. },
  17502. //>>excludeStart("ide", pragmas.excludeIdeData);
  17503. args: [],
  17504. source: "newStream\x0a\x09^ self streamClass on: self",
  17505. referencedClasses: [],
  17506. //>>excludeEnd("ide");
  17507. messageSends: ["on:", "streamClass"]
  17508. }),
  17509. $globals.SequenceableCollection);
  17510. $core.addMethod(
  17511. $core.method({
  17512. selector: "numericallyIndexable",
  17513. protocol: 'private',
  17514. fn: function (){
  17515. var self=this;
  17516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17517. return $core.withContext(function($ctx1) {
  17518. //>>excludeEnd("ctx");
  17519. self._subclassResponsibility();
  17520. return self;
  17521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17522. }, function($ctx1) {$ctx1.fill(self,"numericallyIndexable",{},$globals.SequenceableCollection)});
  17523. //>>excludeEnd("ctx");
  17524. },
  17525. //>>excludeStart("ide", pragmas.excludeIdeData);
  17526. args: [],
  17527. source: "numericallyIndexable\x0a\x09\x22This is an internal converting message.\x0a\x09It answeres a representation of the receiver\x0a\x09that can use foo[i] in JavaScript code.\x0a\x09\x0a\x09It fixes IE8, where boxed String is unable\x0a\x09to numerically index its characters,\x0a\x09but primitive string can.\x22\x0a\x09\x0a\x09self subclassResponsibility",
  17528. referencedClasses: [],
  17529. //>>excludeEnd("ide");
  17530. messageSends: ["subclassResponsibility"]
  17531. }),
  17532. $globals.SequenceableCollection);
  17533. $core.addMethod(
  17534. $core.method({
  17535. selector: "readStream",
  17536. protocol: 'streaming',
  17537. fn: function (){
  17538. var self=this;
  17539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17540. return $core.withContext(function($ctx1) {
  17541. //>>excludeEnd("ctx");
  17542. var $1;
  17543. $1=self._stream();
  17544. return $1;
  17545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17546. }, function($ctx1) {$ctx1.fill(self,"readStream",{},$globals.SequenceableCollection)});
  17547. //>>excludeEnd("ctx");
  17548. },
  17549. //>>excludeStart("ide", pragmas.excludeIdeData);
  17550. args: [],
  17551. source: "readStream\x0a\x09\x22For Pharo compatibility\x22\x0a\x09\x0a\x09^ self stream",
  17552. referencedClasses: [],
  17553. //>>excludeEnd("ide");
  17554. messageSends: ["stream"]
  17555. }),
  17556. $globals.SequenceableCollection);
  17557. $core.addMethod(
  17558. $core.method({
  17559. selector: "removeLast",
  17560. protocol: 'adding/removing',
  17561. fn: function (){
  17562. var self=this;
  17563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17564. return $core.withContext(function($ctx1) {
  17565. //>>excludeEnd("ctx");
  17566. var $1;
  17567. $1=self._remove_(self._last());
  17568. return $1;
  17569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17570. }, function($ctx1) {$ctx1.fill(self,"removeLast",{},$globals.SequenceableCollection)});
  17571. //>>excludeEnd("ctx");
  17572. },
  17573. //>>excludeStart("ide", pragmas.excludeIdeData);
  17574. args: [],
  17575. source: "removeLast\x0a\x09^ self remove: self last",
  17576. referencedClasses: [],
  17577. //>>excludeEnd("ide");
  17578. messageSends: ["remove:", "last"]
  17579. }),
  17580. $globals.SequenceableCollection);
  17581. $core.addMethod(
  17582. $core.method({
  17583. selector: "reversed",
  17584. protocol: 'converting',
  17585. fn: function (){
  17586. var self=this;
  17587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17588. return $core.withContext(function($ctx1) {
  17589. //>>excludeEnd("ctx");
  17590. self._subclassResponsibility();
  17591. return self;
  17592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17593. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.SequenceableCollection)});
  17594. //>>excludeEnd("ctx");
  17595. },
  17596. //>>excludeStart("ide", pragmas.excludeIdeData);
  17597. args: [],
  17598. source: "reversed\x0a\x09self subclassResponsibility",
  17599. referencedClasses: [],
  17600. //>>excludeEnd("ide");
  17601. messageSends: ["subclassResponsibility"]
  17602. }),
  17603. $globals.SequenceableCollection);
  17604. $core.addMethod(
  17605. $core.method({
  17606. selector: "second",
  17607. protocol: 'accessing',
  17608. fn: function (){
  17609. var self=this;
  17610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17611. return $core.withContext(function($ctx1) {
  17612. //>>excludeEnd("ctx");
  17613. var $1;
  17614. $1=self._at_((2));
  17615. return $1;
  17616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17617. }, function($ctx1) {$ctx1.fill(self,"second",{},$globals.SequenceableCollection)});
  17618. //>>excludeEnd("ctx");
  17619. },
  17620. //>>excludeStart("ide", pragmas.excludeIdeData);
  17621. args: [],
  17622. source: "second\x0a\x09^ self at: 2",
  17623. referencedClasses: [],
  17624. //>>excludeEnd("ide");
  17625. messageSends: ["at:"]
  17626. }),
  17627. $globals.SequenceableCollection);
  17628. $core.addMethod(
  17629. $core.method({
  17630. selector: "shallowCopy",
  17631. protocol: 'copying',
  17632. fn: function (){
  17633. var self=this;
  17634. var newCollection;
  17635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17636. return $core.withContext(function($ctx1) {
  17637. //>>excludeEnd("ctx");
  17638. var $1;
  17639. newCollection=$recv(self._class())._new_(self._size());
  17640. self._withIndexDo_((function(each,index){
  17641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17642. return $core.withContext(function($ctx2) {
  17643. //>>excludeEnd("ctx");
  17644. return $recv(newCollection)._at_put_(index,each);
  17645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17646. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  17647. //>>excludeEnd("ctx");
  17648. }));
  17649. $1=newCollection;
  17650. return $1;
  17651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17652. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{newCollection:newCollection},$globals.SequenceableCollection)});
  17653. //>>excludeEnd("ctx");
  17654. },
  17655. //>>excludeStart("ide", pragmas.excludeIdeData);
  17656. args: [],
  17657. source: "shallowCopy\x0a\x09| newCollection |\x0a\x09newCollection := self class new: self size.\x0a\x09self withIndexDo: [ :each :index |\x0a\x09\x09newCollection at: index put: each ].\x0a\x09^ newCollection",
  17658. referencedClasses: [],
  17659. //>>excludeEnd("ide");
  17660. messageSends: ["new:", "class", "size", "withIndexDo:", "at:put:"]
  17661. }),
  17662. $globals.SequenceableCollection);
  17663. $core.addMethod(
  17664. $core.method({
  17665. selector: "stream",
  17666. protocol: 'streaming',
  17667. fn: function (){
  17668. var self=this;
  17669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17670. return $core.withContext(function($ctx1) {
  17671. //>>excludeEnd("ctx");
  17672. var $1;
  17673. $1=self._newStream();
  17674. return $1;
  17675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17676. }, function($ctx1) {$ctx1.fill(self,"stream",{},$globals.SequenceableCollection)});
  17677. //>>excludeEnd("ctx");
  17678. },
  17679. //>>excludeStart("ide", pragmas.excludeIdeData);
  17680. args: [],
  17681. source: "stream\x0a\x09^ self newStream",
  17682. referencedClasses: [],
  17683. //>>excludeEnd("ide");
  17684. messageSends: ["newStream"]
  17685. }),
  17686. $globals.SequenceableCollection);
  17687. $core.addMethod(
  17688. $core.method({
  17689. selector: "streamClass",
  17690. protocol: 'streaming',
  17691. fn: function (){
  17692. var self=this;
  17693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17694. return $core.withContext(function($ctx1) {
  17695. //>>excludeEnd("ctx");
  17696. var $1;
  17697. $1=$recv(self._class())._streamClass();
  17698. return $1;
  17699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17700. }, function($ctx1) {$ctx1.fill(self,"streamClass",{},$globals.SequenceableCollection)});
  17701. //>>excludeEnd("ctx");
  17702. },
  17703. //>>excludeStart("ide", pragmas.excludeIdeData);
  17704. args: [],
  17705. source: "streamClass\x0a\x09^ self class streamClass",
  17706. referencedClasses: [],
  17707. //>>excludeEnd("ide");
  17708. messageSends: ["streamClass", "class"]
  17709. }),
  17710. $globals.SequenceableCollection);
  17711. $core.addMethod(
  17712. $core.method({
  17713. selector: "third",
  17714. protocol: 'accessing',
  17715. fn: function (){
  17716. var self=this;
  17717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17718. return $core.withContext(function($ctx1) {
  17719. //>>excludeEnd("ctx");
  17720. var $1;
  17721. $1=self._at_((3));
  17722. return $1;
  17723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17724. }, function($ctx1) {$ctx1.fill(self,"third",{},$globals.SequenceableCollection)});
  17725. //>>excludeEnd("ctx");
  17726. },
  17727. //>>excludeStart("ide", pragmas.excludeIdeData);
  17728. args: [],
  17729. source: "third\x0a\x09^ self at: 3",
  17730. referencedClasses: [],
  17731. //>>excludeEnd("ide");
  17732. messageSends: ["at:"]
  17733. }),
  17734. $globals.SequenceableCollection);
  17735. $core.addMethod(
  17736. $core.method({
  17737. selector: "with:do:",
  17738. protocol: 'enumerating',
  17739. fn: function (anotherCollection,aBlock){
  17740. var self=this;
  17741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17742. return $core.withContext(function($ctx1) {
  17743. //>>excludeEnd("ctx");
  17744. self = self._numericallyIndexable();
  17745. anotherCollection = anotherCollection._numericallyIndexable();
  17746. for(var i=0; i<self.length; i++) {
  17747. aBlock._value_value_(self[i], anotherCollection[i]);
  17748. }
  17749. ;
  17750. return self;
  17751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17752. }, function($ctx1) {$ctx1.fill(self,"with:do:",{anotherCollection:anotherCollection,aBlock:aBlock},$globals.SequenceableCollection)});
  17753. //>>excludeEnd("ctx");
  17754. },
  17755. //>>excludeStart("ide", pragmas.excludeIdeData);
  17756. args: ["anotherCollection", "aBlock"],
  17757. source: "with: anotherCollection do: aBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09anotherCollection = anotherCollection._numericallyIndexable();\x0a\x09\x09for(var i=0; i<self.length; i++) {\x0a\x09\x09\x09aBlock._value_value_(self[i], anotherCollection[i]);\x0a\x09\x09}\x0a\x09>",
  17758. referencedClasses: [],
  17759. //>>excludeEnd("ide");
  17760. messageSends: []
  17761. }),
  17762. $globals.SequenceableCollection);
  17763. $core.addMethod(
  17764. $core.method({
  17765. selector: "withIndexDo:",
  17766. protocol: 'enumerating',
  17767. fn: function (aBlock){
  17768. var self=this;
  17769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17770. return $core.withContext(function($ctx1) {
  17771. //>>excludeEnd("ctx");
  17772. self = self._numericallyIndexable();
  17773. for(var i=0; i < self.length; i++) {
  17774. aBlock._value_value_(self[i], i+1);
  17775. }
  17776. ;
  17777. return self;
  17778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17779. }, function($ctx1) {$ctx1.fill(self,"withIndexDo:",{aBlock:aBlock},$globals.SequenceableCollection)});
  17780. //>>excludeEnd("ctx");
  17781. },
  17782. //>>excludeStart("ide", pragmas.excludeIdeData);
  17783. args: ["aBlock"],
  17784. source: "withIndexDo: aBlock\x0a\x09<\x0a\x09\x09self = self._numericallyIndexable();\x0a\x09\x09for(var i=0; i < self.length; i++) {\x0a\x09\x09\x09aBlock._value_value_(self[i], i+1);\x0a\x09\x09}\x0a\x09>",
  17785. referencedClasses: [],
  17786. //>>excludeEnd("ide");
  17787. messageSends: []
  17788. }),
  17789. $globals.SequenceableCollection);
  17790. $core.addMethod(
  17791. $core.method({
  17792. selector: "writeStream",
  17793. protocol: 'streaming',
  17794. fn: function (){
  17795. var self=this;
  17796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17797. return $core.withContext(function($ctx1) {
  17798. //>>excludeEnd("ctx");
  17799. var $1;
  17800. $1=self._stream();
  17801. return $1;
  17802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17803. }, function($ctx1) {$ctx1.fill(self,"writeStream",{},$globals.SequenceableCollection)});
  17804. //>>excludeEnd("ctx");
  17805. },
  17806. //>>excludeStart("ide", pragmas.excludeIdeData);
  17807. args: [],
  17808. source: "writeStream\x0a\x09\x22For Pharo compatibility\x22\x0a\x09\x0a\x09^ self stream",
  17809. referencedClasses: [],
  17810. //>>excludeEnd("ide");
  17811. messageSends: ["stream"]
  17812. }),
  17813. $globals.SequenceableCollection);
  17814. $core.addMethod(
  17815. $core.method({
  17816. selector: "streamClass",
  17817. protocol: 'accessing',
  17818. fn: function (){
  17819. var self=this;
  17820. function $Stream(){return $globals.Stream||(typeof Stream=="undefined"?nil:Stream)}
  17821. return $Stream();
  17822. },
  17823. //>>excludeStart("ide", pragmas.excludeIdeData);
  17824. args: [],
  17825. source: "streamClass\x0a\x09\x09^ Stream",
  17826. referencedClasses: ["Stream"],
  17827. //>>excludeEnd("ide");
  17828. messageSends: []
  17829. }),
  17830. $globals.SequenceableCollection.klass);
  17831. $core.addMethod(
  17832. $core.method({
  17833. selector: "streamContents:",
  17834. protocol: 'streaming',
  17835. fn: function (aBlock){
  17836. var self=this;
  17837. var stream;
  17838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17839. return $core.withContext(function($ctx1) {
  17840. //>>excludeEnd("ctx");
  17841. var $1;
  17842. stream=$recv(self._streamClass())._on_(self._new());
  17843. $recv(aBlock)._value_(stream);
  17844. $1=$recv(stream)._contents();
  17845. return $1;
  17846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17847. }, function($ctx1) {$ctx1.fill(self,"streamContents:",{aBlock:aBlock,stream:stream},$globals.SequenceableCollection.klass)});
  17848. //>>excludeEnd("ctx");
  17849. },
  17850. //>>excludeStart("ide", pragmas.excludeIdeData);
  17851. args: ["aBlock"],
  17852. source: "streamContents: aBlock\x0a\x09| stream |\x0a\x09stream := (self streamClass on: self new).\x0a\x09aBlock value: stream.\x0a\x09^ stream contents",
  17853. referencedClasses: [],
  17854. //>>excludeEnd("ide");
  17855. messageSends: ["on:", "streamClass", "new", "value:", "contents"]
  17856. }),
  17857. $globals.SequenceableCollection.klass);
  17858. $core.addClass('Array', $globals.SequenceableCollection, [], 'Kernel-Collections');
  17859. //>>excludeStart("ide", pragmas.excludeIdeData);
  17860. $globals.Array.comment="I represent a collection of objects ordered by the collector. The size of arrays is dynamic.\x0a\x0aI am directly mapped to JavaScript Number.\x0a\x0a*Note* In Amber, `OrderedCollection` is an alias for `Array`.";
  17861. //>>excludeEnd("ide");
  17862. $core.addMethod(
  17863. $core.method({
  17864. selector: "add:",
  17865. protocol: 'adding/removing',
  17866. fn: function (anObject){
  17867. var self=this;
  17868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17869. return $core.withContext(function($ctx1) {
  17870. //>>excludeEnd("ctx");
  17871. self.push(anObject); return anObject;;
  17872. return self;
  17873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17874. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.Array)});
  17875. //>>excludeEnd("ctx");
  17876. },
  17877. //>>excludeStart("ide", pragmas.excludeIdeData);
  17878. args: ["anObject"],
  17879. source: "add: anObject\x0a\x09<self.push(anObject); return anObject;>",
  17880. referencedClasses: [],
  17881. //>>excludeEnd("ide");
  17882. messageSends: []
  17883. }),
  17884. $globals.Array);
  17885. $core.addMethod(
  17886. $core.method({
  17887. selector: "addFirst:",
  17888. protocol: 'adding/removing',
  17889. fn: function (anObject){
  17890. var self=this;
  17891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17892. return $core.withContext(function($ctx1) {
  17893. //>>excludeEnd("ctx");
  17894. self.unshift(anObject); return anObject;;
  17895. return self;
  17896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17897. }, function($ctx1) {$ctx1.fill(self,"addFirst:",{anObject:anObject},$globals.Array)});
  17898. //>>excludeEnd("ctx");
  17899. },
  17900. //>>excludeStart("ide", pragmas.excludeIdeData);
  17901. args: ["anObject"],
  17902. source: "addFirst: anObject\x0a\x09<self.unshift(anObject); return anObject;>",
  17903. referencedClasses: [],
  17904. //>>excludeEnd("ide");
  17905. messageSends: []
  17906. }),
  17907. $globals.Array);
  17908. $core.addMethod(
  17909. $core.method({
  17910. selector: "asJavascript",
  17911. protocol: 'converting',
  17912. fn: function (){
  17913. var self=this;
  17914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17915. return $core.withContext(function($ctx1) {
  17916. //>>excludeEnd("ctx");
  17917. var $1;
  17918. $1=$recv("[".__comma($recv(self._collect_((function(each){
  17919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17920. return $core.withContext(function($ctx2) {
  17921. //>>excludeEnd("ctx");
  17922. return $recv(each)._asJavascript();
  17923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17924. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  17925. //>>excludeEnd("ctx");
  17926. })))._join_(", "))).__comma("]");
  17927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17928. $ctx1.sendIdx[","]=1;
  17929. //>>excludeEnd("ctx");
  17930. return $1;
  17931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17932. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.Array)});
  17933. //>>excludeEnd("ctx");
  17934. },
  17935. //>>excludeStart("ide", pragmas.excludeIdeData);
  17936. args: [],
  17937. source: "asJavascript\x0a\x09^ '[', ((self collect: [:each | each asJavascript ]) join: ', '), ']'",
  17938. referencedClasses: [],
  17939. //>>excludeEnd("ide");
  17940. messageSends: [",", "join:", "collect:", "asJavascript"]
  17941. }),
  17942. $globals.Array);
  17943. $core.addMethod(
  17944. $core.method({
  17945. selector: "at:ifAbsent:",
  17946. protocol: 'accessing',
  17947. fn: function (anIndex,aBlock){
  17948. var self=this;
  17949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17950. return $core.withContext(function($ctx1) {
  17951. //>>excludeEnd("ctx");
  17952. return anIndex >= 1 && anIndex <= self.length
  17953. ? self[anIndex - 1]
  17954. : aBlock._value()
  17955. ;
  17956. return self;
  17957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17958. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.Array)});
  17959. //>>excludeEnd("ctx");
  17960. },
  17961. //>>excludeStart("ide", pragmas.excludeIdeData);
  17962. args: ["anIndex", "aBlock"],
  17963. source: "at: anIndex ifAbsent: aBlock\x0a\x09<\x0a\x09\x09return anIndex >>= 1 && anIndex <= self.length\x0a\x09\x09\x09? self[anIndex - 1]\x0a\x09\x09\x09: aBlock._value()\x0a\x09>",
  17964. referencedClasses: [],
  17965. //>>excludeEnd("ide");
  17966. messageSends: []
  17967. }),
  17968. $globals.Array);
  17969. $core.addMethod(
  17970. $core.method({
  17971. selector: "at:ifPresent:ifAbsent:",
  17972. protocol: 'accessing',
  17973. fn: function (anIndex,aBlock,anotherBlock){
  17974. var self=this;
  17975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17976. return $core.withContext(function($ctx1) {
  17977. //>>excludeEnd("ctx");
  17978. return anIndex >= 1 && anIndex <= self.length
  17979. ? aBlock._value_(self[anIndex - 1])
  17980. : anotherBlock._value()
  17981. ;
  17982. return self;
  17983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17984. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.Array)});
  17985. //>>excludeEnd("ctx");
  17986. },
  17987. //>>excludeStart("ide", pragmas.excludeIdeData);
  17988. args: ["anIndex", "aBlock", "anotherBlock"],
  17989. source: "at: anIndex ifPresent: aBlock ifAbsent: anotherBlock\x0a\x09<\x0a\x09\x09return anIndex >>= 1 && anIndex <= self.length\x0a\x09\x09\x09? aBlock._value_(self[anIndex - 1])\x0a\x09\x09\x09: anotherBlock._value()\x0a\x09>",
  17990. referencedClasses: [],
  17991. //>>excludeEnd("ide");
  17992. messageSends: []
  17993. }),
  17994. $globals.Array);
  17995. $core.addMethod(
  17996. $core.method({
  17997. selector: "at:put:",
  17998. protocol: 'accessing',
  17999. fn: function (anIndex,anObject){
  18000. var self=this;
  18001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18002. return $core.withContext(function($ctx1) {
  18003. //>>excludeEnd("ctx");
  18004. return self[anIndex - 1] = anObject;
  18005. return self;
  18006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18007. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.Array)});
  18008. //>>excludeEnd("ctx");
  18009. },
  18010. //>>excludeStart("ide", pragmas.excludeIdeData);
  18011. args: ["anIndex", "anObject"],
  18012. source: "at: anIndex put: anObject\x0a\x09<return self[anIndex - 1] = anObject>",
  18013. referencedClasses: [],
  18014. //>>excludeEnd("ide");
  18015. messageSends: []
  18016. }),
  18017. $globals.Array);
  18018. $core.addMethod(
  18019. $core.method({
  18020. selector: "collect:",
  18021. protocol: 'enumerating',
  18022. fn: function (aBlock){
  18023. var self=this;
  18024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18025. return $core.withContext(function($ctx1) {
  18026. //>>excludeEnd("ctx");
  18027. return self.map(function(each) {return aBlock._value_(each)});
  18028. return self;
  18029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18030. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock},$globals.Array)});
  18031. //>>excludeEnd("ctx");
  18032. },
  18033. //>>excludeStart("ide", pragmas.excludeIdeData);
  18034. args: ["aBlock"],
  18035. source: "collect: aBlock\x0a\x09\x22Optimized version\x22\x0a\x09\x0a\x09<return self.map(function(each) {return aBlock._value_(each)})>",
  18036. referencedClasses: [],
  18037. //>>excludeEnd("ide");
  18038. messageSends: []
  18039. }),
  18040. $globals.Array);
  18041. $core.addMethod(
  18042. $core.method({
  18043. selector: "join:",
  18044. protocol: 'enumerating',
  18045. fn: function (aString){
  18046. var self=this;
  18047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18048. return $core.withContext(function($ctx1) {
  18049. //>>excludeEnd("ctx");
  18050. return self.join(aString);
  18051. return self;
  18052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18053. }, function($ctx1) {$ctx1.fill(self,"join:",{aString:aString},$globals.Array)});
  18054. //>>excludeEnd("ctx");
  18055. },
  18056. //>>excludeStart("ide", pragmas.excludeIdeData);
  18057. args: ["aString"],
  18058. source: "join: aString\x0a\x09<return self.join(aString)>",
  18059. referencedClasses: [],
  18060. //>>excludeEnd("ide");
  18061. messageSends: []
  18062. }),
  18063. $globals.Array);
  18064. $core.addMethod(
  18065. $core.method({
  18066. selector: "numericallyIndexable",
  18067. protocol: 'private',
  18068. fn: function (){
  18069. var self=this;
  18070. return self;
  18071. },
  18072. //>>excludeStart("ide", pragmas.excludeIdeData);
  18073. args: [],
  18074. source: "numericallyIndexable\x0a\x09^ self",
  18075. referencedClasses: [],
  18076. //>>excludeEnd("ide");
  18077. messageSends: []
  18078. }),
  18079. $globals.Array);
  18080. $core.addMethod(
  18081. $core.method({
  18082. selector: "printOn:",
  18083. protocol: 'printing',
  18084. fn: function (aStream){
  18085. var self=this;
  18086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18087. return $core.withContext(function($ctx1) {
  18088. //>>excludeEnd("ctx");
  18089. (
  18090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18091. $ctx1.supercall = true,
  18092. //>>excludeEnd("ctx");
  18093. $globals.Array.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  18094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18095. $ctx1.supercall = false;
  18096. //>>excludeEnd("ctx");;
  18097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18098. $ctx1.sendIdx["printOn:"]=1;
  18099. //>>excludeEnd("ctx");
  18100. $recv(aStream)._nextPutAll_(" (");
  18101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18102. $ctx1.sendIdx["nextPutAll:"]=1;
  18103. //>>excludeEnd("ctx");
  18104. self._do_separatedBy_((function(each){
  18105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18106. return $core.withContext(function($ctx2) {
  18107. //>>excludeEnd("ctx");
  18108. return $recv(each)._printOn_(aStream);
  18109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18110. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  18111. //>>excludeEnd("ctx");
  18112. }),(function(){
  18113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18114. return $core.withContext(function($ctx2) {
  18115. //>>excludeEnd("ctx");
  18116. return $recv(aStream)._nextPutAll_(" ");
  18117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18118. $ctx2.sendIdx["nextPutAll:"]=2;
  18119. //>>excludeEnd("ctx");
  18120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18121. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  18122. //>>excludeEnd("ctx");
  18123. }));
  18124. $recv(aStream)._nextPutAll_(")");
  18125. return self;
  18126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18127. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Array)});
  18128. //>>excludeEnd("ctx");
  18129. },
  18130. //>>excludeStart("ide", pragmas.excludeIdeData);
  18131. args: ["aStream"],
  18132. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self \x0a\x09\x09do: [ :each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09aStream nextPutAll: ')'",
  18133. referencedClasses: [],
  18134. //>>excludeEnd("ide");
  18135. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:"]
  18136. }),
  18137. $globals.Array);
  18138. $core.addMethod(
  18139. $core.method({
  18140. selector: "remove:ifAbsent:",
  18141. protocol: 'adding/removing',
  18142. fn: function (anObject,aBlock){
  18143. var self=this;
  18144. var index;
  18145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18146. return $core.withContext(function($ctx1) {
  18147. //>>excludeEnd("ctx");
  18148. var $2,$1;
  18149. index=self._indexOf_ifAbsent_(anObject,(function(){
  18150. return (0);
  18151. }));
  18152. $2=$recv(index).__eq((0));
  18153. if($core.assert($2)){
  18154. $1=$recv(aBlock)._value();
  18155. } else {
  18156. self._removeIndex_(index);
  18157. $1=anObject;
  18158. };
  18159. return $1;
  18160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18161. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock,index:index},$globals.Array)});
  18162. //>>excludeEnd("ctx");
  18163. },
  18164. //>>excludeStart("ide", pragmas.excludeIdeData);
  18165. args: ["anObject", "aBlock"],
  18166. source: "remove: anObject ifAbsent: aBlock\x0a\x09| index |\x0a\x09index := self indexOf: anObject ifAbsent: [ 0 ].\x0a\x09^ index = 0\x0a\x09\x09ifFalse: [ self removeIndex: index. anObject ]\x0a\x09\x09ifTrue: [ aBlock value ]",
  18167. referencedClasses: [],
  18168. //>>excludeEnd("ide");
  18169. messageSends: ["indexOf:ifAbsent:", "ifFalse:ifTrue:", "=", "removeIndex:", "value"]
  18170. }),
  18171. $globals.Array);
  18172. $core.addMethod(
  18173. $core.method({
  18174. selector: "removeAll",
  18175. protocol: 'adding/removing',
  18176. fn: function (){
  18177. var self=this;
  18178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18179. return $core.withContext(function($ctx1) {
  18180. //>>excludeEnd("ctx");
  18181. self.length = 0;
  18182. return self;
  18183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18184. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Array)});
  18185. //>>excludeEnd("ctx");
  18186. },
  18187. //>>excludeStart("ide", pragmas.excludeIdeData);
  18188. args: [],
  18189. source: "removeAll\x0a\x09<self.length = 0>",
  18190. referencedClasses: [],
  18191. //>>excludeEnd("ide");
  18192. messageSends: []
  18193. }),
  18194. $globals.Array);
  18195. $core.addMethod(
  18196. $core.method({
  18197. selector: "removeFrom:to:",
  18198. protocol: 'adding/removing',
  18199. fn: function (aNumber,anotherNumber){
  18200. var self=this;
  18201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18202. return $core.withContext(function($ctx1) {
  18203. //>>excludeEnd("ctx");
  18204. self.splice(aNumber -1, anotherNumber - aNumber + 1);
  18205. return self;
  18206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18207. }, function($ctx1) {$ctx1.fill(self,"removeFrom:to:",{aNumber:aNumber,anotherNumber:anotherNumber},$globals.Array)});
  18208. //>>excludeEnd("ctx");
  18209. },
  18210. //>>excludeStart("ide", pragmas.excludeIdeData);
  18211. args: ["aNumber", "anotherNumber"],
  18212. source: "removeFrom: aNumber to: anotherNumber\x0a\x09<self.splice(aNumber -1, anotherNumber - aNumber + 1)>",
  18213. referencedClasses: [],
  18214. //>>excludeEnd("ide");
  18215. messageSends: []
  18216. }),
  18217. $globals.Array);
  18218. $core.addMethod(
  18219. $core.method({
  18220. selector: "removeIndex:",
  18221. protocol: 'adding/removing',
  18222. fn: function (anInteger){
  18223. var self=this;
  18224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18225. return $core.withContext(function($ctx1) {
  18226. //>>excludeEnd("ctx");
  18227. self.splice(anInteger - 1, 1);
  18228. return self;
  18229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18230. }, function($ctx1) {$ctx1.fill(self,"removeIndex:",{anInteger:anInteger},$globals.Array)});
  18231. //>>excludeEnd("ctx");
  18232. },
  18233. //>>excludeStart("ide", pragmas.excludeIdeData);
  18234. args: ["anInteger"],
  18235. source: "removeIndex: anInteger\x0a\x09<self.splice(anInteger - 1, 1)>",
  18236. referencedClasses: [],
  18237. //>>excludeEnd("ide");
  18238. messageSends: []
  18239. }),
  18240. $globals.Array);
  18241. $core.addMethod(
  18242. $core.method({
  18243. selector: "removeLast",
  18244. protocol: 'adding/removing',
  18245. fn: function (){
  18246. var self=this;
  18247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18248. return $core.withContext(function($ctx1) {
  18249. //>>excludeEnd("ctx");
  18250. return self.pop();;
  18251. return self;
  18252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18253. }, function($ctx1) {$ctx1.fill(self,"removeLast",{},$globals.Array)});
  18254. //>>excludeEnd("ctx");
  18255. },
  18256. //>>excludeStart("ide", pragmas.excludeIdeData);
  18257. args: [],
  18258. source: "removeLast\x0a\x09<return self.pop();>",
  18259. referencedClasses: [],
  18260. //>>excludeEnd("ide");
  18261. messageSends: []
  18262. }),
  18263. $globals.Array);
  18264. $core.addMethod(
  18265. $core.method({
  18266. selector: "reversed",
  18267. protocol: 'converting',
  18268. fn: function (){
  18269. var self=this;
  18270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18271. return $core.withContext(function($ctx1) {
  18272. //>>excludeEnd("ctx");
  18273. return self._copy().reverse();
  18274. return self;
  18275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18276. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.Array)});
  18277. //>>excludeEnd("ctx");
  18278. },
  18279. //>>excludeStart("ide", pragmas.excludeIdeData);
  18280. args: [],
  18281. source: "reversed\x0a\x09<return self._copy().reverse()>",
  18282. referencedClasses: [],
  18283. //>>excludeEnd("ide");
  18284. messageSends: []
  18285. }),
  18286. $globals.Array);
  18287. $core.addMethod(
  18288. $core.method({
  18289. selector: "select:",
  18290. protocol: 'enumerating',
  18291. fn: function (aBlock){
  18292. var self=this;
  18293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18294. return $core.withContext(function($ctx1) {
  18295. //>>excludeEnd("ctx");
  18296. var result = self.klass._new();
  18297. for(var i=0; i<self.length; i++) {
  18298. if(aBlock._value_(self[i])) {
  18299. result.push(self[i]);
  18300. }
  18301. }
  18302. return result;
  18303. ;
  18304. return self;
  18305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18306. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock},$globals.Array)});
  18307. //>>excludeEnd("ctx");
  18308. },
  18309. //>>excludeStart("ide", pragmas.excludeIdeData);
  18310. args: ["aBlock"],
  18311. source: "select: aBlock\x0a\x09\x22Optimized version\x22\x0a\x09\x0a\x09<\x0a\x09\x09var result = self.klass._new();\x0a\x09\x09for(var i=0; i<self.length; i++) {\x0a\x09\x09\x09if(aBlock._value_(self[i])) {\x0a\x09\x09\x09\x09result.push(self[i]);\x0a\x09\x09\x09}\x0a\x09\x09}\x0a\x09\x09return result;\x0a\x09>",
  18312. referencedClasses: [],
  18313. //>>excludeEnd("ide");
  18314. messageSends: []
  18315. }),
  18316. $globals.Array);
  18317. $core.addMethod(
  18318. $core.method({
  18319. selector: "size",
  18320. protocol: 'accessing',
  18321. fn: function (){
  18322. var self=this;
  18323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18324. return $core.withContext(function($ctx1) {
  18325. //>>excludeEnd("ctx");
  18326. return self.length;
  18327. return self;
  18328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18329. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Array)});
  18330. //>>excludeEnd("ctx");
  18331. },
  18332. //>>excludeStart("ide", pragmas.excludeIdeData);
  18333. args: [],
  18334. source: "size\x0a\x09<return self.length>",
  18335. referencedClasses: [],
  18336. //>>excludeEnd("ide");
  18337. messageSends: []
  18338. }),
  18339. $globals.Array);
  18340. $core.addMethod(
  18341. $core.method({
  18342. selector: "sort",
  18343. protocol: 'enumerating',
  18344. fn: function (){
  18345. var self=this;
  18346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18347. return $core.withContext(function($ctx1) {
  18348. //>>excludeEnd("ctx");
  18349. var $1;
  18350. $1=self._sort_((function(a,b){
  18351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18352. return $core.withContext(function($ctx2) {
  18353. //>>excludeEnd("ctx");
  18354. return $recv(a).__lt(b);
  18355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18356. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  18357. //>>excludeEnd("ctx");
  18358. }));
  18359. return $1;
  18360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18361. }, function($ctx1) {$ctx1.fill(self,"sort",{},$globals.Array)});
  18362. //>>excludeEnd("ctx");
  18363. },
  18364. //>>excludeStart("ide", pragmas.excludeIdeData);
  18365. args: [],
  18366. source: "sort\x0a\x09^ self sort: [ :a :b | a < b ]",
  18367. referencedClasses: [],
  18368. //>>excludeEnd("ide");
  18369. messageSends: ["sort:", "<"]
  18370. }),
  18371. $globals.Array);
  18372. $core.addMethod(
  18373. $core.method({
  18374. selector: "sort:",
  18375. protocol: 'enumerating',
  18376. fn: function (aBlock){
  18377. var self=this;
  18378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18379. return $core.withContext(function($ctx1) {
  18380. //>>excludeEnd("ctx");
  18381. return self.sort(function(a, b) {
  18382. if(aBlock._value_value_(a,b)) {return -1} else {return 1}
  18383. })
  18384. ;
  18385. return self;
  18386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18387. }, function($ctx1) {$ctx1.fill(self,"sort:",{aBlock:aBlock},$globals.Array)});
  18388. //>>excludeEnd("ctx");
  18389. },
  18390. //>>excludeStart("ide", pragmas.excludeIdeData);
  18391. args: ["aBlock"],
  18392. source: "sort: aBlock\x0a\x09<\x0a\x09\x09return self.sort(function(a, b) {\x0a\x09\x09\x09if(aBlock._value_value_(a,b)) {return -1} else {return 1}\x0a\x09\x09})\x0a\x09>",
  18393. referencedClasses: [],
  18394. //>>excludeEnd("ide");
  18395. messageSends: []
  18396. }),
  18397. $globals.Array);
  18398. $core.addMethod(
  18399. $core.method({
  18400. selector: "sorted",
  18401. protocol: 'enumerating',
  18402. fn: function (){
  18403. var self=this;
  18404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18405. return $core.withContext(function($ctx1) {
  18406. //>>excludeEnd("ctx");
  18407. var $1;
  18408. $1=$recv(self._copy())._sort();
  18409. return $1;
  18410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18411. }, function($ctx1) {$ctx1.fill(self,"sorted",{},$globals.Array)});
  18412. //>>excludeEnd("ctx");
  18413. },
  18414. //>>excludeStart("ide", pragmas.excludeIdeData);
  18415. args: [],
  18416. source: "sorted\x0a\x09^ self copy sort",
  18417. referencedClasses: [],
  18418. //>>excludeEnd("ide");
  18419. messageSends: ["sort", "copy"]
  18420. }),
  18421. $globals.Array);
  18422. $core.addMethod(
  18423. $core.method({
  18424. selector: "sorted:",
  18425. protocol: 'enumerating',
  18426. fn: function (aBlock){
  18427. var self=this;
  18428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18429. return $core.withContext(function($ctx1) {
  18430. //>>excludeEnd("ctx");
  18431. var $1;
  18432. $1=$recv(self._copy())._sort_(aBlock);
  18433. return $1;
  18434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18435. }, function($ctx1) {$ctx1.fill(self,"sorted:",{aBlock:aBlock},$globals.Array)});
  18436. //>>excludeEnd("ctx");
  18437. },
  18438. //>>excludeStart("ide", pragmas.excludeIdeData);
  18439. args: ["aBlock"],
  18440. source: "sorted: aBlock\x0a\x09^ self copy sort: aBlock",
  18441. referencedClasses: [],
  18442. //>>excludeEnd("ide");
  18443. messageSends: ["sort:", "copy"]
  18444. }),
  18445. $globals.Array);
  18446. $core.addMethod(
  18447. $core.method({
  18448. selector: "new:",
  18449. protocol: 'instance creation',
  18450. fn: function (anInteger){
  18451. var self=this;
  18452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18453. return $core.withContext(function($ctx1) {
  18454. //>>excludeEnd("ctx");
  18455. return new Array(anInteger);
  18456. return self;
  18457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18458. }, function($ctx1) {$ctx1.fill(self,"new:",{anInteger:anInteger},$globals.Array.klass)});
  18459. //>>excludeEnd("ctx");
  18460. },
  18461. //>>excludeStart("ide", pragmas.excludeIdeData);
  18462. args: ["anInteger"],
  18463. source: "new: anInteger\x0a\x09<return new Array(anInteger)>",
  18464. referencedClasses: [],
  18465. //>>excludeEnd("ide");
  18466. messageSends: []
  18467. }),
  18468. $globals.Array.klass);
  18469. $core.addMethod(
  18470. $core.method({
  18471. selector: "with:",
  18472. protocol: 'instance creation',
  18473. fn: function (anObject){
  18474. var self=this;
  18475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18476. return $core.withContext(function($ctx1) {
  18477. //>>excludeEnd("ctx");
  18478. var $2,$3,$1;
  18479. $2=self._new_((1));
  18480. $recv($2)._at_put_((1),anObject);
  18481. $3=$recv($2)._yourself();
  18482. $1=$3;
  18483. return $1;
  18484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18485. }, function($ctx1) {$ctx1.fill(self,"with:",{anObject:anObject},$globals.Array.klass)});
  18486. //>>excludeEnd("ctx");
  18487. },
  18488. //>>excludeStart("ide", pragmas.excludeIdeData);
  18489. args: ["anObject"],
  18490. source: "with: anObject\x0a\x09\x09^ (self new: 1)\x0a\x09\x09at: 1 put: anObject;\x0a\x09\x09yourself",
  18491. referencedClasses: [],
  18492. //>>excludeEnd("ide");
  18493. messageSends: ["at:put:", "new:", "yourself"]
  18494. }),
  18495. $globals.Array.klass);
  18496. $core.addMethod(
  18497. $core.method({
  18498. selector: "with:with:",
  18499. protocol: 'instance creation',
  18500. fn: function (anObject,anObject2){
  18501. var self=this;
  18502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18503. return $core.withContext(function($ctx1) {
  18504. //>>excludeEnd("ctx");
  18505. var $2,$3,$1;
  18506. $2=self._new_((2));
  18507. $recv($2)._at_put_((1),anObject);
  18508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18509. $ctx1.sendIdx["at:put:"]=1;
  18510. //>>excludeEnd("ctx");
  18511. $recv($2)._at_put_((2),anObject2);
  18512. $3=$recv($2)._yourself();
  18513. $1=$3;
  18514. return $1;
  18515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18516. }, function($ctx1) {$ctx1.fill(self,"with:with:",{anObject:anObject,anObject2:anObject2},$globals.Array.klass)});
  18517. //>>excludeEnd("ctx");
  18518. },
  18519. //>>excludeStart("ide", pragmas.excludeIdeData);
  18520. args: ["anObject", "anObject2"],
  18521. source: "with: anObject with: anObject2\x0a\x09\x09^ (self new: 2)\x0a\x09\x09at: 1 put: anObject;\x0a\x09\x09at: 2 put: anObject2;\x0a\x09\x09yourself",
  18522. referencedClasses: [],
  18523. //>>excludeEnd("ide");
  18524. messageSends: ["at:put:", "new:", "yourself"]
  18525. }),
  18526. $globals.Array.klass);
  18527. $core.addMethod(
  18528. $core.method({
  18529. selector: "with:with:with:",
  18530. protocol: 'instance creation',
  18531. fn: function (anObject,anObject2,anObject3){
  18532. var self=this;
  18533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18534. return $core.withContext(function($ctx1) {
  18535. //>>excludeEnd("ctx");
  18536. var $2,$3,$1;
  18537. $2=self._new_((3));
  18538. $recv($2)._at_put_((1),anObject);
  18539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18540. $ctx1.sendIdx["at:put:"]=1;
  18541. //>>excludeEnd("ctx");
  18542. $recv($2)._at_put_((2),anObject2);
  18543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18544. $ctx1.sendIdx["at:put:"]=2;
  18545. //>>excludeEnd("ctx");
  18546. $recv($2)._at_put_((3),anObject3);
  18547. $3=$recv($2)._yourself();
  18548. $1=$3;
  18549. return $1;
  18550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18551. }, function($ctx1) {$ctx1.fill(self,"with:with:with:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3},$globals.Array.klass)});
  18552. //>>excludeEnd("ctx");
  18553. },
  18554. //>>excludeStart("ide", pragmas.excludeIdeData);
  18555. args: ["anObject", "anObject2", "anObject3"],
  18556. source: "with: anObject with: anObject2 with: anObject3\x0a\x09\x09^ (self new: 3)\x0a\x09\x09at: 1 put: anObject;\x0a\x09\x09at: 2 put: anObject2;\x0a\x09\x09at: 3 put: anObject3;\x0a\x09\x09yourself",
  18557. referencedClasses: [],
  18558. //>>excludeEnd("ide");
  18559. messageSends: ["at:put:", "new:", "yourself"]
  18560. }),
  18561. $globals.Array.klass);
  18562. $core.addMethod(
  18563. $core.method({
  18564. selector: "withAll:",
  18565. protocol: 'instance creation',
  18566. fn: function (aCollection){
  18567. var self=this;
  18568. var instance,index;
  18569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18570. return $core.withContext(function($ctx1) {
  18571. //>>excludeEnd("ctx");
  18572. var $1;
  18573. index=(1);
  18574. instance=self._new_($recv(aCollection)._size());
  18575. $recv(aCollection)._do_((function(each){
  18576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18577. return $core.withContext(function($ctx2) {
  18578. //>>excludeEnd("ctx");
  18579. $recv(instance)._at_put_(index,each);
  18580. index=$recv(index).__plus((1));
  18581. return index;
  18582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18583. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  18584. //>>excludeEnd("ctx");
  18585. }));
  18586. $1=instance;
  18587. return $1;
  18588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18589. }, function($ctx1) {$ctx1.fill(self,"withAll:",{aCollection:aCollection,instance:instance,index:index},$globals.Array.klass)});
  18590. //>>excludeEnd("ctx");
  18591. },
  18592. //>>excludeStart("ide", pragmas.excludeIdeData);
  18593. args: ["aCollection"],
  18594. source: "withAll: aCollection\x0a\x09| instance index |\x0a\x09index := 1.\x0a\x09instance := self new: aCollection size.\x0a\x09aCollection do: [ :each |\x0a\x09\x09instance at: index put: each.\x0a\x09\x09index := index + 1 ].\x0a\x09^ instance",
  18595. referencedClasses: [],
  18596. //>>excludeEnd("ide");
  18597. messageSends: ["new:", "size", "do:", "at:put:", "+"]
  18598. }),
  18599. $globals.Array.klass);
  18600. $core.addClass('CharacterArray', $globals.SequenceableCollection, [], 'Kernel-Collections');
  18601. //>>excludeStart("ide", pragmas.excludeIdeData);
  18602. $globals.CharacterArray.comment="I am the abstract superclass of string-like collections.";
  18603. //>>excludeEnd("ide");
  18604. $core.addMethod(
  18605. $core.method({
  18606. selector: ",",
  18607. protocol: 'copying',
  18608. fn: function (aString){
  18609. var self=this;
  18610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18611. return $core.withContext(function($ctx1) {
  18612. //>>excludeEnd("ctx");
  18613. var $2,$1;
  18614. $2=self._asString();
  18615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18616. $ctx1.sendIdx["asString"]=1;
  18617. //>>excludeEnd("ctx");
  18618. $1=$recv($2).__comma($recv(aString)._asString());
  18619. return $1;
  18620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18621. }, function($ctx1) {$ctx1.fill(self,",",{aString:aString},$globals.CharacterArray)});
  18622. //>>excludeEnd("ctx");
  18623. },
  18624. //>>excludeStart("ide", pragmas.excludeIdeData);
  18625. args: ["aString"],
  18626. source: ", aString\x0a\x09^ self asString, aString asString",
  18627. referencedClasses: [],
  18628. //>>excludeEnd("ide");
  18629. messageSends: [",", "asString"]
  18630. }),
  18631. $globals.CharacterArray);
  18632. $core.addMethod(
  18633. $core.method({
  18634. selector: "add:",
  18635. protocol: 'adding/removing',
  18636. fn: function (anObject){
  18637. var self=this;
  18638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18639. return $core.withContext(function($ctx1) {
  18640. //>>excludeEnd("ctx");
  18641. self._errorReadOnly();
  18642. return self;
  18643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18644. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.CharacterArray)});
  18645. //>>excludeEnd("ctx");
  18646. },
  18647. //>>excludeStart("ide", pragmas.excludeIdeData);
  18648. args: ["anObject"],
  18649. source: "add: anObject\x0a\x09self errorReadOnly",
  18650. referencedClasses: [],
  18651. //>>excludeEnd("ide");
  18652. messageSends: ["errorReadOnly"]
  18653. }),
  18654. $globals.CharacterArray);
  18655. $core.addMethod(
  18656. $core.method({
  18657. selector: "asLowercase",
  18658. protocol: 'converting',
  18659. fn: function (){
  18660. var self=this;
  18661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18662. return $core.withContext(function($ctx1) {
  18663. //>>excludeEnd("ctx");
  18664. var $1;
  18665. $1=$recv(self._class())._fromString_($recv(self._asString())._asLowercase());
  18666. return $1;
  18667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18668. }, function($ctx1) {$ctx1.fill(self,"asLowercase",{},$globals.CharacterArray)});
  18669. //>>excludeEnd("ctx");
  18670. },
  18671. //>>excludeStart("ide", pragmas.excludeIdeData);
  18672. args: [],
  18673. source: "asLowercase\x0a\x09^ self class fromString: self asString asLowercase",
  18674. referencedClasses: [],
  18675. //>>excludeEnd("ide");
  18676. messageSends: ["fromString:", "class", "asLowercase", "asString"]
  18677. }),
  18678. $globals.CharacterArray);
  18679. $core.addMethod(
  18680. $core.method({
  18681. selector: "asNumber",
  18682. protocol: 'converting',
  18683. fn: function (){
  18684. var self=this;
  18685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18686. return $core.withContext(function($ctx1) {
  18687. //>>excludeEnd("ctx");
  18688. var $1;
  18689. $1=$recv(self._asString())._asNumber();
  18690. return $1;
  18691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18692. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.CharacterArray)});
  18693. //>>excludeEnd("ctx");
  18694. },
  18695. //>>excludeStart("ide", pragmas.excludeIdeData);
  18696. args: [],
  18697. source: "asNumber\x0a\x09^ self asString asNumber",
  18698. referencedClasses: [],
  18699. //>>excludeEnd("ide");
  18700. messageSends: ["asNumber", "asString"]
  18701. }),
  18702. $globals.CharacterArray);
  18703. $core.addMethod(
  18704. $core.method({
  18705. selector: "asString",
  18706. protocol: 'converting',
  18707. fn: function (){
  18708. var self=this;
  18709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18710. return $core.withContext(function($ctx1) {
  18711. //>>excludeEnd("ctx");
  18712. var $1;
  18713. $1=self._subclassResponsibility();
  18714. return $1;
  18715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18716. }, function($ctx1) {$ctx1.fill(self,"asString",{},$globals.CharacterArray)});
  18717. //>>excludeEnd("ctx");
  18718. },
  18719. //>>excludeStart("ide", pragmas.excludeIdeData);
  18720. args: [],
  18721. source: "asString\x0a\x09^ self subclassResponsibility",
  18722. referencedClasses: [],
  18723. //>>excludeEnd("ide");
  18724. messageSends: ["subclassResponsibility"]
  18725. }),
  18726. $globals.CharacterArray);
  18727. $core.addMethod(
  18728. $core.method({
  18729. selector: "asSymbol",
  18730. protocol: 'converting',
  18731. fn: function (){
  18732. var self=this;
  18733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18734. return $core.withContext(function($ctx1) {
  18735. //>>excludeEnd("ctx");
  18736. var $1;
  18737. $1=self._asString();
  18738. return $1;
  18739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18740. }, function($ctx1) {$ctx1.fill(self,"asSymbol",{},$globals.CharacterArray)});
  18741. //>>excludeEnd("ctx");
  18742. },
  18743. //>>excludeStart("ide", pragmas.excludeIdeData);
  18744. args: [],
  18745. source: "asSymbol\x0a\x09^ self asString",
  18746. referencedClasses: [],
  18747. //>>excludeEnd("ide");
  18748. messageSends: ["asString"]
  18749. }),
  18750. $globals.CharacterArray);
  18751. $core.addMethod(
  18752. $core.method({
  18753. selector: "asUppercase",
  18754. protocol: 'converting',
  18755. fn: function (){
  18756. var self=this;
  18757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18758. return $core.withContext(function($ctx1) {
  18759. //>>excludeEnd("ctx");
  18760. var $1;
  18761. $1=$recv(self._class())._fromString_($recv(self._asString())._asUppercase());
  18762. return $1;
  18763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18764. }, function($ctx1) {$ctx1.fill(self,"asUppercase",{},$globals.CharacterArray)});
  18765. //>>excludeEnd("ctx");
  18766. },
  18767. //>>excludeStart("ide", pragmas.excludeIdeData);
  18768. args: [],
  18769. source: "asUppercase\x0a\x09^ self class fromString: self asString asUppercase",
  18770. referencedClasses: [],
  18771. //>>excludeEnd("ide");
  18772. messageSends: ["fromString:", "class", "asUppercase", "asString"]
  18773. }),
  18774. $globals.CharacterArray);
  18775. $core.addMethod(
  18776. $core.method({
  18777. selector: "at:put:",
  18778. protocol: 'accessing',
  18779. fn: function (anIndex,anObject){
  18780. var self=this;
  18781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18782. return $core.withContext(function($ctx1) {
  18783. //>>excludeEnd("ctx");
  18784. self._errorReadOnly();
  18785. return self;
  18786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18787. }, function($ctx1) {$ctx1.fill(self,"at:put:",{anIndex:anIndex,anObject:anObject},$globals.CharacterArray)});
  18788. //>>excludeEnd("ctx");
  18789. },
  18790. //>>excludeStart("ide", pragmas.excludeIdeData);
  18791. args: ["anIndex", "anObject"],
  18792. source: "at: anIndex put: anObject\x0a\x09self errorReadOnly",
  18793. referencedClasses: [],
  18794. //>>excludeEnd("ide");
  18795. messageSends: ["errorReadOnly"]
  18796. }),
  18797. $globals.CharacterArray);
  18798. $core.addMethod(
  18799. $core.method({
  18800. selector: "errorReadOnly",
  18801. protocol: 'error handling',
  18802. fn: function (){
  18803. var self=this;
  18804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18805. return $core.withContext(function($ctx1) {
  18806. //>>excludeEnd("ctx");
  18807. self._error_("Object is read-only");
  18808. return self;
  18809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18810. }, function($ctx1) {$ctx1.fill(self,"errorReadOnly",{},$globals.CharacterArray)});
  18811. //>>excludeEnd("ctx");
  18812. },
  18813. //>>excludeStart("ide", pragmas.excludeIdeData);
  18814. args: [],
  18815. source: "errorReadOnly\x0a\x09self error: 'Object is read-only'",
  18816. referencedClasses: [],
  18817. //>>excludeEnd("ide");
  18818. messageSends: ["error:"]
  18819. }),
  18820. $globals.CharacterArray);
  18821. $core.addMethod(
  18822. $core.method({
  18823. selector: "printOn:",
  18824. protocol: 'printing',
  18825. fn: function (aStream){
  18826. var self=this;
  18827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18828. return $core.withContext(function($ctx1) {
  18829. //>>excludeEnd("ctx");
  18830. $recv(self._asString())._printOn_(aStream);
  18831. return self;
  18832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18833. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.CharacterArray)});
  18834. //>>excludeEnd("ctx");
  18835. },
  18836. //>>excludeStart("ide", pragmas.excludeIdeData);
  18837. args: ["aStream"],
  18838. source: "printOn: aStream\x0a\x09self asString printOn: aStream",
  18839. referencedClasses: [],
  18840. //>>excludeEnd("ide");
  18841. messageSends: ["printOn:", "asString"]
  18842. }),
  18843. $globals.CharacterArray);
  18844. $core.addMethod(
  18845. $core.method({
  18846. selector: "putOn:",
  18847. protocol: 'streaming',
  18848. fn: function (aStream){
  18849. var self=this;
  18850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18851. return $core.withContext(function($ctx1) {
  18852. //>>excludeEnd("ctx");
  18853. $recv(aStream)._nextPutString_(self);
  18854. return self;
  18855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18856. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.CharacterArray)});
  18857. //>>excludeEnd("ctx");
  18858. },
  18859. //>>excludeStart("ide", pragmas.excludeIdeData);
  18860. args: ["aStream"],
  18861. source: "putOn: aStream\x0a\x09aStream nextPutString: self",
  18862. referencedClasses: [],
  18863. //>>excludeEnd("ide");
  18864. messageSends: ["nextPutString:"]
  18865. }),
  18866. $globals.CharacterArray);
  18867. $core.addMethod(
  18868. $core.method({
  18869. selector: "remove:",
  18870. protocol: 'adding/removing',
  18871. fn: function (anObject){
  18872. var self=this;
  18873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18874. return $core.withContext(function($ctx1) {
  18875. //>>excludeEnd("ctx");
  18876. self._errorReadOnly();
  18877. return self;
  18878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18879. }, function($ctx1) {$ctx1.fill(self,"remove:",{anObject:anObject},$globals.CharacterArray)});
  18880. //>>excludeEnd("ctx");
  18881. },
  18882. //>>excludeStart("ide", pragmas.excludeIdeData);
  18883. args: ["anObject"],
  18884. source: "remove: anObject\x0a\x09self errorReadOnly",
  18885. referencedClasses: [],
  18886. //>>excludeEnd("ide");
  18887. messageSends: ["errorReadOnly"]
  18888. }),
  18889. $globals.CharacterArray);
  18890. $core.addMethod(
  18891. $core.method({
  18892. selector: "fromString:",
  18893. protocol: 'instance creation',
  18894. fn: function (aString){
  18895. var self=this;
  18896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18897. return $core.withContext(function($ctx1) {
  18898. //>>excludeEnd("ctx");
  18899. self._subclassResponsibility();
  18900. return self;
  18901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18902. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.CharacterArray.klass)});
  18903. //>>excludeEnd("ctx");
  18904. },
  18905. //>>excludeStart("ide", pragmas.excludeIdeData);
  18906. args: ["aString"],
  18907. source: "fromString: aString\x0a\x09self subclassResponsibility",
  18908. referencedClasses: [],
  18909. //>>excludeEnd("ide");
  18910. messageSends: ["subclassResponsibility"]
  18911. }),
  18912. $globals.CharacterArray.klass);
  18913. $core.addClass('String', $globals.CharacterArray, [], 'Kernel-Collections');
  18914. //>>excludeStart("ide", pragmas.excludeIdeData);
  18915. $globals.String.comment="I am an indexed collection of Characters. Unlike most Smalltalk dialects, Amber doesn't provide the Character class. Instead, elements of a String are single character strings.\x0a\x0aString inherits many useful methods from its hierarchy, such as\x0a\x09`Collection >> #,`";
  18916. //>>excludeEnd("ide");
  18917. $core.addMethod(
  18918. $core.method({
  18919. selector: ",",
  18920. protocol: 'copying',
  18921. fn: function (aString){
  18922. var self=this;
  18923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18924. return $core.withContext(function($ctx1) {
  18925. //>>excludeEnd("ctx");
  18926. return String(self) + aString;
  18927. return self;
  18928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18929. }, function($ctx1) {$ctx1.fill(self,",",{aString:aString},$globals.String)});
  18930. //>>excludeEnd("ctx");
  18931. },
  18932. //>>excludeStart("ide", pragmas.excludeIdeData);
  18933. args: ["aString"],
  18934. source: ", aString\x0a\x09<return String(self) + aString>",
  18935. referencedClasses: [],
  18936. //>>excludeEnd("ide");
  18937. messageSends: []
  18938. }),
  18939. $globals.String);
  18940. $core.addMethod(
  18941. $core.method({
  18942. selector: "<",
  18943. protocol: 'comparing',
  18944. fn: function (aString){
  18945. var self=this;
  18946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18947. return $core.withContext(function($ctx1) {
  18948. //>>excludeEnd("ctx");
  18949. return String(self) < aString._asString();
  18950. return self;
  18951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18952. }, function($ctx1) {$ctx1.fill(self,"<",{aString:aString},$globals.String)});
  18953. //>>excludeEnd("ctx");
  18954. },
  18955. //>>excludeStart("ide", pragmas.excludeIdeData);
  18956. args: ["aString"],
  18957. source: "< aString\x0a\x09<return String(self) < aString._asString()>",
  18958. referencedClasses: [],
  18959. //>>excludeEnd("ide");
  18960. messageSends: []
  18961. }),
  18962. $globals.String);
  18963. $core.addMethod(
  18964. $core.method({
  18965. selector: "<=",
  18966. protocol: 'comparing',
  18967. fn: function (aString){
  18968. var self=this;
  18969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18970. return $core.withContext(function($ctx1) {
  18971. //>>excludeEnd("ctx");
  18972. return String(self) <= aString._asString();
  18973. return self;
  18974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18975. }, function($ctx1) {$ctx1.fill(self,"<=",{aString:aString},$globals.String)});
  18976. //>>excludeEnd("ctx");
  18977. },
  18978. //>>excludeStart("ide", pragmas.excludeIdeData);
  18979. args: ["aString"],
  18980. source: "<= aString\x0a\x09<return String(self) <= aString._asString()>",
  18981. referencedClasses: [],
  18982. //>>excludeEnd("ide");
  18983. messageSends: []
  18984. }),
  18985. $globals.String);
  18986. $core.addMethod(
  18987. $core.method({
  18988. selector: "=",
  18989. protocol: 'comparing',
  18990. fn: function (aString){
  18991. var self=this;
  18992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18993. return $core.withContext(function($ctx1) {
  18994. //>>excludeEnd("ctx");
  18995. return aString != null &&
  18996. typeof aString._isString === "function" &&
  18997. aString._isString() &&
  18998. String(self) === String(aString)
  18999. ;
  19000. return self;
  19001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19002. }, function($ctx1) {$ctx1.fill(self,"=",{aString:aString},$globals.String)});
  19003. //>>excludeEnd("ctx");
  19004. },
  19005. //>>excludeStart("ide", pragmas.excludeIdeData);
  19006. args: ["aString"],
  19007. source: "= aString\x0a\x09<\x0a\x09\x09return aString != null &&\x0a\x09\x09\x09typeof aString._isString === \x22function\x22 &&\x0a\x09\x09\x09aString._isString() &&\x0a\x09\x09\x09String(self) === String(aString)\x0a\x09>",
  19008. referencedClasses: [],
  19009. //>>excludeEnd("ide");
  19010. messageSends: []
  19011. }),
  19012. $globals.String);
  19013. $core.addMethod(
  19014. $core.method({
  19015. selector: "==",
  19016. protocol: 'comparing',
  19017. fn: function (aString){
  19018. var self=this;
  19019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19020. return $core.withContext(function($ctx1) {
  19021. //>>excludeEnd("ctx");
  19022. var $1;
  19023. $1=self.__eq(aString);
  19024. return $1;
  19025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19026. }, function($ctx1) {$ctx1.fill(self,"==",{aString:aString},$globals.String)});
  19027. //>>excludeEnd("ctx");
  19028. },
  19029. //>>excludeStart("ide", pragmas.excludeIdeData);
  19030. args: ["aString"],
  19031. source: "== aString\x0a\x09^ self = aString",
  19032. referencedClasses: [],
  19033. //>>excludeEnd("ide");
  19034. messageSends: ["="]
  19035. }),
  19036. $globals.String);
  19037. $core.addMethod(
  19038. $core.method({
  19039. selector: ">",
  19040. protocol: 'comparing',
  19041. fn: function (aString){
  19042. var self=this;
  19043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19044. return $core.withContext(function($ctx1) {
  19045. //>>excludeEnd("ctx");
  19046. return String(self) > aString._asString();
  19047. return self;
  19048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19049. }, function($ctx1) {$ctx1.fill(self,">",{aString:aString},$globals.String)});
  19050. //>>excludeEnd("ctx");
  19051. },
  19052. //>>excludeStart("ide", pragmas.excludeIdeData);
  19053. args: ["aString"],
  19054. source: "> aString\x0a\x09<return String(self) >> aString._asString()>",
  19055. referencedClasses: [],
  19056. //>>excludeEnd("ide");
  19057. messageSends: []
  19058. }),
  19059. $globals.String);
  19060. $core.addMethod(
  19061. $core.method({
  19062. selector: ">=",
  19063. protocol: 'comparing',
  19064. fn: function (aString){
  19065. var self=this;
  19066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19067. return $core.withContext(function($ctx1) {
  19068. //>>excludeEnd("ctx");
  19069. return String(self) >= aString._asString();
  19070. return self;
  19071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19072. }, function($ctx1) {$ctx1.fill(self,">=",{aString:aString},$globals.String)});
  19073. //>>excludeEnd("ctx");
  19074. },
  19075. //>>excludeStart("ide", pragmas.excludeIdeData);
  19076. args: ["aString"],
  19077. source: ">= aString\x0a\x09<return String(self) >>= aString._asString()>",
  19078. referencedClasses: [],
  19079. //>>excludeEnd("ide");
  19080. messageSends: []
  19081. }),
  19082. $globals.String);
  19083. $core.addMethod(
  19084. $core.method({
  19085. selector: "asJSON",
  19086. protocol: 'converting',
  19087. fn: function (){
  19088. var self=this;
  19089. return self;
  19090. },
  19091. //>>excludeStart("ide", pragmas.excludeIdeData);
  19092. args: [],
  19093. source: "asJSON\x0a\x09^ self",
  19094. referencedClasses: [],
  19095. //>>excludeEnd("ide");
  19096. messageSends: []
  19097. }),
  19098. $globals.String);
  19099. $core.addMethod(
  19100. $core.method({
  19101. selector: "asJavaScriptMethodName",
  19102. protocol: 'converting',
  19103. fn: function (){
  19104. var self=this;
  19105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19106. return $core.withContext(function($ctx1) {
  19107. //>>excludeEnd("ctx");
  19108. return $core.st2js(self);
  19109. return self;
  19110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19111. }, function($ctx1) {$ctx1.fill(self,"asJavaScriptMethodName",{},$globals.String)});
  19112. //>>excludeEnd("ctx");
  19113. },
  19114. //>>excludeStart("ide", pragmas.excludeIdeData);
  19115. args: [],
  19116. source: "asJavaScriptMethodName\x0a\x09<return $core.st2js(self)>",
  19117. referencedClasses: [],
  19118. //>>excludeEnd("ide");
  19119. messageSends: []
  19120. }),
  19121. $globals.String);
  19122. $core.addMethod(
  19123. $core.method({
  19124. selector: "asJavascript",
  19125. protocol: 'converting',
  19126. fn: function (){
  19127. var self=this;
  19128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19129. return $core.withContext(function($ctx1) {
  19130. //>>excludeEnd("ctx");
  19131. if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1)
  19132. return "\"" + self.replace(/[\x00-\x1f"\\\x7f-\x9f]/g, function(ch){var c=ch.charCodeAt(0);return "\\x"+("0"+c.toString(16)).slice(-2)}) + "\"";
  19133. else
  19134. return "\"" + self + "\"";
  19135. ;
  19136. return self;
  19137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19138. }, function($ctx1) {$ctx1.fill(self,"asJavascript",{},$globals.String)});
  19139. //>>excludeEnd("ctx");
  19140. },
  19141. //>>excludeStart("ide", pragmas.excludeIdeData);
  19142. args: [],
  19143. source: "asJavascript\x0a\x09<\x0a\x09\x09if(self.search(/^[a-zA-Z0-9_:.$ ]*$/) == -1)\x0a\x09\x09\x09return \x22\x5c\x22\x22 + self.replace(/[\x5cx00-\x5cx1f\x22\x5c\x5c\x5cx7f-\x5cx9f]/g, function(ch){var c=ch.charCodeAt(0);return \x22\x5c\x5cx\x22+(\x220\x22+c.toString(16)).slice(-2)}) + \x22\x5c\x22\x22;\x0a\x09\x09else\x0a\x09\x09\x09return \x22\x5c\x22\x22 + self + \x22\x5c\x22\x22;\x0a\x09>",
  19144. referencedClasses: [],
  19145. //>>excludeEnd("ide");
  19146. messageSends: []
  19147. }),
  19148. $globals.String);
  19149. $core.addMethod(
  19150. $core.method({
  19151. selector: "asLowercase",
  19152. protocol: 'converting',
  19153. fn: function (){
  19154. var self=this;
  19155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19156. return $core.withContext(function($ctx1) {
  19157. //>>excludeEnd("ctx");
  19158. return self.toLowerCase();
  19159. return self;
  19160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19161. }, function($ctx1) {$ctx1.fill(self,"asLowercase",{},$globals.String)});
  19162. //>>excludeEnd("ctx");
  19163. },
  19164. //>>excludeStart("ide", pragmas.excludeIdeData);
  19165. args: [],
  19166. source: "asLowercase\x0a\x09<return self.toLowerCase()>",
  19167. referencedClasses: [],
  19168. //>>excludeEnd("ide");
  19169. messageSends: []
  19170. }),
  19171. $globals.String);
  19172. $core.addMethod(
  19173. $core.method({
  19174. selector: "asMutator",
  19175. protocol: 'converting',
  19176. fn: function (){
  19177. var self=this;
  19178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19179. return $core.withContext(function($ctx1) {
  19180. //>>excludeEnd("ctx");
  19181. var $1,$2;
  19182. $1=$recv(self._last()).__eq(":");
  19183. if(!$core.assert($1)){
  19184. $2=self.__comma(":");
  19185. return $2;
  19186. };
  19187. return self;
  19188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19189. }, function($ctx1) {$ctx1.fill(self,"asMutator",{},$globals.String)});
  19190. //>>excludeEnd("ctx");
  19191. },
  19192. //>>excludeStart("ide", pragmas.excludeIdeData);
  19193. args: [],
  19194. source: "asMutator\x0a\x09\x22Answer a setter selector. For example,\x0a\x09#name asMutator returns #name:\x22\x0a\x0a\x09self last = ':' ifFalse: [ ^ self, ':' ].\x0a\x09^ self",
  19195. referencedClasses: [],
  19196. //>>excludeEnd("ide");
  19197. messageSends: ["ifFalse:", "=", "last", ","]
  19198. }),
  19199. $globals.String);
  19200. $core.addMethod(
  19201. $core.method({
  19202. selector: "asNumber",
  19203. protocol: 'converting',
  19204. fn: function (){
  19205. var self=this;
  19206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19207. return $core.withContext(function($ctx1) {
  19208. //>>excludeEnd("ctx");
  19209. return Number(self);
  19210. return self;
  19211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19212. }, function($ctx1) {$ctx1.fill(self,"asNumber",{},$globals.String)});
  19213. //>>excludeEnd("ctx");
  19214. },
  19215. //>>excludeStart("ide", pragmas.excludeIdeData);
  19216. args: [],
  19217. source: "asNumber\x0a\x09<return Number(self)>",
  19218. referencedClasses: [],
  19219. //>>excludeEnd("ide");
  19220. messageSends: []
  19221. }),
  19222. $globals.String);
  19223. $core.addMethod(
  19224. $core.method({
  19225. selector: "asRegexp",
  19226. protocol: 'converting',
  19227. fn: function (){
  19228. var self=this;
  19229. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  19230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19231. return $core.withContext(function($ctx1) {
  19232. //>>excludeEnd("ctx");
  19233. var $1;
  19234. $1=$recv($RegularExpression())._fromString_(self);
  19235. return $1;
  19236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19237. }, function($ctx1) {$ctx1.fill(self,"asRegexp",{},$globals.String)});
  19238. //>>excludeEnd("ctx");
  19239. },
  19240. //>>excludeStart("ide", pragmas.excludeIdeData);
  19241. args: [],
  19242. source: "asRegexp\x0a\x09^ RegularExpression fromString: self",
  19243. referencedClasses: ["RegularExpression"],
  19244. //>>excludeEnd("ide");
  19245. messageSends: ["fromString:"]
  19246. }),
  19247. $globals.String);
  19248. $core.addMethod(
  19249. $core.method({
  19250. selector: "asSelector",
  19251. protocol: 'converting',
  19252. fn: function (){
  19253. var self=this;
  19254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19255. return $core.withContext(function($ctx1) {
  19256. //>>excludeEnd("ctx");
  19257. var $1;
  19258. self._deprecatedAPI_("Use #asJavaScriptMethodName");
  19259. $1=self._asJavaScriptMethodName();
  19260. return $1;
  19261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19262. }, function($ctx1) {$ctx1.fill(self,"asSelector",{},$globals.String)});
  19263. //>>excludeEnd("ctx");
  19264. },
  19265. //>>excludeStart("ide", pragmas.excludeIdeData);
  19266. args: [],
  19267. source: "asSelector\x0a\x09self deprecatedAPI: 'Use #asJavaScriptMethodName'.\x0a\x09^ self asJavaScriptMethodName",
  19268. referencedClasses: [],
  19269. //>>excludeEnd("ide");
  19270. messageSends: ["deprecatedAPI:", "asJavaScriptMethodName"]
  19271. }),
  19272. $globals.String);
  19273. $core.addMethod(
  19274. $core.method({
  19275. selector: "asString",
  19276. protocol: 'converting',
  19277. fn: function (){
  19278. var self=this;
  19279. return self;
  19280. },
  19281. //>>excludeStart("ide", pragmas.excludeIdeData);
  19282. args: [],
  19283. source: "asString\x0a\x09^ self",
  19284. referencedClasses: [],
  19285. //>>excludeEnd("ide");
  19286. messageSends: []
  19287. }),
  19288. $globals.String);
  19289. $core.addMethod(
  19290. $core.method({
  19291. selector: "asSymbol",
  19292. protocol: 'converting',
  19293. fn: function (){
  19294. var self=this;
  19295. return self;
  19296. },
  19297. //>>excludeStart("ide", pragmas.excludeIdeData);
  19298. args: [],
  19299. source: "asSymbol\x0a\x09^ self",
  19300. referencedClasses: [],
  19301. //>>excludeEnd("ide");
  19302. messageSends: []
  19303. }),
  19304. $globals.String);
  19305. $core.addMethod(
  19306. $core.method({
  19307. selector: "asUppercase",
  19308. protocol: 'converting',
  19309. fn: function (){
  19310. var self=this;
  19311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19312. return $core.withContext(function($ctx1) {
  19313. //>>excludeEnd("ctx");
  19314. return self.toUpperCase();
  19315. return self;
  19316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19317. }, function($ctx1) {$ctx1.fill(self,"asUppercase",{},$globals.String)});
  19318. //>>excludeEnd("ctx");
  19319. },
  19320. //>>excludeStart("ide", pragmas.excludeIdeData);
  19321. args: [],
  19322. source: "asUppercase\x0a\x09<return self.toUpperCase()>",
  19323. referencedClasses: [],
  19324. //>>excludeEnd("ide");
  19325. messageSends: []
  19326. }),
  19327. $globals.String);
  19328. $core.addMethod(
  19329. $core.method({
  19330. selector: "asciiValue",
  19331. protocol: 'accessing',
  19332. fn: function (){
  19333. var self=this;
  19334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19335. return $core.withContext(function($ctx1) {
  19336. //>>excludeEnd("ctx");
  19337. return self.charCodeAt(0);;
  19338. return self;
  19339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19340. }, function($ctx1) {$ctx1.fill(self,"asciiValue",{},$globals.String)});
  19341. //>>excludeEnd("ctx");
  19342. },
  19343. //>>excludeStart("ide", pragmas.excludeIdeData);
  19344. args: [],
  19345. source: "asciiValue\x0a\x09<return self.charCodeAt(0);>",
  19346. referencedClasses: [],
  19347. //>>excludeEnd("ide");
  19348. messageSends: []
  19349. }),
  19350. $globals.String);
  19351. $core.addMethod(
  19352. $core.method({
  19353. selector: "at:ifAbsent:",
  19354. protocol: 'accessing',
  19355. fn: function (anIndex,aBlock){
  19356. var self=this;
  19357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19358. return $core.withContext(function($ctx1) {
  19359. //>>excludeEnd("ctx");
  19360. return String(self)[anIndex - 1] || aBlock._value();
  19361. return self;
  19362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19363. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{anIndex:anIndex,aBlock:aBlock},$globals.String)});
  19364. //>>excludeEnd("ctx");
  19365. },
  19366. //>>excludeStart("ide", pragmas.excludeIdeData);
  19367. args: ["anIndex", "aBlock"],
  19368. source: "at: anIndex ifAbsent: aBlock\x0a\x09<return String(self)[anIndex - 1] || aBlock._value()>",
  19369. referencedClasses: [],
  19370. //>>excludeEnd("ide");
  19371. messageSends: []
  19372. }),
  19373. $globals.String);
  19374. $core.addMethod(
  19375. $core.method({
  19376. selector: "at:ifPresent:ifAbsent:",
  19377. protocol: 'accessing',
  19378. fn: function (anIndex,aBlock,anotherBlock){
  19379. var self=this;
  19380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19381. return $core.withContext(function($ctx1) {
  19382. //>>excludeEnd("ctx");
  19383. var result = String(self)[anIndex - 1];
  19384. return result ? aBlock._value_(result) : anotherBlock._value();
  19385. ;
  19386. return self;
  19387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19388. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{anIndex:anIndex,aBlock:aBlock,anotherBlock:anotherBlock},$globals.String)});
  19389. //>>excludeEnd("ctx");
  19390. },
  19391. //>>excludeStart("ide", pragmas.excludeIdeData);
  19392. args: ["anIndex", "aBlock", "anotherBlock"],
  19393. source: "at: anIndex ifPresent: aBlock ifAbsent: anotherBlock\x0a\x09<\x0a\x09\x09var result = String(self)[anIndex - 1];\x0a\x09\x09return result ? aBlock._value_(result) : anotherBlock._value();\x0a\x09>",
  19394. referencedClasses: [],
  19395. //>>excludeEnd("ide");
  19396. messageSends: []
  19397. }),
  19398. $globals.String);
  19399. $core.addMethod(
  19400. $core.method({
  19401. selector: "capitalized",
  19402. protocol: 'converting',
  19403. fn: function (){
  19404. var self=this;
  19405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19406. return $core.withContext(function($ctx1) {
  19407. //>>excludeEnd("ctx");
  19408. var $2,$1;
  19409. $2=self._isEmpty();
  19410. if($core.assert($2)){
  19411. $1=self;
  19412. } else {
  19413. $1=$recv($recv(self._first())._asUppercase()).__comma(self._allButFirst());
  19414. };
  19415. return $1;
  19416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19417. }, function($ctx1) {$ctx1.fill(self,"capitalized",{},$globals.String)});
  19418. //>>excludeEnd("ctx");
  19419. },
  19420. //>>excludeStart("ide", pragmas.excludeIdeData);
  19421. args: [],
  19422. source: "capitalized\x0a\x09^ self isEmpty\x0a\x09\x09ifTrue: [ self ]\x0a\x09\x09ifFalse: [ self first asUppercase, self allButFirst ]",
  19423. referencedClasses: [],
  19424. //>>excludeEnd("ide");
  19425. messageSends: ["ifTrue:ifFalse:", "isEmpty", ",", "asUppercase", "first", "allButFirst"]
  19426. }),
  19427. $globals.String);
  19428. $core.addMethod(
  19429. $core.method({
  19430. selector: "charCodeAt:",
  19431. protocol: 'accessing',
  19432. fn: function (anInteger){
  19433. var self=this;
  19434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19435. return $core.withContext(function($ctx1) {
  19436. //>>excludeEnd("ctx");
  19437. return self.charCodeAt(anInteger - 1);
  19438. return self;
  19439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19440. }, function($ctx1) {$ctx1.fill(self,"charCodeAt:",{anInteger:anInteger},$globals.String)});
  19441. //>>excludeEnd("ctx");
  19442. },
  19443. //>>excludeStart("ide", pragmas.excludeIdeData);
  19444. args: ["anInteger"],
  19445. source: "charCodeAt: anInteger\x0a\x09<return self.charCodeAt(anInteger - 1)>",
  19446. referencedClasses: [],
  19447. //>>excludeEnd("ide");
  19448. messageSends: []
  19449. }),
  19450. $globals.String);
  19451. $core.addMethod(
  19452. $core.method({
  19453. selector: "copyFrom:to:",
  19454. protocol: 'copying',
  19455. fn: function (anIndex,anotherIndex){
  19456. var self=this;
  19457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19458. return $core.withContext(function($ctx1) {
  19459. //>>excludeEnd("ctx");
  19460. return self.substring(anIndex - 1, anotherIndex);
  19461. return self;
  19462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19463. }, function($ctx1) {$ctx1.fill(self,"copyFrom:to:",{anIndex:anIndex,anotherIndex:anotherIndex},$globals.String)});
  19464. //>>excludeEnd("ctx");
  19465. },
  19466. //>>excludeStart("ide", pragmas.excludeIdeData);
  19467. args: ["anIndex", "anotherIndex"],
  19468. source: "copyFrom: anIndex to: anotherIndex\x0a\x09<return self.substring(anIndex - 1, anotherIndex)>",
  19469. referencedClasses: [],
  19470. //>>excludeEnd("ide");
  19471. messageSends: []
  19472. }),
  19473. $globals.String);
  19474. $core.addMethod(
  19475. $core.method({
  19476. selector: "crlfSanitized",
  19477. protocol: 'converting',
  19478. fn: function (){
  19479. var self=this;
  19480. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  19481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19482. return $core.withContext(function($ctx1) {
  19483. //>>excludeEnd("ctx");
  19484. var $1;
  19485. $1=$recv(self._lines())._join_($recv($String())._lf());
  19486. return $1;
  19487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19488. }, function($ctx1) {$ctx1.fill(self,"crlfSanitized",{},$globals.String)});
  19489. //>>excludeEnd("ctx");
  19490. },
  19491. //>>excludeStart("ide", pragmas.excludeIdeData);
  19492. args: [],
  19493. source: "crlfSanitized\x0a\x09^ self lines join: String lf",
  19494. referencedClasses: ["String"],
  19495. //>>excludeEnd("ide");
  19496. messageSends: ["join:", "lines", "lf"]
  19497. }),
  19498. $globals.String);
  19499. $core.addMethod(
  19500. $core.method({
  19501. selector: "deepCopy",
  19502. protocol: 'copying',
  19503. fn: function (){
  19504. var self=this;
  19505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19506. return $core.withContext(function($ctx1) {
  19507. //>>excludeEnd("ctx");
  19508. var $1;
  19509. $1=self._shallowCopy();
  19510. return $1;
  19511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19512. }, function($ctx1) {$ctx1.fill(self,"deepCopy",{},$globals.String)});
  19513. //>>excludeEnd("ctx");
  19514. },
  19515. //>>excludeStart("ide", pragmas.excludeIdeData);
  19516. args: [],
  19517. source: "deepCopy\x0a\x09^ self shallowCopy",
  19518. referencedClasses: [],
  19519. //>>excludeEnd("ide");
  19520. messageSends: ["shallowCopy"]
  19521. }),
  19522. $globals.String);
  19523. $core.addMethod(
  19524. $core.method({
  19525. selector: "escaped",
  19526. protocol: 'converting',
  19527. fn: function (){
  19528. var self=this;
  19529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19530. return $core.withContext(function($ctx1) {
  19531. //>>excludeEnd("ctx");
  19532. return escape(self);
  19533. return self;
  19534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19535. }, function($ctx1) {$ctx1.fill(self,"escaped",{},$globals.String)});
  19536. //>>excludeEnd("ctx");
  19537. },
  19538. //>>excludeStart("ide", pragmas.excludeIdeData);
  19539. args: [],
  19540. source: "escaped\x0a\x09<return escape(self)>",
  19541. referencedClasses: [],
  19542. //>>excludeEnd("ide");
  19543. messageSends: []
  19544. }),
  19545. $globals.String);
  19546. $core.addMethod(
  19547. $core.method({
  19548. selector: "identityHash",
  19549. protocol: 'accessing',
  19550. fn: function (){
  19551. var self=this;
  19552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19553. return $core.withContext(function($ctx1) {
  19554. //>>excludeEnd("ctx");
  19555. var $1;
  19556. $1=self.__comma("s");
  19557. return $1;
  19558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19559. }, function($ctx1) {$ctx1.fill(self,"identityHash",{},$globals.String)});
  19560. //>>excludeEnd("ctx");
  19561. },
  19562. //>>excludeStart("ide", pragmas.excludeIdeData);
  19563. args: [],
  19564. source: "identityHash\x0a\x09^ self, 's'",
  19565. referencedClasses: [],
  19566. //>>excludeEnd("ide");
  19567. messageSends: [","]
  19568. }),
  19569. $globals.String);
  19570. $core.addMethod(
  19571. $core.method({
  19572. selector: "includesSubString:",
  19573. protocol: 'testing',
  19574. fn: function (subString){
  19575. var self=this;
  19576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19577. return $core.withContext(function($ctx1) {
  19578. //>>excludeEnd("ctx");
  19579. return self.indexOf(subString) != -1;
  19580. return self;
  19581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19582. }, function($ctx1) {$ctx1.fill(self,"includesSubString:",{subString:subString},$globals.String)});
  19583. //>>excludeEnd("ctx");
  19584. },
  19585. //>>excludeStart("ide", pragmas.excludeIdeData);
  19586. args: ["subString"],
  19587. source: "includesSubString: subString\x0a\x09<return self.indexOf(subString) != -1>",
  19588. referencedClasses: [],
  19589. //>>excludeEnd("ide");
  19590. messageSends: []
  19591. }),
  19592. $globals.String);
  19593. $core.addMethod(
  19594. $core.method({
  19595. selector: "isCapitalized",
  19596. protocol: 'testing',
  19597. fn: function (){
  19598. var self=this;
  19599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19600. return $core.withContext(function($ctx1) {
  19601. //>>excludeEnd("ctx");
  19602. var $3,$2,$1;
  19603. $3=self._first();
  19604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19605. $ctx1.sendIdx["first"]=1;
  19606. //>>excludeEnd("ctx");
  19607. $2=$recv($3)._asUppercase();
  19608. $1=$recv($2).__eq_eq(self._first());
  19609. return $1;
  19610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19611. }, function($ctx1) {$ctx1.fill(self,"isCapitalized",{},$globals.String)});
  19612. //>>excludeEnd("ctx");
  19613. },
  19614. //>>excludeStart("ide", pragmas.excludeIdeData);
  19615. args: [],
  19616. source: "isCapitalized\x0a\x09^ self first asUppercase == self first",
  19617. referencedClasses: [],
  19618. //>>excludeEnd("ide");
  19619. messageSends: ["==", "asUppercase", "first"]
  19620. }),
  19621. $globals.String);
  19622. $core.addMethod(
  19623. $core.method({
  19624. selector: "isImmutable",
  19625. protocol: 'testing',
  19626. fn: function (){
  19627. var self=this;
  19628. return true;
  19629. },
  19630. //>>excludeStart("ide", pragmas.excludeIdeData);
  19631. args: [],
  19632. source: "isImmutable\x0a\x09^ true",
  19633. referencedClasses: [],
  19634. //>>excludeEnd("ide");
  19635. messageSends: []
  19636. }),
  19637. $globals.String);
  19638. $core.addMethod(
  19639. $core.method({
  19640. selector: "isString",
  19641. protocol: 'testing',
  19642. fn: function (){
  19643. var self=this;
  19644. return true;
  19645. },
  19646. //>>excludeStart("ide", pragmas.excludeIdeData);
  19647. args: [],
  19648. source: "isString\x0a\x09^ true",
  19649. referencedClasses: [],
  19650. //>>excludeEnd("ide");
  19651. messageSends: []
  19652. }),
  19653. $globals.String);
  19654. $core.addMethod(
  19655. $core.method({
  19656. selector: "isVowel",
  19657. protocol: 'testing',
  19658. fn: function (){
  19659. var self=this;
  19660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19661. return $core.withContext(function($ctx1) {
  19662. //>>excludeEnd("ctx");
  19663. var $1;
  19664. $1=$recv($recv(self._size()).__eq((1)))._and_((function(){
  19665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19666. return $core.withContext(function($ctx2) {
  19667. //>>excludeEnd("ctx");
  19668. return "aeiou"._includes_(self._asLowercase());
  19669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19670. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  19671. //>>excludeEnd("ctx");
  19672. }));
  19673. return $1;
  19674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19675. }, function($ctx1) {$ctx1.fill(self,"isVowel",{},$globals.String)});
  19676. //>>excludeEnd("ctx");
  19677. },
  19678. //>>excludeStart("ide", pragmas.excludeIdeData);
  19679. args: [],
  19680. source: "isVowel\x0a\x09\x22Answer true if the receiver is a one character string containing a voyel\x22\x0a\x09\x0a\x09^ self size = 1 and: [ 'aeiou' includes: self asLowercase ]",
  19681. referencedClasses: [],
  19682. //>>excludeEnd("ide");
  19683. messageSends: ["and:", "=", "size", "includes:", "asLowercase"]
  19684. }),
  19685. $globals.String);
  19686. $core.addMethod(
  19687. $core.method({
  19688. selector: "join:",
  19689. protocol: 'split join',
  19690. fn: function (aCollection){
  19691. var self=this;
  19692. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  19693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19694. return $core.withContext(function($ctx1) {
  19695. //>>excludeEnd("ctx");
  19696. var $1;
  19697. $1=$recv($String())._streamContents_((function(stream){
  19698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19699. return $core.withContext(function($ctx2) {
  19700. //>>excludeEnd("ctx");
  19701. return $recv(aCollection)._do_separatedBy_((function(each){
  19702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19703. return $core.withContext(function($ctx3) {
  19704. //>>excludeEnd("ctx");
  19705. return $recv(stream)._nextPutAll_($recv(each)._asString());
  19706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19707. $ctx3.sendIdx["nextPutAll:"]=1;
  19708. //>>excludeEnd("ctx");
  19709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19710. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  19711. //>>excludeEnd("ctx");
  19712. }),(function(){
  19713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19714. return $core.withContext(function($ctx3) {
  19715. //>>excludeEnd("ctx");
  19716. return $recv(stream)._nextPutAll_(self);
  19717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19718. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  19719. //>>excludeEnd("ctx");
  19720. }));
  19721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19722. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  19723. //>>excludeEnd("ctx");
  19724. }));
  19725. return $1;
  19726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19727. }, function($ctx1) {$ctx1.fill(self,"join:",{aCollection:aCollection},$globals.String)});
  19728. //>>excludeEnd("ctx");
  19729. },
  19730. //>>excludeStart("ide", pragmas.excludeIdeData);
  19731. args: ["aCollection"],
  19732. source: "join: aCollection\x0a\x09^ String\x0a\x09\x09streamContents: [ :stream | aCollection\x0a\x09\x09\x09\x09do: [ :each | stream nextPutAll: each asString ]\x0a\x09\x09\x09\x09separatedBy: [ stream nextPutAll: self ]]",
  19733. referencedClasses: ["String"],
  19734. //>>excludeEnd("ide");
  19735. messageSends: ["streamContents:", "do:separatedBy:", "nextPutAll:", "asString"]
  19736. }),
  19737. $globals.String);
  19738. $core.addMethod(
  19739. $core.method({
  19740. selector: "lineIndicesDo:",
  19741. protocol: 'split join',
  19742. fn: function (aBlock){
  19743. var self=this;
  19744. var cr,lf,start,sz,nextLF,nextCR;
  19745. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  19746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19747. return $core.withContext(function($ctx1) {
  19748. //>>excludeEnd("ctx");
  19749. var $2,$1,$4,$5,$3,$6,$7,$9,$8,$10,$11;
  19750. var $early={};
  19751. try {
  19752. start=(1);
  19753. sz=self._size();
  19754. cr=$recv($String())._cr();
  19755. nextCR=self._indexOf_startingAt_(cr,(1));
  19756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19757. $ctx1.sendIdx["indexOf:startingAt:"]=1;
  19758. //>>excludeEnd("ctx");
  19759. lf=$recv($String())._lf();
  19760. nextLF=self._indexOf_startingAt_(lf,(1));
  19761. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19762. $ctx1.sendIdx["indexOf:startingAt:"]=2;
  19763. //>>excludeEnd("ctx");
  19764. $recv((function(){
  19765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19766. return $core.withContext(function($ctx2) {
  19767. //>>excludeEnd("ctx");
  19768. return $recv(start).__lt_eq(sz);
  19769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19770. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  19771. //>>excludeEnd("ctx");
  19772. }))._whileTrue_((function(){
  19773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19774. return $core.withContext(function($ctx2) {
  19775. //>>excludeEnd("ctx");
  19776. $2=$recv(nextLF).__eq((0));
  19777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19778. $ctx2.sendIdx["="]=1;
  19779. //>>excludeEnd("ctx");
  19780. $1=$recv($2)._and_((function(){
  19781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19782. return $core.withContext(function($ctx3) {
  19783. //>>excludeEnd("ctx");
  19784. return $recv(nextCR).__eq((0));
  19785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19786. $ctx3.sendIdx["="]=2;
  19787. //>>excludeEnd("ctx");
  19788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19789. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  19790. //>>excludeEnd("ctx");
  19791. }));
  19792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19793. $ctx2.sendIdx["and:"]=1;
  19794. //>>excludeEnd("ctx");
  19795. if($core.assert($1)){
  19796. $recv(aBlock)._value_value_value_(start,sz,sz);
  19797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19798. $ctx2.sendIdx["value:value:value:"]=1;
  19799. //>>excludeEnd("ctx");
  19800. throw $early=[self];
  19801. };
  19802. $4=$recv(nextCR).__eq((0));
  19803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19804. $ctx2.sendIdx["="]=3;
  19805. //>>excludeEnd("ctx");
  19806. $3=$recv($4)._or_((function(){
  19807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19808. return $core.withContext(function($ctx3) {
  19809. //>>excludeEnd("ctx");
  19810. $5=(0).__lt(nextLF);
  19811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19812. $ctx3.sendIdx["<"]=1;
  19813. //>>excludeEnd("ctx");
  19814. return $recv($5)._and_((function(){
  19815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19816. return $core.withContext(function($ctx4) {
  19817. //>>excludeEnd("ctx");
  19818. return $recv(nextLF).__lt(nextCR);
  19819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19820. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,6)});
  19821. //>>excludeEnd("ctx");
  19822. }));
  19823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19824. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  19825. //>>excludeEnd("ctx");
  19826. }));
  19827. if($core.assert($3)){
  19828. $6=start;
  19829. $7=$recv(nextLF).__minus((1));
  19830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19831. $ctx2.sendIdx["-"]=1;
  19832. //>>excludeEnd("ctx");
  19833. $recv(aBlock)._value_value_value_($6,$7,nextLF);
  19834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19835. $ctx2.sendIdx["value:value:value:"]=2;
  19836. //>>excludeEnd("ctx");
  19837. start=(1).__plus(nextLF);
  19838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19839. $ctx2.sendIdx["+"]=1;
  19840. //>>excludeEnd("ctx");
  19841. start;
  19842. nextLF=self._indexOf_startingAt_(lf,start);
  19843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19844. $ctx2.sendIdx["indexOf:startingAt:"]=3;
  19845. //>>excludeEnd("ctx");
  19846. return nextLF;
  19847. } else {
  19848. $9=(1).__plus(nextCR);
  19849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19850. $ctx2.sendIdx["+"]=2;
  19851. //>>excludeEnd("ctx");
  19852. $8=$recv($9).__eq(nextLF);
  19853. if($core.assert($8)){
  19854. $10=start;
  19855. $11=$recv(nextCR).__minus((1));
  19856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19857. $ctx2.sendIdx["-"]=2;
  19858. //>>excludeEnd("ctx");
  19859. $recv(aBlock)._value_value_value_($10,$11,nextLF);
  19860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19861. $ctx2.sendIdx["value:value:value:"]=3;
  19862. //>>excludeEnd("ctx");
  19863. start=(1).__plus(nextLF);
  19864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19865. $ctx2.sendIdx["+"]=3;
  19866. //>>excludeEnd("ctx");
  19867. start;
  19868. nextCR=self._indexOf_startingAt_(cr,start);
  19869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19870. $ctx2.sendIdx["indexOf:startingAt:"]=4;
  19871. //>>excludeEnd("ctx");
  19872. nextCR;
  19873. nextLF=self._indexOf_startingAt_(lf,start);
  19874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19875. $ctx2.sendIdx["indexOf:startingAt:"]=5;
  19876. //>>excludeEnd("ctx");
  19877. return nextLF;
  19878. } else {
  19879. $recv(aBlock)._value_value_value_(start,$recv(nextCR).__minus((1)),nextCR);
  19880. start=(1).__plus(nextCR);
  19881. start;
  19882. nextCR=self._indexOf_startingAt_(cr,start);
  19883. return nextCR;
  19884. };
  19885. };
  19886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19887. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  19888. //>>excludeEnd("ctx");
  19889. }));
  19890. return self;
  19891. }
  19892. catch(e) {if(e===$early)return e[0]; throw e}
  19893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19894. }, function($ctx1) {$ctx1.fill(self,"lineIndicesDo:",{aBlock:aBlock,cr:cr,lf:lf,start:start,sz:sz,nextLF:nextLF,nextCR:nextCR},$globals.String)});
  19895. //>>excludeEnd("ctx");
  19896. },
  19897. //>>excludeStart("ide", pragmas.excludeIdeData);
  19898. args: ["aBlock"],
  19899. source: "lineIndicesDo: aBlock\x0a\x09\x22execute aBlock with 3 arguments for each line:\x0a\x09- start index of line\x0a\x09- end index of line without line delimiter\x0a\x09- end index of line including line delimiter(s) CR, LF or CRLF\x22\x0a\x09\x0a\x09| cr lf start sz nextLF nextCR |\x0a\x09start := 1.\x0a\x09sz := self size.\x0a\x09cr := String cr.\x0a\x09nextCR := self indexOf: cr startingAt: 1.\x0a\x09lf := String lf.\x0a\x09nextLF := self indexOf: lf startingAt: 1.\x0a\x09[ start <= sz ] whileTrue: [ \x0a\x09\x09(nextLF = 0 and: [ nextCR = 0 ])\x0a\x09\x09\x09ifTrue: [ \x22No more CR, nor LF, the string is over\x22\x0a\x09\x09\x09\x09\x09aBlock value: start value: sz value: sz.\x0a\x09\x09\x09\x09\x09^ self ].\x0a\x09\x09(nextCR = 0 or: [ 0 < nextLF and: [ nextLF < nextCR ] ])\x0a\x09\x09\x09ifTrue: [ \x22Found a LF\x22\x0a\x09\x09\x09\x09\x09aBlock value: start value: nextLF - 1 value: nextLF.\x0a\x09\x09\x09\x09\x09start := 1 + nextLF.\x0a\x09\x09\x09\x09\x09nextLF := self indexOf: lf startingAt: start ]\x0a\x09\x09\x09ifFalse: [ 1 + nextCR = nextLF\x0a\x09\x09\x09\x09ifTrue: [ \x22Found a CR-LF pair\x22\x0a\x09\x09\x09\x09\x09aBlock value: start value: nextCR - 1 value: nextLF.\x0a\x09\x09\x09\x09\x09start := 1 + nextLF.\x0a\x09\x09\x09\x09\x09nextCR := self indexOf: cr startingAt: start.\x0a\x09\x09\x09\x09\x09nextLF := self indexOf: lf startingAt: start ]\x0a\x09\x09\x09\x09ifFalse: [ \x22Found a CR\x22\x0a\x09\x09\x09\x09\x09aBlock value: start value: nextCR - 1 value: nextCR.\x0a\x09\x09\x09\x09\x09start := 1 + nextCR.\x0a\x09\x09\x09\x09\x09nextCR := self indexOf: cr startingAt: start ] ]]",
  19900. referencedClasses: ["String"],
  19901. //>>excludeEnd("ide");
  19902. messageSends: ["size", "cr", "indexOf:startingAt:", "lf", "whileTrue:", "<=", "ifTrue:", "and:", "=", "value:value:value:", "ifTrue:ifFalse:", "or:", "<", "-", "+"]
  19903. }),
  19904. $globals.String);
  19905. $core.addMethod(
  19906. $core.method({
  19907. selector: "lineNumber:",
  19908. protocol: 'split join',
  19909. fn: function (anIndex){
  19910. var self=this;
  19911. var lineCount;
  19912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19913. return $core.withContext(function($ctx1) {
  19914. //>>excludeEnd("ctx");
  19915. var $2,$1,$3;
  19916. var $early={};
  19917. try {
  19918. lineCount=(0);
  19919. self._lineIndicesDo_((function(start,endWithoutDelimiters,end){
  19920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19921. return $core.withContext(function($ctx2) {
  19922. //>>excludeEnd("ctx");
  19923. lineCount=$recv(lineCount).__plus((1));
  19924. $2=lineCount;
  19925. $1=$recv($2).__eq(anIndex);
  19926. if($core.assert($1)){
  19927. $3=self._copyFrom_to_(start,endWithoutDelimiters);
  19928. throw $early=[$3];
  19929. };
  19930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19931. }, function($ctx2) {$ctx2.fillBlock({start:start,endWithoutDelimiters:endWithoutDelimiters,end:end},$ctx1,1)});
  19932. //>>excludeEnd("ctx");
  19933. }));
  19934. return nil;
  19935. }
  19936. catch(e) {if(e===$early)return e[0]; throw e}
  19937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19938. }, function($ctx1) {$ctx1.fill(self,"lineNumber:",{anIndex:anIndex,lineCount:lineCount},$globals.String)});
  19939. //>>excludeEnd("ctx");
  19940. },
  19941. //>>excludeStart("ide", pragmas.excludeIdeData);
  19942. args: ["anIndex"],
  19943. source: "lineNumber: anIndex\x0a\x09\x22Answer a string containing the characters in the given line number.\x22\x0a\x0a\x09| lineCount |\x0a\x09lineCount := 0.\x0a\x09self lineIndicesDo: [ :start :endWithoutDelimiters :end |\x0a\x09\x09(lineCount := lineCount + 1) = anIndex ifTrue: [ ^ self copyFrom: start to: endWithoutDelimiters ]].\x0a\x09^ nil",
  19944. referencedClasses: [],
  19945. //>>excludeEnd("ide");
  19946. messageSends: ["lineIndicesDo:", "ifTrue:", "=", "+", "copyFrom:to:"]
  19947. }),
  19948. $globals.String);
  19949. $core.addMethod(
  19950. $core.method({
  19951. selector: "lines",
  19952. protocol: 'split join',
  19953. fn: function (){
  19954. var self=this;
  19955. var lines;
  19956. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  19957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19958. return $core.withContext(function($ctx1) {
  19959. //>>excludeEnd("ctx");
  19960. var $1;
  19961. lines=$recv($Array())._new();
  19962. self._linesDo_((function(aLine){
  19963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19964. return $core.withContext(function($ctx2) {
  19965. //>>excludeEnd("ctx");
  19966. return $recv(lines)._add_(aLine);
  19967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19968. }, function($ctx2) {$ctx2.fillBlock({aLine:aLine},$ctx1,1)});
  19969. //>>excludeEnd("ctx");
  19970. }));
  19971. $1=lines;
  19972. return $1;
  19973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19974. }, function($ctx1) {$ctx1.fill(self,"lines",{lines:lines},$globals.String)});
  19975. //>>excludeEnd("ctx");
  19976. },
  19977. //>>excludeStart("ide", pragmas.excludeIdeData);
  19978. args: [],
  19979. source: "lines\x0a\x09\x22Answer an array of lines composing this receiver without the line ending delimiters.\x22\x0a\x0a\x09| lines |\x0a\x09lines := Array new.\x0a\x09self linesDo: [ :aLine | lines add: aLine ].\x0a\x09^ lines",
  19980. referencedClasses: ["Array"],
  19981. //>>excludeEnd("ide");
  19982. messageSends: ["new", "linesDo:", "add:"]
  19983. }),
  19984. $globals.String);
  19985. $core.addMethod(
  19986. $core.method({
  19987. selector: "linesDo:",
  19988. protocol: 'split join',
  19989. fn: function (aBlock){
  19990. var self=this;
  19991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19992. return $core.withContext(function($ctx1) {
  19993. //>>excludeEnd("ctx");
  19994. self._lineIndicesDo_((function(start,endWithoutDelimiters,end){
  19995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  19996. return $core.withContext(function($ctx2) {
  19997. //>>excludeEnd("ctx");
  19998. return $recv(aBlock)._value_(self._copyFrom_to_(start,endWithoutDelimiters));
  19999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20000. }, function($ctx2) {$ctx2.fillBlock({start:start,endWithoutDelimiters:endWithoutDelimiters,end:end},$ctx1,1)});
  20001. //>>excludeEnd("ctx");
  20002. }));
  20003. return self;
  20004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20005. }, function($ctx1) {$ctx1.fill(self,"linesDo:",{aBlock:aBlock},$globals.String)});
  20006. //>>excludeEnd("ctx");
  20007. },
  20008. //>>excludeStart("ide", pragmas.excludeIdeData);
  20009. args: ["aBlock"],
  20010. source: "linesDo: aBlock\x0a\x09\x22Execute aBlock with each line in this string. The terminating line\x0a\x09delimiters CR, LF or CRLF pairs are not included in what is passed to aBlock\x22\x0a\x0a\x09self lineIndicesDo: [ :start :endWithoutDelimiters :end |\x0a\x09\x09aBlock value: (self copyFrom: start to: endWithoutDelimiters) ]",
  20011. referencedClasses: [],
  20012. //>>excludeEnd("ide");
  20013. messageSends: ["lineIndicesDo:", "value:", "copyFrom:to:"]
  20014. }),
  20015. $globals.String);
  20016. $core.addMethod(
  20017. $core.method({
  20018. selector: "match:",
  20019. protocol: 'regular expressions',
  20020. fn: function (aRegexp){
  20021. var self=this;
  20022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20023. return $core.withContext(function($ctx1) {
  20024. //>>excludeEnd("ctx");
  20025. return self.search(aRegexp) != -1;
  20026. return self;
  20027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20028. }, function($ctx1) {$ctx1.fill(self,"match:",{aRegexp:aRegexp},$globals.String)});
  20029. //>>excludeEnd("ctx");
  20030. },
  20031. //>>excludeStart("ide", pragmas.excludeIdeData);
  20032. args: ["aRegexp"],
  20033. source: "match: aRegexp\x0a\x09<return self.search(aRegexp) != -1>",
  20034. referencedClasses: [],
  20035. //>>excludeEnd("ide");
  20036. messageSends: []
  20037. }),
  20038. $globals.String);
  20039. $core.addMethod(
  20040. $core.method({
  20041. selector: "matchesOf:",
  20042. protocol: 'regular expressions',
  20043. fn: function (aRegularExpression){
  20044. var self=this;
  20045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20046. return $core.withContext(function($ctx1) {
  20047. //>>excludeEnd("ctx");
  20048. return self.match(aRegularExpression);
  20049. return self;
  20050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20051. }, function($ctx1) {$ctx1.fill(self,"matchesOf:",{aRegularExpression:aRegularExpression},$globals.String)});
  20052. //>>excludeEnd("ctx");
  20053. },
  20054. //>>excludeStart("ide", pragmas.excludeIdeData);
  20055. args: ["aRegularExpression"],
  20056. source: "matchesOf: aRegularExpression\x0a\x09<return self.match(aRegularExpression)>",
  20057. referencedClasses: [],
  20058. //>>excludeEnd("ide");
  20059. messageSends: []
  20060. }),
  20061. $globals.String);
  20062. $core.addMethod(
  20063. $core.method({
  20064. selector: "numericallyIndexable",
  20065. protocol: 'private',
  20066. fn: function (){
  20067. var self=this;
  20068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20069. return $core.withContext(function($ctx1) {
  20070. //>>excludeEnd("ctx");
  20071. return String(self);
  20072. return self;
  20073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20074. }, function($ctx1) {$ctx1.fill(self,"numericallyIndexable",{},$globals.String)});
  20075. //>>excludeEnd("ctx");
  20076. },
  20077. //>>excludeStart("ide", pragmas.excludeIdeData);
  20078. args: [],
  20079. source: "numericallyIndexable\x0a\x09<return String(self)>",
  20080. referencedClasses: [],
  20081. //>>excludeEnd("ide");
  20082. messageSends: []
  20083. }),
  20084. $globals.String);
  20085. $core.addMethod(
  20086. $core.method({
  20087. selector: "printNl",
  20088. protocol: 'printing',
  20089. fn: function (){
  20090. var self=this;
  20091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20092. return $core.withContext(function($ctx1) {
  20093. //>>excludeEnd("ctx");
  20094. console.log(self);
  20095. return self;
  20096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20097. }, function($ctx1) {$ctx1.fill(self,"printNl",{},$globals.String)});
  20098. //>>excludeEnd("ctx");
  20099. },
  20100. //>>excludeStart("ide", pragmas.excludeIdeData);
  20101. args: [],
  20102. source: "printNl\x0a\x09<console.log(self)>",
  20103. referencedClasses: [],
  20104. //>>excludeEnd("ide");
  20105. messageSends: []
  20106. }),
  20107. $globals.String);
  20108. $core.addMethod(
  20109. $core.method({
  20110. selector: "printOn:",
  20111. protocol: 'printing',
  20112. fn: function (aStream){
  20113. var self=this;
  20114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20115. return $core.withContext(function($ctx1) {
  20116. //>>excludeEnd("ctx");
  20117. var $1;
  20118. $recv(aStream)._nextPutAll_("'");
  20119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20120. $ctx1.sendIdx["nextPutAll:"]=1;
  20121. //>>excludeEnd("ctx");
  20122. $recv(aStream)._nextPutAll_(self);
  20123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20124. $ctx1.sendIdx["nextPutAll:"]=2;
  20125. //>>excludeEnd("ctx");
  20126. $1=$recv(aStream)._nextPutAll_("'");
  20127. return self;
  20128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20129. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.String)});
  20130. //>>excludeEnd("ctx");
  20131. },
  20132. //>>excludeStart("ide", pragmas.excludeIdeData);
  20133. args: ["aStream"],
  20134. source: "printOn: aStream\x0a\x09aStream \x0a\x09\x09nextPutAll: '''';\x0a\x09\x09nextPutAll: self;\x0a\x09\x09nextPutAll: ''''",
  20135. referencedClasses: [],
  20136. //>>excludeEnd("ide");
  20137. messageSends: ["nextPutAll:"]
  20138. }),
  20139. $globals.String);
  20140. $core.addMethod(
  20141. $core.method({
  20142. selector: "replace:with:",
  20143. protocol: 'regular expressions',
  20144. fn: function (aString,anotherString){
  20145. var self=this;
  20146. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20148. return $core.withContext(function($ctx1) {
  20149. //>>excludeEnd("ctx");
  20150. var $1;
  20151. $1=self._replaceRegexp_with_($recv($RegularExpression())._fromString_flag_(aString,"g"),anotherString);
  20152. return $1;
  20153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20154. }, function($ctx1) {$ctx1.fill(self,"replace:with:",{aString:aString,anotherString:anotherString},$globals.String)});
  20155. //>>excludeEnd("ctx");
  20156. },
  20157. //>>excludeStart("ide", pragmas.excludeIdeData);
  20158. args: ["aString", "anotherString"],
  20159. source: "replace: aString with: anotherString\x0a\x09^ self replaceRegexp: (RegularExpression fromString: aString flag: 'g') with: anotherString",
  20160. referencedClasses: ["RegularExpression"],
  20161. //>>excludeEnd("ide");
  20162. messageSends: ["replaceRegexp:with:", "fromString:flag:"]
  20163. }),
  20164. $globals.String);
  20165. $core.addMethod(
  20166. $core.method({
  20167. selector: "replaceRegexp:with:",
  20168. protocol: 'regular expressions',
  20169. fn: function (aRegexp,aString){
  20170. var self=this;
  20171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20172. return $core.withContext(function($ctx1) {
  20173. //>>excludeEnd("ctx");
  20174. return self.replace(aRegexp, aString);
  20175. return self;
  20176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20177. }, function($ctx1) {$ctx1.fill(self,"replaceRegexp:with:",{aRegexp:aRegexp,aString:aString},$globals.String)});
  20178. //>>excludeEnd("ctx");
  20179. },
  20180. //>>excludeStart("ide", pragmas.excludeIdeData);
  20181. args: ["aRegexp", "aString"],
  20182. source: "replaceRegexp: aRegexp with: aString\x0a\x09<return self.replace(aRegexp, aString)>",
  20183. referencedClasses: [],
  20184. //>>excludeEnd("ide");
  20185. messageSends: []
  20186. }),
  20187. $globals.String);
  20188. $core.addMethod(
  20189. $core.method({
  20190. selector: "reversed",
  20191. protocol: 'converting',
  20192. fn: function (){
  20193. var self=this;
  20194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20195. return $core.withContext(function($ctx1) {
  20196. //>>excludeEnd("ctx");
  20197. return self.split("").reverse().join("");
  20198. return self;
  20199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20200. }, function($ctx1) {$ctx1.fill(self,"reversed",{},$globals.String)});
  20201. //>>excludeEnd("ctx");
  20202. },
  20203. //>>excludeStart("ide", pragmas.excludeIdeData);
  20204. args: [],
  20205. source: "reversed\x0a\x09<return self.split(\x22\x22).reverse().join(\x22\x22)>",
  20206. referencedClasses: [],
  20207. //>>excludeEnd("ide");
  20208. messageSends: []
  20209. }),
  20210. $globals.String);
  20211. $core.addMethod(
  20212. $core.method({
  20213. selector: "shallowCopy",
  20214. protocol: 'copying',
  20215. fn: function (){
  20216. var self=this;
  20217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20218. return $core.withContext(function($ctx1) {
  20219. //>>excludeEnd("ctx");
  20220. var $1;
  20221. $1=$recv(self._class())._fromString_(self);
  20222. return $1;
  20223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20224. }, function($ctx1) {$ctx1.fill(self,"shallowCopy",{},$globals.String)});
  20225. //>>excludeEnd("ctx");
  20226. },
  20227. //>>excludeStart("ide", pragmas.excludeIdeData);
  20228. args: [],
  20229. source: "shallowCopy\x0a\x09^ self class fromString: self",
  20230. referencedClasses: [],
  20231. //>>excludeEnd("ide");
  20232. messageSends: ["fromString:", "class"]
  20233. }),
  20234. $globals.String);
  20235. $core.addMethod(
  20236. $core.method({
  20237. selector: "size",
  20238. protocol: 'accessing',
  20239. fn: function (){
  20240. var self=this;
  20241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20242. return $core.withContext(function($ctx1) {
  20243. //>>excludeEnd("ctx");
  20244. return self.length;
  20245. return self;
  20246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20247. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.String)});
  20248. //>>excludeEnd("ctx");
  20249. },
  20250. //>>excludeStart("ide", pragmas.excludeIdeData);
  20251. args: [],
  20252. source: "size\x0a\x09<return self.length>",
  20253. referencedClasses: [],
  20254. //>>excludeEnd("ide");
  20255. messageSends: []
  20256. }),
  20257. $globals.String);
  20258. $core.addMethod(
  20259. $core.method({
  20260. selector: "subStrings:",
  20261. protocol: 'split join',
  20262. fn: function (aString){
  20263. var self=this;
  20264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20265. return $core.withContext(function($ctx1) {
  20266. //>>excludeEnd("ctx");
  20267. var $1;
  20268. $1=self._tokenize_(aString);
  20269. return $1;
  20270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20271. }, function($ctx1) {$ctx1.fill(self,"subStrings:",{aString:aString},$globals.String)});
  20272. //>>excludeEnd("ctx");
  20273. },
  20274. //>>excludeStart("ide", pragmas.excludeIdeData);
  20275. args: ["aString"],
  20276. source: "subStrings: aString\x0a\x09^ self tokenize: aString",
  20277. referencedClasses: [],
  20278. //>>excludeEnd("ide");
  20279. messageSends: ["tokenize:"]
  20280. }),
  20281. $globals.String);
  20282. $core.addMethod(
  20283. $core.method({
  20284. selector: "tokenize:",
  20285. protocol: 'split join',
  20286. fn: function (aString){
  20287. var self=this;
  20288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20289. return $core.withContext(function($ctx1) {
  20290. //>>excludeEnd("ctx");
  20291. return self.split(aString);
  20292. return self;
  20293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20294. }, function($ctx1) {$ctx1.fill(self,"tokenize:",{aString:aString},$globals.String)});
  20295. //>>excludeEnd("ctx");
  20296. },
  20297. //>>excludeStart("ide", pragmas.excludeIdeData);
  20298. args: ["aString"],
  20299. source: "tokenize: aString\x0a\x09<return self.split(aString)>",
  20300. referencedClasses: [],
  20301. //>>excludeEnd("ide");
  20302. messageSends: []
  20303. }),
  20304. $globals.String);
  20305. $core.addMethod(
  20306. $core.method({
  20307. selector: "trimBoth",
  20308. protocol: 'regular expressions',
  20309. fn: function (){
  20310. var self=this;
  20311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20312. return $core.withContext(function($ctx1) {
  20313. //>>excludeEnd("ctx");
  20314. var $1;
  20315. $1=self._trimBoth_("\x5cs");
  20316. return $1;
  20317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20318. }, function($ctx1) {$ctx1.fill(self,"trimBoth",{},$globals.String)});
  20319. //>>excludeEnd("ctx");
  20320. },
  20321. //>>excludeStart("ide", pragmas.excludeIdeData);
  20322. args: [],
  20323. source: "trimBoth\x0a\x09^ self trimBoth: '\x5cs'",
  20324. referencedClasses: [],
  20325. //>>excludeEnd("ide");
  20326. messageSends: ["trimBoth:"]
  20327. }),
  20328. $globals.String);
  20329. $core.addMethod(
  20330. $core.method({
  20331. selector: "trimBoth:",
  20332. protocol: 'regular expressions',
  20333. fn: function (separators){
  20334. var self=this;
  20335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20336. return $core.withContext(function($ctx1) {
  20337. //>>excludeEnd("ctx");
  20338. var $1;
  20339. $1=$recv(self._trimLeft_(separators))._trimRight_(separators);
  20340. return $1;
  20341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20342. }, function($ctx1) {$ctx1.fill(self,"trimBoth:",{separators:separators},$globals.String)});
  20343. //>>excludeEnd("ctx");
  20344. },
  20345. //>>excludeStart("ide", pragmas.excludeIdeData);
  20346. args: ["separators"],
  20347. source: "trimBoth: separators\x0a\x09^ (self trimLeft: separators) trimRight: separators",
  20348. referencedClasses: [],
  20349. //>>excludeEnd("ide");
  20350. messageSends: ["trimRight:", "trimLeft:"]
  20351. }),
  20352. $globals.String);
  20353. $core.addMethod(
  20354. $core.method({
  20355. selector: "trimLeft",
  20356. protocol: 'regular expressions',
  20357. fn: function (){
  20358. var self=this;
  20359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20360. return $core.withContext(function($ctx1) {
  20361. //>>excludeEnd("ctx");
  20362. var $1;
  20363. $1=self._trimLeft_("\x5cs");
  20364. return $1;
  20365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20366. }, function($ctx1) {$ctx1.fill(self,"trimLeft",{},$globals.String)});
  20367. //>>excludeEnd("ctx");
  20368. },
  20369. //>>excludeStart("ide", pragmas.excludeIdeData);
  20370. args: [],
  20371. source: "trimLeft\x0a\x09^ self trimLeft: '\x5cs'",
  20372. referencedClasses: [],
  20373. //>>excludeEnd("ide");
  20374. messageSends: ["trimLeft:"]
  20375. }),
  20376. $globals.String);
  20377. $core.addMethod(
  20378. $core.method({
  20379. selector: "trimLeft:",
  20380. protocol: 'regular expressions',
  20381. fn: function (separators){
  20382. var self=this;
  20383. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20385. return $core.withContext(function($ctx1) {
  20386. //>>excludeEnd("ctx");
  20387. var $3,$2,$1;
  20388. $3=$recv("^[".__comma(separators)).__comma("]+");
  20389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20390. $ctx1.sendIdx[","]=1;
  20391. //>>excludeEnd("ctx");
  20392. $2=$recv($RegularExpression())._fromString_flag_($3,"g");
  20393. $1=self._replaceRegexp_with_($2,"");
  20394. return $1;
  20395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20396. }, function($ctx1) {$ctx1.fill(self,"trimLeft:",{separators:separators},$globals.String)});
  20397. //>>excludeEnd("ctx");
  20398. },
  20399. //>>excludeStart("ide", pragmas.excludeIdeData);
  20400. args: ["separators"],
  20401. source: "trimLeft: separators\x0a\x09^ self replaceRegexp: (RegularExpression fromString: '^[', separators, ']+' flag: 'g') with: ''",
  20402. referencedClasses: ["RegularExpression"],
  20403. //>>excludeEnd("ide");
  20404. messageSends: ["replaceRegexp:with:", "fromString:flag:", ","]
  20405. }),
  20406. $globals.String);
  20407. $core.addMethod(
  20408. $core.method({
  20409. selector: "trimRight",
  20410. protocol: 'regular expressions',
  20411. fn: function (){
  20412. var self=this;
  20413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20414. return $core.withContext(function($ctx1) {
  20415. //>>excludeEnd("ctx");
  20416. var $1;
  20417. $1=self._trimRight_("\x5cs");
  20418. return $1;
  20419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20420. }, function($ctx1) {$ctx1.fill(self,"trimRight",{},$globals.String)});
  20421. //>>excludeEnd("ctx");
  20422. },
  20423. //>>excludeStart("ide", pragmas.excludeIdeData);
  20424. args: [],
  20425. source: "trimRight\x0a\x09^ self trimRight: '\x5cs'",
  20426. referencedClasses: [],
  20427. //>>excludeEnd("ide");
  20428. messageSends: ["trimRight:"]
  20429. }),
  20430. $globals.String);
  20431. $core.addMethod(
  20432. $core.method({
  20433. selector: "trimRight:",
  20434. protocol: 'regular expressions',
  20435. fn: function (separators){
  20436. var self=this;
  20437. function $RegularExpression(){return $globals.RegularExpression||(typeof RegularExpression=="undefined"?nil:RegularExpression)}
  20438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20439. return $core.withContext(function($ctx1) {
  20440. //>>excludeEnd("ctx");
  20441. var $3,$2,$1;
  20442. $3=$recv("[".__comma(separators)).__comma("]+$");
  20443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20444. $ctx1.sendIdx[","]=1;
  20445. //>>excludeEnd("ctx");
  20446. $2=$recv($RegularExpression())._fromString_flag_($3,"g");
  20447. $1=self._replaceRegexp_with_($2,"");
  20448. return $1;
  20449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20450. }, function($ctx1) {$ctx1.fill(self,"trimRight:",{separators:separators},$globals.String)});
  20451. //>>excludeEnd("ctx");
  20452. },
  20453. //>>excludeStart("ide", pragmas.excludeIdeData);
  20454. args: ["separators"],
  20455. source: "trimRight: separators\x0a\x09^ self replaceRegexp: (RegularExpression fromString: '[', separators, ']+$' flag: 'g') with: ''",
  20456. referencedClasses: ["RegularExpression"],
  20457. //>>excludeEnd("ide");
  20458. messageSends: ["replaceRegexp:with:", "fromString:flag:", ","]
  20459. }),
  20460. $globals.String);
  20461. $core.addMethod(
  20462. $core.method({
  20463. selector: "unescaped",
  20464. protocol: 'converting',
  20465. fn: function (){
  20466. var self=this;
  20467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20468. return $core.withContext(function($ctx1) {
  20469. //>>excludeEnd("ctx");
  20470. return unescape(self);
  20471. return self;
  20472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20473. }, function($ctx1) {$ctx1.fill(self,"unescaped",{},$globals.String)});
  20474. //>>excludeEnd("ctx");
  20475. },
  20476. //>>excludeStart("ide", pragmas.excludeIdeData);
  20477. args: [],
  20478. source: "unescaped\x0a\x09<return unescape(self)>",
  20479. referencedClasses: [],
  20480. //>>excludeEnd("ide");
  20481. messageSends: []
  20482. }),
  20483. $globals.String);
  20484. $core.addMethod(
  20485. $core.method({
  20486. selector: "uriComponentDecoded",
  20487. protocol: 'converting',
  20488. fn: function (){
  20489. var self=this;
  20490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20491. return $core.withContext(function($ctx1) {
  20492. //>>excludeEnd("ctx");
  20493. return decodeURIComponent(self);
  20494. return self;
  20495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20496. }, function($ctx1) {$ctx1.fill(self,"uriComponentDecoded",{},$globals.String)});
  20497. //>>excludeEnd("ctx");
  20498. },
  20499. //>>excludeStart("ide", pragmas.excludeIdeData);
  20500. args: [],
  20501. source: "uriComponentDecoded\x0a\x09<return decodeURIComponent(self)>",
  20502. referencedClasses: [],
  20503. //>>excludeEnd("ide");
  20504. messageSends: []
  20505. }),
  20506. $globals.String);
  20507. $core.addMethod(
  20508. $core.method({
  20509. selector: "uriComponentEncoded",
  20510. protocol: 'converting',
  20511. fn: function (){
  20512. var self=this;
  20513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20514. return $core.withContext(function($ctx1) {
  20515. //>>excludeEnd("ctx");
  20516. return encodeURIComponent(self);
  20517. return self;
  20518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20519. }, function($ctx1) {$ctx1.fill(self,"uriComponentEncoded",{},$globals.String)});
  20520. //>>excludeEnd("ctx");
  20521. },
  20522. //>>excludeStart("ide", pragmas.excludeIdeData);
  20523. args: [],
  20524. source: "uriComponentEncoded\x0a\x09<return encodeURIComponent(self)>",
  20525. referencedClasses: [],
  20526. //>>excludeEnd("ide");
  20527. messageSends: []
  20528. }),
  20529. $globals.String);
  20530. $core.addMethod(
  20531. $core.method({
  20532. selector: "uriDecoded",
  20533. protocol: 'converting',
  20534. fn: function (){
  20535. var self=this;
  20536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20537. return $core.withContext(function($ctx1) {
  20538. //>>excludeEnd("ctx");
  20539. return decodeURI(self);
  20540. return self;
  20541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20542. }, function($ctx1) {$ctx1.fill(self,"uriDecoded",{},$globals.String)});
  20543. //>>excludeEnd("ctx");
  20544. },
  20545. //>>excludeStart("ide", pragmas.excludeIdeData);
  20546. args: [],
  20547. source: "uriDecoded\x0a\x09<return decodeURI(self)>",
  20548. referencedClasses: [],
  20549. //>>excludeEnd("ide");
  20550. messageSends: []
  20551. }),
  20552. $globals.String);
  20553. $core.addMethod(
  20554. $core.method({
  20555. selector: "uriEncoded",
  20556. protocol: 'converting',
  20557. fn: function (){
  20558. var self=this;
  20559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20560. return $core.withContext(function($ctx1) {
  20561. //>>excludeEnd("ctx");
  20562. return encodeURI(self);
  20563. return self;
  20564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20565. }, function($ctx1) {$ctx1.fill(self,"uriEncoded",{},$globals.String)});
  20566. //>>excludeEnd("ctx");
  20567. },
  20568. //>>excludeStart("ide", pragmas.excludeIdeData);
  20569. args: [],
  20570. source: "uriEncoded\x0a\x09<return encodeURI(self)>",
  20571. referencedClasses: [],
  20572. //>>excludeEnd("ide");
  20573. messageSends: []
  20574. }),
  20575. $globals.String);
  20576. $core.addMethod(
  20577. $core.method({
  20578. selector: "value:",
  20579. protocol: 'evaluating',
  20580. fn: function (anObject){
  20581. var self=this;
  20582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20583. return $core.withContext(function($ctx1) {
  20584. //>>excludeEnd("ctx");
  20585. var $1;
  20586. $1=$recv(anObject)._perform_(self);
  20587. return $1;
  20588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20589. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.String)});
  20590. //>>excludeEnd("ctx");
  20591. },
  20592. //>>excludeStart("ide", pragmas.excludeIdeData);
  20593. args: ["anObject"],
  20594. source: "value: anObject \x0a\x09^ anObject perform: self",
  20595. referencedClasses: [],
  20596. //>>excludeEnd("ide");
  20597. messageSends: ["perform:"]
  20598. }),
  20599. $globals.String);
  20600. $core.addMethod(
  20601. $core.method({
  20602. selector: "cr",
  20603. protocol: 'accessing',
  20604. fn: function (){
  20605. var self=this;
  20606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20607. return $core.withContext(function($ctx1) {
  20608. //>>excludeEnd("ctx");
  20609. return '\r';
  20610. return self;
  20611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20612. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.String.klass)});
  20613. //>>excludeEnd("ctx");
  20614. },
  20615. //>>excludeStart("ide", pragmas.excludeIdeData);
  20616. args: [],
  20617. source: "cr\x0a\x09<return '\x5cr'>",
  20618. referencedClasses: [],
  20619. //>>excludeEnd("ide");
  20620. messageSends: []
  20621. }),
  20622. $globals.String.klass);
  20623. $core.addMethod(
  20624. $core.method({
  20625. selector: "crlf",
  20626. protocol: 'accessing',
  20627. fn: function (){
  20628. var self=this;
  20629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20630. return $core.withContext(function($ctx1) {
  20631. //>>excludeEnd("ctx");
  20632. return '\r\n';
  20633. return self;
  20634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20635. }, function($ctx1) {$ctx1.fill(self,"crlf",{},$globals.String.klass)});
  20636. //>>excludeEnd("ctx");
  20637. },
  20638. //>>excludeStart("ide", pragmas.excludeIdeData);
  20639. args: [],
  20640. source: "crlf\x0a\x09<return '\x5cr\x5cn'>",
  20641. referencedClasses: [],
  20642. //>>excludeEnd("ide");
  20643. messageSends: []
  20644. }),
  20645. $globals.String.klass);
  20646. $core.addMethod(
  20647. $core.method({
  20648. selector: "esc",
  20649. protocol: 'accessing',
  20650. fn: function (){
  20651. var self=this;
  20652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20653. return $core.withContext(function($ctx1) {
  20654. //>>excludeEnd("ctx");
  20655. var $1;
  20656. $1=self._fromCharCode_((27));
  20657. return $1;
  20658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20659. }, function($ctx1) {$ctx1.fill(self,"esc",{},$globals.String.klass)});
  20660. //>>excludeEnd("ctx");
  20661. },
  20662. //>>excludeStart("ide", pragmas.excludeIdeData);
  20663. args: [],
  20664. source: "esc\x0a\x09^ self fromCharCode: 27",
  20665. referencedClasses: [],
  20666. //>>excludeEnd("ide");
  20667. messageSends: ["fromCharCode:"]
  20668. }),
  20669. $globals.String.klass);
  20670. $core.addMethod(
  20671. $core.method({
  20672. selector: "fromCharCode:",
  20673. protocol: 'instance creation',
  20674. fn: function (anInteger){
  20675. var self=this;
  20676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20677. return $core.withContext(function($ctx1) {
  20678. //>>excludeEnd("ctx");
  20679. return String.fromCharCode(anInteger);
  20680. return self;
  20681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20682. }, function($ctx1) {$ctx1.fill(self,"fromCharCode:",{anInteger:anInteger},$globals.String.klass)});
  20683. //>>excludeEnd("ctx");
  20684. },
  20685. //>>excludeStart("ide", pragmas.excludeIdeData);
  20686. args: ["anInteger"],
  20687. source: "fromCharCode: anInteger\x0a\x09<return String.fromCharCode(anInteger)>",
  20688. referencedClasses: [],
  20689. //>>excludeEnd("ide");
  20690. messageSends: []
  20691. }),
  20692. $globals.String.klass);
  20693. $core.addMethod(
  20694. $core.method({
  20695. selector: "fromString:",
  20696. protocol: 'instance creation',
  20697. fn: function (aString){
  20698. var self=this;
  20699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20700. return $core.withContext(function($ctx1) {
  20701. //>>excludeEnd("ctx");
  20702. return String(aString);
  20703. return self;
  20704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20705. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.String.klass)});
  20706. //>>excludeEnd("ctx");
  20707. },
  20708. //>>excludeStart("ide", pragmas.excludeIdeData);
  20709. args: ["aString"],
  20710. source: "fromString: aString\x0a\x09\x09<return String(aString)>",
  20711. referencedClasses: [],
  20712. //>>excludeEnd("ide");
  20713. messageSends: []
  20714. }),
  20715. $globals.String.klass);
  20716. $core.addMethod(
  20717. $core.method({
  20718. selector: "lf",
  20719. protocol: 'accessing',
  20720. fn: function (){
  20721. var self=this;
  20722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20723. return $core.withContext(function($ctx1) {
  20724. //>>excludeEnd("ctx");
  20725. return '\n';
  20726. return self;
  20727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20728. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.String.klass)});
  20729. //>>excludeEnd("ctx");
  20730. },
  20731. //>>excludeStart("ide", pragmas.excludeIdeData);
  20732. args: [],
  20733. source: "lf\x0a\x09<return '\x5cn'>",
  20734. referencedClasses: [],
  20735. //>>excludeEnd("ide");
  20736. messageSends: []
  20737. }),
  20738. $globals.String.klass);
  20739. $core.addMethod(
  20740. $core.method({
  20741. selector: "random",
  20742. protocol: 'random',
  20743. fn: function (){
  20744. var self=this;
  20745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20746. return $core.withContext(function($ctx1) {
  20747. //>>excludeEnd("ctx");
  20748. return (Math.random()*(22/32)+(10/32)).toString(32).slice(2);;
  20749. return self;
  20750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20751. }, function($ctx1) {$ctx1.fill(self,"random",{},$globals.String.klass)});
  20752. //>>excludeEnd("ctx");
  20753. },
  20754. //>>excludeStart("ide", pragmas.excludeIdeData);
  20755. args: [],
  20756. source: "random\x0a\x09\x22Returns random alphanumeric string beginning with letter\x22\x0a\x09<return (Math.random()*(22/32)+(10/32)).toString(32).slice(2);>",
  20757. referencedClasses: [],
  20758. //>>excludeEnd("ide");
  20759. messageSends: []
  20760. }),
  20761. $globals.String.klass);
  20762. $core.addMethod(
  20763. $core.method({
  20764. selector: "randomNotIn:",
  20765. protocol: 'random',
  20766. fn: function (aString){
  20767. var self=this;
  20768. var result;
  20769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20770. return $core.withContext(function($ctx1) {
  20771. //>>excludeEnd("ctx");
  20772. var $1;
  20773. $recv((function(){
  20774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20775. return $core.withContext(function($ctx2) {
  20776. //>>excludeEnd("ctx");
  20777. result=self._random();
  20778. result;
  20779. return $recv(aString)._includesSubString_(result);
  20780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20781. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  20782. //>>excludeEnd("ctx");
  20783. }))._whileTrue();
  20784. $1=result;
  20785. return $1;
  20786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20787. }, function($ctx1) {$ctx1.fill(self,"randomNotIn:",{aString:aString,result:result},$globals.String.klass)});
  20788. //>>excludeEnd("ctx");
  20789. },
  20790. //>>excludeStart("ide", pragmas.excludeIdeData);
  20791. args: ["aString"],
  20792. source: "randomNotIn: aString\x0a\x09| result |\x0a\x09[ result := self random. aString includesSubString: result ] whileTrue.\x0a\x09^ result",
  20793. referencedClasses: [],
  20794. //>>excludeEnd("ide");
  20795. messageSends: ["whileTrue", "random", "includesSubString:"]
  20796. }),
  20797. $globals.String.klass);
  20798. $core.addMethod(
  20799. $core.method({
  20800. selector: "space",
  20801. protocol: 'accessing',
  20802. fn: function (){
  20803. var self=this;
  20804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20805. return $core.withContext(function($ctx1) {
  20806. //>>excludeEnd("ctx");
  20807. return ' ';
  20808. return self;
  20809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20810. }, function($ctx1) {$ctx1.fill(self,"space",{},$globals.String.klass)});
  20811. //>>excludeEnd("ctx");
  20812. },
  20813. //>>excludeStart("ide", pragmas.excludeIdeData);
  20814. args: [],
  20815. source: "space\x0a\x09<return ' '>",
  20816. referencedClasses: [],
  20817. //>>excludeEnd("ide");
  20818. messageSends: []
  20819. }),
  20820. $globals.String.klass);
  20821. $core.addMethod(
  20822. $core.method({
  20823. selector: "streamClass",
  20824. protocol: 'accessing',
  20825. fn: function (){
  20826. var self=this;
  20827. function $StringStream(){return $globals.StringStream||(typeof StringStream=="undefined"?nil:StringStream)}
  20828. return $StringStream();
  20829. },
  20830. //>>excludeStart("ide", pragmas.excludeIdeData);
  20831. args: [],
  20832. source: "streamClass\x0a\x09\x09^ StringStream",
  20833. referencedClasses: ["StringStream"],
  20834. //>>excludeEnd("ide");
  20835. messageSends: []
  20836. }),
  20837. $globals.String.klass);
  20838. $core.addMethod(
  20839. $core.method({
  20840. selector: "tab",
  20841. protocol: 'accessing',
  20842. fn: function (){
  20843. var self=this;
  20844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20845. return $core.withContext(function($ctx1) {
  20846. //>>excludeEnd("ctx");
  20847. return '\t';
  20848. return self;
  20849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20850. }, function($ctx1) {$ctx1.fill(self,"tab",{},$globals.String.klass)});
  20851. //>>excludeEnd("ctx");
  20852. },
  20853. //>>excludeStart("ide", pragmas.excludeIdeData);
  20854. args: [],
  20855. source: "tab\x0a\x09<return '\x5ct'>",
  20856. referencedClasses: [],
  20857. //>>excludeEnd("ide");
  20858. messageSends: []
  20859. }),
  20860. $globals.String.klass);
  20861. $core.addMethod(
  20862. $core.method({
  20863. selector: "value:",
  20864. protocol: 'instance creation',
  20865. fn: function (aUTFCharCode){
  20866. var self=this;
  20867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20868. return $core.withContext(function($ctx1) {
  20869. //>>excludeEnd("ctx");
  20870. return String.fromCharCode(aUTFCharCode);;
  20871. return self;
  20872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20873. }, function($ctx1) {$ctx1.fill(self,"value:",{aUTFCharCode:aUTFCharCode},$globals.String.klass)});
  20874. //>>excludeEnd("ctx");
  20875. },
  20876. //>>excludeStart("ide", pragmas.excludeIdeData);
  20877. args: ["aUTFCharCode"],
  20878. source: "value: aUTFCharCode\x0a\x0a\x09<return String.fromCharCode(aUTFCharCode);>",
  20879. referencedClasses: [],
  20880. //>>excludeEnd("ide");
  20881. messageSends: []
  20882. }),
  20883. $globals.String.klass);
  20884. $core.addClass('Set', $globals.Collection, ['defaultBucket', 'slowBucketStores', 'fastBuckets', 'size'], 'Kernel-Collections');
  20885. //>>excludeStart("ide", pragmas.excludeIdeData);
  20886. $globals.Set.comment="I represent an unordered set of objects without duplicates.\x0a\x0a## Implementation notes\x0a\x0aI put elements into different stores based on their type.\x0aThe goal is to store some elements into native JS object property names to be fast.\x0a\x0aIf an unboxed element has typeof 'string', 'boolean' or 'number', or an element is nil, null or undefined,\x0aI store it as a property name in an empty (== Object.create(null)) JS object, different for each type\x0a(for simplicity, nil/null/undefined is treated as one and included with the two booleans).\x0a\x0aIf element happen to be an object, I try to store them in `ArrayBucketStore`. I have two of them by default,\x0aone hashed using the Smalltalk class name, the other one using the JS constructor name. It is possible to have more or less\x0ainstances of `ArrayBucketStores`, see `#initializeSlowBucketStores`.\x0a\x0aAs a last resort, if none of the `ArrayBucketStore` instances can find a suitable bucket, the `defaultBucket` is used,\x0awhich is an `Array`.";
  20887. //>>excludeEnd("ide");
  20888. $core.addMethod(
  20889. $core.method({
  20890. selector: "=",
  20891. protocol: 'comparing',
  20892. fn: function (aCollection){
  20893. var self=this;
  20894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20895. return $core.withContext(function($ctx1) {
  20896. //>>excludeEnd("ctx");
  20897. var $2,$1,$4,$3,$5;
  20898. var $early={};
  20899. try {
  20900. $2=self._class();
  20901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20902. $ctx1.sendIdx["class"]=1;
  20903. //>>excludeEnd("ctx");
  20904. $1=$recv($2).__eq($recv(aCollection)._class());
  20905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20906. $ctx1.sendIdx["="]=1;
  20907. //>>excludeEnd("ctx");
  20908. if(!$core.assert($1)){
  20909. return false;
  20910. };
  20911. $4=self._size();
  20912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20913. $ctx1.sendIdx["size"]=1;
  20914. //>>excludeEnd("ctx");
  20915. $3=$recv($4).__eq($recv(aCollection)._size());
  20916. if(!$core.assert($3)){
  20917. return false;
  20918. };
  20919. self._do_((function(each){
  20920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20921. return $core.withContext(function($ctx2) {
  20922. //>>excludeEnd("ctx");
  20923. $5=$recv(aCollection)._includes_(each);
  20924. if(!$core.assert($5)){
  20925. throw $early=[false];
  20926. };
  20927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20928. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  20929. //>>excludeEnd("ctx");
  20930. }));
  20931. return true;
  20932. }
  20933. catch(e) {if(e===$early)return e[0]; throw e}
  20934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20935. }, function($ctx1) {$ctx1.fill(self,"=",{aCollection:aCollection},$globals.Set)});
  20936. //>>excludeEnd("ctx");
  20937. },
  20938. //>>excludeStart("ide", pragmas.excludeIdeData);
  20939. args: ["aCollection"],
  20940. source: "= aCollection\x0a\x09self class = aCollection class ifFalse: [ ^ false ].\x0a\x09self size = aCollection size ifFalse: [ ^ false ].\x0a\x09self do: [ :each | (aCollection includes: each) ifFalse: [ ^ false ] ].\x0a\x09^ true",
  20941. referencedClasses: [],
  20942. //>>excludeEnd("ide");
  20943. messageSends: ["ifFalse:", "=", "class", "size", "do:", "includes:"]
  20944. }),
  20945. $globals.Set);
  20946. $core.addMethod(
  20947. $core.method({
  20948. selector: "add:",
  20949. protocol: 'adding/removing',
  20950. fn: function (anObject){
  20951. var self=this;
  20952. var bucket;
  20953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20954. return $core.withContext(function($ctx1) {
  20955. //>>excludeEnd("ctx");
  20956. var $2,$1,$receiver;
  20957. bucket=self._bucketsOfElement_(anObject);
  20958. $2=$recv(bucket)._second();
  20959. if(($receiver = $2) == null || $receiver.isNil){
  20960. var object,slowBucket;
  20961. object=$recv(bucket)._first();
  20962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20963. $ctx1.sendIdx["first"]=1;
  20964. //>>excludeEnd("ctx");
  20965. object;
  20966. slowBucket=$recv(bucket)._third();
  20967. slowBucket;
  20968. $recv(slowBucket)._indexOf_ifAbsent_(object,(function(){
  20969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20970. return $core.withContext(function($ctx2) {
  20971. //>>excludeEnd("ctx");
  20972. $recv(slowBucket)._add_(object);
  20973. self["@size"]=$recv(self["@size"]).__plus((1));
  20974. return self["@size"];
  20975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20976. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  20977. //>>excludeEnd("ctx");
  20978. }));
  20979. $1=object;
  20980. } else {
  20981. var primitiveBucket;
  20982. primitiveBucket=$receiver;
  20983. $1=self._add_in_($recv(bucket)._first(),primitiveBucket);
  20984. };
  20985. return $1;
  20986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  20987. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject,bucket:bucket},$globals.Set)});
  20988. //>>excludeEnd("ctx");
  20989. },
  20990. //>>excludeStart("ide", pragmas.excludeIdeData);
  20991. args: ["anObject"],
  20992. source: "add: anObject\x0a\x09| bucket |\x0a\x09bucket := self bucketsOfElement: anObject.\x0a\x09^ bucket second\x0a\x09\x09ifNil: [\x0a\x09\x09\x09| object slowBucket |\x0a\x09\x09\x09object := bucket first.\x0a\x09\x09\x09slowBucket := bucket third.\x0a\x09\x09\x09slowBucket \x0a\x09\x09\x09\x09indexOf: object \x0a\x09\x09\x09\x09ifAbsent: [ \x0a\x09\x09\x09\x09\x09slowBucket add: object. \x0a\x09\x09\x09\x09\x09size := size + 1 ].\x0a\x09\x09\x09object ]\x0a\x09\x09ifNotNil: [ :primitiveBucket | \x0a\x09\x09\x09self \x0a\x09\x09\x09\x09add: bucket first \x0a\x09\x09\x09\x09in: primitiveBucket ]",
  20993. referencedClasses: [],
  20994. //>>excludeEnd("ide");
  20995. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "first", "third", "indexOf:ifAbsent:", "add:", "+", "add:in:"]
  20996. }),
  20997. $globals.Set);
  20998. $core.addMethod(
  20999. $core.method({
  21000. selector: "add:in:",
  21001. protocol: 'private',
  21002. fn: function (anObject,anotherObject){
  21003. var self=this;
  21004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21005. return $core.withContext(function($ctx1) {
  21006. //>>excludeEnd("ctx");
  21007. if (anObject in anotherObject.store) { return false; }
  21008. self['@size']++;
  21009. return anotherObject.store[anObject] = true;
  21010. ;
  21011. return self;
  21012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21013. }, function($ctx1) {$ctx1.fill(self,"add:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21014. //>>excludeEnd("ctx");
  21015. },
  21016. //>>excludeStart("ide", pragmas.excludeIdeData);
  21017. args: ["anObject", "anotherObject"],
  21018. source: "add: anObject in: anotherObject\x0a\x09<\x0a\x09\x09if (anObject in anotherObject.store) { return false; }\x0a\x09\x09self['@size']++;\x0a\x09\x09return anotherObject.store[anObject] = true;\x0a\x09>",
  21019. referencedClasses: [],
  21020. //>>excludeEnd("ide");
  21021. messageSends: []
  21022. }),
  21023. $globals.Set);
  21024. $core.addMethod(
  21025. $core.method({
  21026. selector: "bucketsOfElement:",
  21027. protocol: 'private',
  21028. fn: function (anObject){
  21029. var self=this;
  21030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21031. return $core.withContext(function($ctx1) {
  21032. //>>excludeEnd("ctx");
  21033. var type, bucket, prim = anObject == null ? (anObject = nil) : anObject.valueOf();
  21034. if ((type = typeof prim) === "object") {
  21035. if (anObject !== nil) {
  21036. bucket = null;
  21037. self['@slowBucketStores'].some(function (store) {
  21038. return bucket = store._bucketOfElement_(anObject);
  21039. });
  21040. return [ anObject, null, bucket || self['@defaultBucket'] ];
  21041. }
  21042. // include nil to well-known objects under 'boolean' fastBucket
  21043. prim = null;
  21044. type = 'boolean';
  21045. }
  21046. return [ prim, self['@fastBuckets'][type] ];
  21047. ;
  21048. return self;
  21049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21050. }, function($ctx1) {$ctx1.fill(self,"bucketsOfElement:",{anObject:anObject},$globals.Set)});
  21051. //>>excludeEnd("ctx");
  21052. },
  21053. //>>excludeStart("ide", pragmas.excludeIdeData);
  21054. args: ["anObject"],
  21055. source: "bucketsOfElement: anObject\x0a\x09\x22Find the appropriate bucket for `anObject`.\x0a\x09For optimization purposes, directly answer an array with: \x0a\x09- the object to be store\x0a\x09- the primitive bucket\x0a\x09- the slow bucket\x22\x0a\x09\x0a\x09<\x0a\x09\x09var type, bucket, prim = anObject == null ? (anObject = nil) : anObject.valueOf();\x0a\x09\x09if ((type = typeof prim) === \x22object\x22) {\x0a\x09\x09\x09if (anObject !== nil) {\x0a\x09\x09\x09\x09bucket = null;\x0a\x09\x09\x09\x09self['@slowBucketStores'].some(function (store) {\x0a\x09\x09\x09\x09\x09return bucket = store._bucketOfElement_(anObject);\x0a\x09\x09\x09\x09});\x0a\x09\x09\x09\x09return [ anObject, null, bucket || self['@defaultBucket'] ];\x0a\x09\x09\x09}\x0a\x09\x09\x09\x0a\x09\x09\x09// include nil to well-known objects under 'boolean' fastBucket\x0a\x09\x09\x09prim = null;\x0a\x09\x09\x09type = 'boolean';\x0a\x09\x09}\x0a\x09\x09return [ prim, self['@fastBuckets'][type] ];\x0a\x09>",
  21056. referencedClasses: [],
  21057. //>>excludeEnd("ide");
  21058. messageSends: []
  21059. }),
  21060. $globals.Set);
  21061. $core.addMethod(
  21062. $core.method({
  21063. selector: "classNameOf:",
  21064. protocol: 'private',
  21065. fn: function (anObject){
  21066. var self=this;
  21067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21068. return $core.withContext(function($ctx1) {
  21069. //>>excludeEnd("ctx");
  21070. return anObject.klass && anObject.klass.className;
  21071. return self;
  21072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21073. }, function($ctx1) {$ctx1.fill(self,"classNameOf:",{anObject:anObject},$globals.Set)});
  21074. //>>excludeEnd("ctx");
  21075. },
  21076. //>>excludeStart("ide", pragmas.excludeIdeData);
  21077. args: ["anObject"],
  21078. source: "classNameOf: anObject\x0a\x09\x22Answer the class name of `anObject`, or `undefined` \x0a\x09if `anObject` is not an Smalltalk object\x22\x0a\x09\x0a\x09<return anObject.klass && anObject.klass.className>",
  21079. referencedClasses: [],
  21080. //>>excludeEnd("ide");
  21081. messageSends: []
  21082. }),
  21083. $globals.Set);
  21084. $core.addMethod(
  21085. $core.method({
  21086. selector: "collect:",
  21087. protocol: 'enumerating',
  21088. fn: function (aBlock){
  21089. var self=this;
  21090. var collection;
  21091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21092. return $core.withContext(function($ctx1) {
  21093. //>>excludeEnd("ctx");
  21094. var $1;
  21095. collection=$recv(self._class())._new();
  21096. self._do_((function(each){
  21097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21098. return $core.withContext(function($ctx2) {
  21099. //>>excludeEnd("ctx");
  21100. return $recv(collection)._add_($recv(aBlock)._value_(each));
  21101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21102. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21103. //>>excludeEnd("ctx");
  21104. }));
  21105. $1=collection;
  21106. return $1;
  21107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21108. }, function($ctx1) {$ctx1.fill(self,"collect:",{aBlock:aBlock,collection:collection},$globals.Set)});
  21109. //>>excludeEnd("ctx");
  21110. },
  21111. //>>excludeStart("ide", pragmas.excludeIdeData);
  21112. args: ["aBlock"],
  21113. source: "collect: aBlock\x0a\x09| collection |\x0a\x09collection := self class new.\x0a\x09self do: [ :each | collection add: (aBlock value: each) ].\x0a\x09^ collection",
  21114. referencedClasses: [],
  21115. //>>excludeEnd("ide");
  21116. messageSends: ["new", "class", "do:", "add:", "value:"]
  21117. }),
  21118. $globals.Set);
  21119. $core.addMethod(
  21120. $core.method({
  21121. selector: "detect:ifNone:",
  21122. protocol: 'enumerating',
  21123. fn: function (aBlock,anotherBlock){
  21124. var self=this;
  21125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21126. return $core.withContext(function($ctx1) {
  21127. //>>excludeEnd("ctx");
  21128. var $1,$2;
  21129. var $early={};
  21130. try {
  21131. self._do_((function(each){
  21132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21133. return $core.withContext(function($ctx2) {
  21134. //>>excludeEnd("ctx");
  21135. $1=$recv(aBlock)._value_(each);
  21136. if($core.assert($1)){
  21137. throw $early=[each];
  21138. };
  21139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21140. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21141. //>>excludeEnd("ctx");
  21142. }));
  21143. $2=$recv(anotherBlock)._value();
  21144. return $2;
  21145. }
  21146. catch(e) {if(e===$early)return e[0]; throw e}
  21147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21148. }, function($ctx1) {$ctx1.fill(self,"detect:ifNone:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.Set)});
  21149. //>>excludeEnd("ctx");
  21150. },
  21151. //>>excludeStart("ide", pragmas.excludeIdeData);
  21152. args: ["aBlock", "anotherBlock"],
  21153. source: "detect: aBlock ifNone: anotherBlock\x0a\x09self do: [ :each | (aBlock value: each) ifTrue: [ ^each ] ].\x0a\x09^ anotherBlock value",
  21154. referencedClasses: [],
  21155. //>>excludeEnd("ide");
  21156. messageSends: ["do:", "ifTrue:", "value:", "value"]
  21157. }),
  21158. $globals.Set);
  21159. $core.addMethod(
  21160. $core.method({
  21161. selector: "do:",
  21162. protocol: 'enumerating',
  21163. fn: function (aBlock){
  21164. var self=this;
  21165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21166. return $core.withContext(function($ctx1) {
  21167. //>>excludeEnd("ctx");
  21168. var el, keys, i;
  21169. el = self['@fastBuckets'];
  21170. keys = Object.keys(el);
  21171. for (i = 0; i < keys.length; ++i) {
  21172. var fastBucket = el[keys[i]], fn = fastBucket.fn, store = Object.keys(fastBucket.store);
  21173. if (fn) { for (var j = 0; j < store.length; ++j) { aBlock._value_(fn(store[j])); } }
  21174. else { store._do_(aBlock); }
  21175. }
  21176. el = self['@slowBucketStores'];
  21177. for (i = 0; i < el.length; ++i) { el[i]._do_(aBlock); }
  21178. self['@defaultBucket']._do_(aBlock);
  21179. ;
  21180. return self;
  21181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21182. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Set)});
  21183. //>>excludeEnd("ctx");
  21184. },
  21185. //>>excludeStart("ide", pragmas.excludeIdeData);
  21186. args: ["aBlock"],
  21187. source: "do: aBlock\x0a\x09<\x0a\x09\x09var el, keys, i;\x0a\x09\x09el = self['@fastBuckets'];\x0a\x09\x09keys = Object.keys(el);\x0a\x09\x09for (i = 0; i < keys.length; ++i) {\x0a\x09\x09\x09var fastBucket = el[keys[i]], fn = fastBucket.fn, store = Object.keys(fastBucket.store);\x0a\x09\x09\x09if (fn) { for (var j = 0; j < store.length; ++j) { aBlock._value_(fn(store[j])); } }\x0a\x09\x09\x09else { store._do_(aBlock); }\x0a\x09\x09}\x0a\x09\x09el = self['@slowBucketStores'];\x0a\x09\x09for (i = 0; i < el.length; ++i) { el[i]._do_(aBlock); }\x0a\x09\x09self['@defaultBucket']._do_(aBlock);\x0a\x09>",
  21188. referencedClasses: [],
  21189. //>>excludeEnd("ide");
  21190. messageSends: []
  21191. }),
  21192. $globals.Set);
  21193. $core.addMethod(
  21194. $core.method({
  21195. selector: "includes:",
  21196. protocol: 'testing',
  21197. fn: function (anObject){
  21198. var self=this;
  21199. var bucket;
  21200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21201. return $core.withContext(function($ctx1) {
  21202. //>>excludeEnd("ctx");
  21203. var $2,$3,$4,$1,$receiver;
  21204. bucket=self._bucketsOfElement_(anObject);
  21205. $2=$recv(bucket)._second();
  21206. if(($receiver = $2) == null || $receiver.isNil){
  21207. $3=$recv(bucket)._third();
  21208. $4=$recv(bucket)._first();
  21209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21210. $ctx1.sendIdx["first"]=1;
  21211. //>>excludeEnd("ctx");
  21212. $1=$recv($3)._includes_($4);
  21213. } else {
  21214. var primitiveBucket;
  21215. primitiveBucket=$receiver;
  21216. $1=self._includes_in_($recv(bucket)._first(),primitiveBucket);
  21217. };
  21218. return $1;
  21219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21220. }, function($ctx1) {$ctx1.fill(self,"includes:",{anObject:anObject,bucket:bucket},$globals.Set)});
  21221. //>>excludeEnd("ctx");
  21222. },
  21223. //>>excludeStart("ide", pragmas.excludeIdeData);
  21224. args: ["anObject"],
  21225. source: "includes: anObject\x0a\x09| bucket |\x0a\x09bucket := self bucketsOfElement: anObject.\x0a\x09^ bucket second\x0a\x09\x09ifNil: [ bucket third includes: bucket first ]\x0a\x09\x09ifNotNil: [ :primitiveBucket | self includes: bucket first in: primitiveBucket ]",
  21226. referencedClasses: [],
  21227. //>>excludeEnd("ide");
  21228. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "includes:", "third", "first", "includes:in:"]
  21229. }),
  21230. $globals.Set);
  21231. $core.addMethod(
  21232. $core.method({
  21233. selector: "includes:in:",
  21234. protocol: 'private',
  21235. fn: function (anObject,anotherObject){
  21236. var self=this;
  21237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21238. return $core.withContext(function($ctx1) {
  21239. //>>excludeEnd("ctx");
  21240. return anObject in anotherObject.store;
  21241. return self;
  21242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21243. }, function($ctx1) {$ctx1.fill(self,"includes:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21244. //>>excludeEnd("ctx");
  21245. },
  21246. //>>excludeStart("ide", pragmas.excludeIdeData);
  21247. args: ["anObject", "anotherObject"],
  21248. source: "includes: anObject in: anotherObject\x0a\x09<return anObject in anotherObject.store>",
  21249. referencedClasses: [],
  21250. //>>excludeEnd("ide");
  21251. messageSends: []
  21252. }),
  21253. $globals.Set);
  21254. $core.addMethod(
  21255. $core.method({
  21256. selector: "initialize",
  21257. protocol: 'initialization',
  21258. fn: function (){
  21259. var self=this;
  21260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21261. return $core.withContext(function($ctx1) {
  21262. //>>excludeEnd("ctx");
  21263. var $1;
  21264. (
  21265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21266. $ctx1.supercall = true,
  21267. //>>excludeEnd("ctx");
  21268. $globals.Set.superclass.fn.prototype._initialize.apply($recv(self), []));
  21269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21270. $ctx1.supercall = false;
  21271. //>>excludeEnd("ctx");;
  21272. self["@defaultBucket"]=[];
  21273. self._initializeSlowBucketStores();
  21274. $1=self._removeAll();
  21275. return self;
  21276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21277. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Set)});
  21278. //>>excludeEnd("ctx");
  21279. },
  21280. //>>excludeStart("ide", pragmas.excludeIdeData);
  21281. args: [],
  21282. source: "initialize\x0a\x09super initialize.\x0a\x09\x0a\x09defaultBucket := #().\x0a\x09self\x0a\x09\x09initializeSlowBucketStores;\x0a\x09\x09removeAll",
  21283. referencedClasses: [],
  21284. //>>excludeEnd("ide");
  21285. messageSends: ["initialize", "initializeSlowBucketStores", "removeAll"]
  21286. }),
  21287. $globals.Set);
  21288. $core.addMethod(
  21289. $core.method({
  21290. selector: "initializeSlowBucketStores",
  21291. protocol: 'initialization',
  21292. fn: function (){
  21293. var self=this;
  21294. function $ArrayBucketStore(){return $globals.ArrayBucketStore||(typeof ArrayBucketStore=="undefined"?nil:ArrayBucketStore)}
  21295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21296. return $core.withContext(function($ctx1) {
  21297. //>>excludeEnd("ctx");
  21298. var $1;
  21299. $1=$recv($ArrayBucketStore())._hashBlock_((function(x){
  21300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21301. return $core.withContext(function($ctx2) {
  21302. //>>excludeEnd("ctx");
  21303. return self._classNameOf_(x);
  21304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21305. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  21306. //>>excludeEnd("ctx");
  21307. }));
  21308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21309. $ctx1.sendIdx["hashBlock:"]=1;
  21310. //>>excludeEnd("ctx");
  21311. self["@slowBucketStores"]=[$1,$recv($ArrayBucketStore())._hashBlock_((function(x){
  21312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21313. return $core.withContext(function($ctx2) {
  21314. //>>excludeEnd("ctx");
  21315. return self._jsConstructorNameOf_(x);
  21316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21317. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  21318. //>>excludeEnd("ctx");
  21319. }))];
  21320. return self;
  21321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21322. }, function($ctx1) {$ctx1.fill(self,"initializeSlowBucketStores",{},$globals.Set)});
  21323. //>>excludeEnd("ctx");
  21324. },
  21325. //>>excludeStart("ide", pragmas.excludeIdeData);
  21326. args: [],
  21327. source: "initializeSlowBucketStores\x0a\x09slowBucketStores := {\x0a\x09\x09ArrayBucketStore hashBlock: [ :x | self classNameOf: x ].\x0a\x09\x09ArrayBucketStore hashBlock: [ :x | self jsConstructorNameOf: x ]\x0a\x09}",
  21328. referencedClasses: ["ArrayBucketStore"],
  21329. //>>excludeEnd("ide");
  21330. messageSends: ["hashBlock:", "classNameOf:", "jsConstructorNameOf:"]
  21331. }),
  21332. $globals.Set);
  21333. $core.addMethod(
  21334. $core.method({
  21335. selector: "jsConstructorNameOf:",
  21336. protocol: 'private',
  21337. fn: function (anObject){
  21338. var self=this;
  21339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21340. return $core.withContext(function($ctx1) {
  21341. //>>excludeEnd("ctx");
  21342. return anObject.constructor && anObject.constructor.name;
  21343. return self;
  21344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21345. }, function($ctx1) {$ctx1.fill(self,"jsConstructorNameOf:",{anObject:anObject},$globals.Set)});
  21346. //>>excludeEnd("ctx");
  21347. },
  21348. //>>excludeStart("ide", pragmas.excludeIdeData);
  21349. args: ["anObject"],
  21350. source: "jsConstructorNameOf: anObject\x0a\x09<return anObject.constructor && anObject.constructor.name>",
  21351. referencedClasses: [],
  21352. //>>excludeEnd("ide");
  21353. messageSends: []
  21354. }),
  21355. $globals.Set);
  21356. $core.addMethod(
  21357. $core.method({
  21358. selector: "printOn:",
  21359. protocol: 'printing',
  21360. fn: function (aStream){
  21361. var self=this;
  21362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21363. return $core.withContext(function($ctx1) {
  21364. //>>excludeEnd("ctx");
  21365. (
  21366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21367. $ctx1.supercall = true,
  21368. //>>excludeEnd("ctx");
  21369. $globals.Set.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  21370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21371. $ctx1.supercall = false;
  21372. //>>excludeEnd("ctx");;
  21373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21374. $ctx1.sendIdx["printOn:"]=1;
  21375. //>>excludeEnd("ctx");
  21376. $recv(aStream)._nextPutAll_(" (");
  21377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21378. $ctx1.sendIdx["nextPutAll:"]=1;
  21379. //>>excludeEnd("ctx");
  21380. self._do_separatedBy_((function(each){
  21381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21382. return $core.withContext(function($ctx2) {
  21383. //>>excludeEnd("ctx");
  21384. return $recv(each)._printOn_(aStream);
  21385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21386. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21387. //>>excludeEnd("ctx");
  21388. }),(function(){
  21389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21390. return $core.withContext(function($ctx2) {
  21391. //>>excludeEnd("ctx");
  21392. return $recv(aStream)._nextPutAll_(" ");
  21393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21394. $ctx2.sendIdx["nextPutAll:"]=2;
  21395. //>>excludeEnd("ctx");
  21396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21397. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  21398. //>>excludeEnd("ctx");
  21399. }));
  21400. $recv(aStream)._nextPutAll_(")");
  21401. return self;
  21402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21403. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Set)});
  21404. //>>excludeEnd("ctx");
  21405. },
  21406. //>>excludeStart("ide", pragmas.excludeIdeData);
  21407. args: ["aStream"],
  21408. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09\x0a\x09aStream nextPutAll: ' ('.\x0a\x09self \x0a\x09\x09do: [ :each | each printOn: aStream ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09aStream nextPutAll: ')'",
  21409. referencedClasses: [],
  21410. //>>excludeEnd("ide");
  21411. messageSends: ["printOn:", "nextPutAll:", "do:separatedBy:"]
  21412. }),
  21413. $globals.Set);
  21414. $core.addMethod(
  21415. $core.method({
  21416. selector: "remove:ifAbsent:",
  21417. protocol: 'adding/removing',
  21418. fn: function (anObject,aBlock){
  21419. var self=this;
  21420. var bucket;
  21421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21422. return $core.withContext(function($ctx1) {
  21423. //>>excludeEnd("ctx");
  21424. var $2,$3,$4,$5,$1,$receiver;
  21425. var $early={};
  21426. try {
  21427. bucket=self._bucketsOfElement_(anObject);
  21428. $2=$recv(bucket)._second();
  21429. if(($receiver = $2) == null || $receiver.isNil){
  21430. $3=$recv(bucket)._third();
  21431. $4=$recv(bucket)._first();
  21432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21433. $ctx1.sendIdx["first"]=1;
  21434. //>>excludeEnd("ctx");
  21435. $recv($3)._remove_ifAbsent_($4,(function(){
  21436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21437. return $core.withContext(function($ctx2) {
  21438. //>>excludeEnd("ctx");
  21439. $5=$recv(aBlock)._value();
  21440. throw $early=[$5];
  21441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21442. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  21443. //>>excludeEnd("ctx");
  21444. }));
  21445. self["@size"]=$recv(self["@size"]).__minus((1));
  21446. $1=self["@size"];
  21447. } else {
  21448. var primitiveBucket;
  21449. primitiveBucket=$receiver;
  21450. $1=self._remove_in_($recv(bucket)._first(),primitiveBucket);
  21451. };
  21452. return $1;
  21453. }
  21454. catch(e) {if(e===$early)return e[0]; throw e}
  21455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21456. }, function($ctx1) {$ctx1.fill(self,"remove:ifAbsent:",{anObject:anObject,aBlock:aBlock,bucket:bucket},$globals.Set)});
  21457. //>>excludeEnd("ctx");
  21458. },
  21459. //>>excludeStart("ide", pragmas.excludeIdeData);
  21460. args: ["anObject", "aBlock"],
  21461. source: "remove: anObject ifAbsent: aBlock\x0a\x09| bucket |\x0a\x09bucket := self bucketsOfElement: anObject.\x0a\x09^ bucket second\x0a\x09\x09ifNil: [ bucket third remove: bucket first ifAbsent: [ ^aBlock value ]. size := size - 1 ]\x0a\x09\x09ifNotNil: [ :primitiveBucket | self remove: bucket first in: primitiveBucket ]",
  21462. referencedClasses: [],
  21463. //>>excludeEnd("ide");
  21464. messageSends: ["bucketsOfElement:", "ifNil:ifNotNil:", "second", "remove:ifAbsent:", "third", "first", "value", "-", "remove:in:"]
  21465. }),
  21466. $globals.Set);
  21467. $core.addMethod(
  21468. $core.method({
  21469. selector: "remove:in:",
  21470. protocol: 'private',
  21471. fn: function (anObject,anotherObject){
  21472. var self=this;
  21473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21474. return $core.withContext(function($ctx1) {
  21475. //>>excludeEnd("ctx");
  21476. if (delete anotherObject.store[anObject]) self['@size']--;
  21477. return self;
  21478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21479. }, function($ctx1) {$ctx1.fill(self,"remove:in:",{anObject:anObject,anotherObject:anotherObject},$globals.Set)});
  21480. //>>excludeEnd("ctx");
  21481. },
  21482. //>>excludeStart("ide", pragmas.excludeIdeData);
  21483. args: ["anObject", "anotherObject"],
  21484. source: "remove: anObject in: anotherObject\x0a\x09<if (delete anotherObject.store[anObject]) self['@size']-->",
  21485. referencedClasses: [],
  21486. //>>excludeEnd("ide");
  21487. messageSends: []
  21488. }),
  21489. $globals.Set);
  21490. $core.addMethod(
  21491. $core.method({
  21492. selector: "removeAll",
  21493. protocol: 'adding/removing',
  21494. fn: function (){
  21495. var self=this;
  21496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21497. return $core.withContext(function($ctx1) {
  21498. //>>excludeEnd("ctx");
  21499. self['@fastBuckets'] = {
  21500. 'boolean': { store: Object.create(null), fn: function (x) { return {'true': true, 'false': false, 'null': null}[x]; } },
  21501. 'number': { store: Object.create(null), fn: Number },
  21502. 'string': { store: Object.create(null) }
  21503. };
  21504. self['@slowBucketStores'].forEach(function (x) { x._removeAll(); });
  21505. self['@defaultBucket']._removeAll();
  21506. self['@size'] = 0;
  21507. ;
  21508. return self;
  21509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21510. }, function($ctx1) {$ctx1.fill(self,"removeAll",{},$globals.Set)});
  21511. //>>excludeEnd("ctx");
  21512. },
  21513. //>>excludeStart("ide", pragmas.excludeIdeData);
  21514. args: [],
  21515. source: "removeAll\x0a\x09<\x0a\x09\x09self['@fastBuckets'] = {\x0a\x09\x09\x09'boolean': { store: Object.create(null), fn: function (x) { return {'true': true, 'false': false, 'null': null}[x]; } },\x0a\x09\x09\x09'number': { store: Object.create(null), fn: Number },\x0a\x09\x09\x09'string': { store: Object.create(null) }\x0a\x09\x09};\x0a\x09\x09self['@slowBucketStores'].forEach(function (x) { x._removeAll(); });\x0a\x09\x09self['@defaultBucket']._removeAll();\x0a\x09\x09self['@size'] = 0;\x0a\x09>",
  21516. referencedClasses: [],
  21517. //>>excludeEnd("ide");
  21518. messageSends: []
  21519. }),
  21520. $globals.Set);
  21521. $core.addMethod(
  21522. $core.method({
  21523. selector: "select:",
  21524. protocol: 'enumerating',
  21525. fn: function (aBlock){
  21526. var self=this;
  21527. var collection;
  21528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21529. return $core.withContext(function($ctx1) {
  21530. //>>excludeEnd("ctx");
  21531. var $1,$2;
  21532. collection=$recv(self._class())._new();
  21533. self._do_((function(each){
  21534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21535. return $core.withContext(function($ctx2) {
  21536. //>>excludeEnd("ctx");
  21537. $1=$recv(aBlock)._value_(each);
  21538. if($core.assert($1)){
  21539. return $recv(collection)._add_(each);
  21540. };
  21541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21542. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  21543. //>>excludeEnd("ctx");
  21544. }));
  21545. $2=collection;
  21546. return $2;
  21547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21548. }, function($ctx1) {$ctx1.fill(self,"select:",{aBlock:aBlock,collection:collection},$globals.Set)});
  21549. //>>excludeEnd("ctx");
  21550. },
  21551. //>>excludeStart("ide", pragmas.excludeIdeData);
  21552. args: ["aBlock"],
  21553. source: "select: aBlock\x0a\x09| collection |\x0a\x09collection := self class new.\x0a\x09self do: [ :each |\x0a\x09\x09(aBlock value: each) ifTrue: [\x0a\x09\x09\x09collection add: each ] ].\x0a\x09^ collection",
  21554. referencedClasses: [],
  21555. //>>excludeEnd("ide");
  21556. messageSends: ["new", "class", "do:", "ifTrue:", "value:", "add:"]
  21557. }),
  21558. $globals.Set);
  21559. $core.addMethod(
  21560. $core.method({
  21561. selector: "size",
  21562. protocol: 'accessing',
  21563. fn: function (){
  21564. var self=this;
  21565. var $1;
  21566. $1=self["@size"];
  21567. return $1;
  21568. },
  21569. //>>excludeStart("ide", pragmas.excludeIdeData);
  21570. args: [],
  21571. source: "size\x0a\x09^ size",
  21572. referencedClasses: [],
  21573. //>>excludeEnd("ide");
  21574. messageSends: []
  21575. }),
  21576. $globals.Set);
  21577. $core.addClass('Queue', $globals.Object, ['read', 'readIndex', 'write'], 'Kernel-Collections');
  21578. //>>excludeStart("ide", pragmas.excludeIdeData);
  21579. $globals.Queue.comment="I am a one-sided queue.\x0a\x0a## Usage\x0a\x0aUse `#nextPut:` to add items to the queue.\x0aUse `#next` or `#nextIfAbsent:` to get (and remove) the next item in the queue.\x0a\x0a## Implementation notes\x0a\x0aA Queue uses two OrderedCollections inside,\x0a`read` is at the front, is not modified and only read using `readIndex`.\x0a`write` is at the back and is appended new items.\x0aWhen `read` is exhausted, `write` is promoted to `read` and new `write` is created.\x0a\x0aAs a consequence, no data moving is done by me, write appending may do data moving\x0awhen growing `write`, but this is left to engine to implement as good as it chooses to.";
  21580. //>>excludeEnd("ide");
  21581. $core.addMethod(
  21582. $core.method({
  21583. selector: "initialize",
  21584. protocol: 'initialization',
  21585. fn: function (){
  21586. var self=this;
  21587. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  21588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21589. return $core.withContext(function($ctx1) {
  21590. //>>excludeEnd("ctx");
  21591. (
  21592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21593. $ctx1.supercall = true,
  21594. //>>excludeEnd("ctx");
  21595. $globals.Queue.superclass.fn.prototype._initialize.apply($recv(self), []));
  21596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21597. $ctx1.supercall = false;
  21598. //>>excludeEnd("ctx");;
  21599. self["@read"]=$recv($OrderedCollection())._new();
  21600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21601. $ctx1.sendIdx["new"]=1;
  21602. //>>excludeEnd("ctx");
  21603. self["@write"]=$recv($OrderedCollection())._new();
  21604. self["@readIndex"]=(1);
  21605. return self;
  21606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21607. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Queue)});
  21608. //>>excludeEnd("ctx");
  21609. },
  21610. //>>excludeStart("ide", pragmas.excludeIdeData);
  21611. args: [],
  21612. source: "initialize\x0a\x09super initialize.\x0a\x09read := OrderedCollection new.\x0a\x09write := OrderedCollection new.\x0a\x09readIndex := 1",
  21613. referencedClasses: ["OrderedCollection"],
  21614. //>>excludeEnd("ide");
  21615. messageSends: ["initialize", "new"]
  21616. }),
  21617. $globals.Queue);
  21618. $core.addMethod(
  21619. $core.method({
  21620. selector: "next",
  21621. protocol: 'accessing',
  21622. fn: function (){
  21623. var self=this;
  21624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21625. return $core.withContext(function($ctx1) {
  21626. //>>excludeEnd("ctx");
  21627. var $1;
  21628. $1=self._nextIfAbsent_((function(){
  21629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21630. return $core.withContext(function($ctx2) {
  21631. //>>excludeEnd("ctx");
  21632. return self._error_("Cannot read from empty Queue.");
  21633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21634. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  21635. //>>excludeEnd("ctx");
  21636. }));
  21637. return $1;
  21638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21639. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Queue)});
  21640. //>>excludeEnd("ctx");
  21641. },
  21642. //>>excludeStart("ide", pragmas.excludeIdeData);
  21643. args: [],
  21644. source: "next\x0a\x09^ self nextIfAbsent: [ self error: 'Cannot read from empty Queue.' ]",
  21645. referencedClasses: [],
  21646. //>>excludeEnd("ide");
  21647. messageSends: ["nextIfAbsent:", "error:"]
  21648. }),
  21649. $globals.Queue);
  21650. $core.addMethod(
  21651. $core.method({
  21652. selector: "nextIfAbsent:",
  21653. protocol: 'accessing',
  21654. fn: function (aBlock){
  21655. var self=this;
  21656. var result;
  21657. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  21658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21659. return $core.withContext(function($ctx1) {
  21660. //>>excludeEnd("ctx");
  21661. var $1,$2,$3,$4;
  21662. var $early={};
  21663. try {
  21664. result=$recv(self["@read"])._at_ifAbsent_(self["@readIndex"],(function(){
  21665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21666. return $core.withContext(function($ctx2) {
  21667. //>>excludeEnd("ctx");
  21668. $1=$recv(self["@write"])._isEmpty();
  21669. if($core.assert($1)){
  21670. $2=$recv(self["@readIndex"]).__gt((1));
  21671. if($core.assert($2)){
  21672. self["@read"]=[];
  21673. self["@read"];
  21674. self["@readIndex"]=(1);
  21675. self["@readIndex"];
  21676. };
  21677. $3=$recv(aBlock)._value();
  21678. throw $early=[$3];
  21679. };
  21680. self["@read"]=self["@write"];
  21681. self["@read"];
  21682. self["@readIndex"]=(1);
  21683. self["@readIndex"];
  21684. self["@write"]=$recv($OrderedCollection())._new();
  21685. self["@write"];
  21686. return $recv(self["@read"])._first();
  21687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21688. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  21689. //>>excludeEnd("ctx");
  21690. }));
  21691. $recv(self["@read"])._at_put_(self["@readIndex"],nil);
  21692. self["@readIndex"]=$recv(self["@readIndex"]).__plus((1));
  21693. $4=result;
  21694. return $4;
  21695. }
  21696. catch(e) {if(e===$early)return e[0]; throw e}
  21697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21698. }, function($ctx1) {$ctx1.fill(self,"nextIfAbsent:",{aBlock:aBlock,result:result},$globals.Queue)});
  21699. //>>excludeEnd("ctx");
  21700. },
  21701. //>>excludeStart("ide", pragmas.excludeIdeData);
  21702. args: ["aBlock"],
  21703. source: "nextIfAbsent: aBlock\x0a\x09| result |\x0a\x09result := read at: readIndex ifAbsent: [\x0a\x09\x09write isEmpty ifTrue: [\x0a\x09\x09\x09readIndex > 1 ifTrue: [ read := #(). readIndex := 1 ].\x0a\x09\x09\x09^ aBlock value ].\x0a\x09\x09read := write.\x0a\x09\x09readIndex := 1.\x0a\x09\x09write := OrderedCollection new.\x0a\x09\x09read first ].\x0a\x09read at: readIndex put: nil.\x0a\x09readIndex := readIndex + 1.\x0a\x09^ result",
  21704. referencedClasses: ["OrderedCollection"],
  21705. //>>excludeEnd("ide");
  21706. messageSends: ["at:ifAbsent:", "ifTrue:", "isEmpty", ">", "value", "new", "first", "at:put:", "+"]
  21707. }),
  21708. $globals.Queue);
  21709. $core.addMethod(
  21710. $core.method({
  21711. selector: "nextPut:",
  21712. protocol: 'accessing',
  21713. fn: function (anObject){
  21714. var self=this;
  21715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21716. return $core.withContext(function($ctx1) {
  21717. //>>excludeEnd("ctx");
  21718. $recv(self["@write"])._add_(anObject);
  21719. return self;
  21720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21721. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{anObject:anObject},$globals.Queue)});
  21722. //>>excludeEnd("ctx");
  21723. },
  21724. //>>excludeStart("ide", pragmas.excludeIdeData);
  21725. args: ["anObject"],
  21726. source: "nextPut: anObject\x0a\x09write add: anObject",
  21727. referencedClasses: [],
  21728. //>>excludeEnd("ide");
  21729. messageSends: ["add:"]
  21730. }),
  21731. $globals.Queue);
  21732. $core.addClass('RegularExpression', $globals.Object, [], 'Kernel-Collections');
  21733. //>>excludeStart("ide", pragmas.excludeIdeData);
  21734. $globals.RegularExpression.comment="I represent a regular expression object. My instances are JavaScript `RegExp` object.";
  21735. //>>excludeEnd("ide");
  21736. $core.addMethod(
  21737. $core.method({
  21738. selector: "compile:",
  21739. protocol: 'evaluating',
  21740. fn: function (aString){
  21741. var self=this;
  21742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21743. return $core.withContext(function($ctx1) {
  21744. //>>excludeEnd("ctx");
  21745. return self.compile(aString);
  21746. return self;
  21747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21748. }, function($ctx1) {$ctx1.fill(self,"compile:",{aString:aString},$globals.RegularExpression)});
  21749. //>>excludeEnd("ctx");
  21750. },
  21751. //>>excludeStart("ide", pragmas.excludeIdeData);
  21752. args: ["aString"],
  21753. source: "compile: aString\x0a\x09<return self.compile(aString)>",
  21754. referencedClasses: [],
  21755. //>>excludeEnd("ide");
  21756. messageSends: []
  21757. }),
  21758. $globals.RegularExpression);
  21759. $core.addMethod(
  21760. $core.method({
  21761. selector: "exec:",
  21762. protocol: 'evaluating',
  21763. fn: function (aString){
  21764. var self=this;
  21765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21766. return $core.withContext(function($ctx1) {
  21767. //>>excludeEnd("ctx");
  21768. return self.exec(aString) || nil;
  21769. return self;
  21770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21771. }, function($ctx1) {$ctx1.fill(self,"exec:",{aString:aString},$globals.RegularExpression)});
  21772. //>>excludeEnd("ctx");
  21773. },
  21774. //>>excludeStart("ide", pragmas.excludeIdeData);
  21775. args: ["aString"],
  21776. source: "exec: aString\x0a\x09<return self.exec(aString) || nil>",
  21777. referencedClasses: [],
  21778. //>>excludeEnd("ide");
  21779. messageSends: []
  21780. }),
  21781. $globals.RegularExpression);
  21782. $core.addMethod(
  21783. $core.method({
  21784. selector: "test:",
  21785. protocol: 'evaluating',
  21786. fn: function (aString){
  21787. var self=this;
  21788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21789. return $core.withContext(function($ctx1) {
  21790. //>>excludeEnd("ctx");
  21791. return self.test(aString);
  21792. return self;
  21793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21794. }, function($ctx1) {$ctx1.fill(self,"test:",{aString:aString},$globals.RegularExpression)});
  21795. //>>excludeEnd("ctx");
  21796. },
  21797. //>>excludeStart("ide", pragmas.excludeIdeData);
  21798. args: ["aString"],
  21799. source: "test: aString\x0a\x09<return self.test(aString)>",
  21800. referencedClasses: [],
  21801. //>>excludeEnd("ide");
  21802. messageSends: []
  21803. }),
  21804. $globals.RegularExpression);
  21805. $core.addMethod(
  21806. $core.method({
  21807. selector: "fromString:",
  21808. protocol: 'instance creation',
  21809. fn: function (aString){
  21810. var self=this;
  21811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21812. return $core.withContext(function($ctx1) {
  21813. //>>excludeEnd("ctx");
  21814. var $1;
  21815. $1=self._fromString_flag_(aString,"");
  21816. return $1;
  21817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21818. }, function($ctx1) {$ctx1.fill(self,"fromString:",{aString:aString},$globals.RegularExpression.klass)});
  21819. //>>excludeEnd("ctx");
  21820. },
  21821. //>>excludeStart("ide", pragmas.excludeIdeData);
  21822. args: ["aString"],
  21823. source: "fromString: aString\x0a\x09\x09^ self fromString: aString flag: ''",
  21824. referencedClasses: [],
  21825. //>>excludeEnd("ide");
  21826. messageSends: ["fromString:flag:"]
  21827. }),
  21828. $globals.RegularExpression.klass);
  21829. $core.addMethod(
  21830. $core.method({
  21831. selector: "fromString:flag:",
  21832. protocol: 'instance creation',
  21833. fn: function (aString,anotherString){
  21834. var self=this;
  21835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21836. return $core.withContext(function($ctx1) {
  21837. //>>excludeEnd("ctx");
  21838. return new RegExp(aString, anotherString);
  21839. return self;
  21840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21841. }, function($ctx1) {$ctx1.fill(self,"fromString:flag:",{aString:aString,anotherString:anotherString},$globals.RegularExpression.klass)});
  21842. //>>excludeEnd("ctx");
  21843. },
  21844. //>>excludeStart("ide", pragmas.excludeIdeData);
  21845. args: ["aString", "anotherString"],
  21846. source: "fromString: aString flag: anotherString\x0a\x09<return new RegExp(aString, anotherString)>",
  21847. referencedClasses: [],
  21848. //>>excludeEnd("ide");
  21849. messageSends: []
  21850. }),
  21851. $globals.RegularExpression.klass);
  21852. $core.addClass('Stream', $globals.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
  21853. //>>excludeStart("ide", pragmas.excludeIdeData);
  21854. $globals.Stream.comment="I represent an accessor for a sequence of objects. This sequence is referred to as my \x22contents\x22.\x0aMy instances are read/write streams to the contents sequence collection.";
  21855. //>>excludeEnd("ide");
  21856. $core.addMethod(
  21857. $core.method({
  21858. selector: "<<",
  21859. protocol: 'writing',
  21860. fn: function (anObject){
  21861. var self=this;
  21862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21863. return $core.withContext(function($ctx1) {
  21864. //>>excludeEnd("ctx");
  21865. self._write_(anObject);
  21866. return self;
  21867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21868. }, function($ctx1) {$ctx1.fill(self,"<<",{anObject:anObject},$globals.Stream)});
  21869. //>>excludeEnd("ctx");
  21870. },
  21871. //>>excludeStart("ide", pragmas.excludeIdeData);
  21872. args: ["anObject"],
  21873. source: "<< anObject\x0a\x09self write: anObject",
  21874. referencedClasses: [],
  21875. //>>excludeEnd("ide");
  21876. messageSends: ["write:"]
  21877. }),
  21878. $globals.Stream);
  21879. $core.addMethod(
  21880. $core.method({
  21881. selector: "atEnd",
  21882. protocol: 'testing',
  21883. fn: function (){
  21884. var self=this;
  21885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21886. return $core.withContext(function($ctx1) {
  21887. //>>excludeEnd("ctx");
  21888. var $1;
  21889. $1=$recv(self._position()).__eq(self._size());
  21890. return $1;
  21891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21892. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.Stream)});
  21893. //>>excludeEnd("ctx");
  21894. },
  21895. //>>excludeStart("ide", pragmas.excludeIdeData);
  21896. args: [],
  21897. source: "atEnd\x0a\x09^ self position = self size",
  21898. referencedClasses: [],
  21899. //>>excludeEnd("ide");
  21900. messageSends: ["=", "position", "size"]
  21901. }),
  21902. $globals.Stream);
  21903. $core.addMethod(
  21904. $core.method({
  21905. selector: "atStart",
  21906. protocol: 'testing',
  21907. fn: function (){
  21908. var self=this;
  21909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21910. return $core.withContext(function($ctx1) {
  21911. //>>excludeEnd("ctx");
  21912. var $1;
  21913. $1=$recv(self._position()).__eq((0));
  21914. return $1;
  21915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21916. }, function($ctx1) {$ctx1.fill(self,"atStart",{},$globals.Stream)});
  21917. //>>excludeEnd("ctx");
  21918. },
  21919. //>>excludeStart("ide", pragmas.excludeIdeData);
  21920. args: [],
  21921. source: "atStart\x0a\x09^ self position = 0",
  21922. referencedClasses: [],
  21923. //>>excludeEnd("ide");
  21924. messageSends: ["=", "position"]
  21925. }),
  21926. $globals.Stream);
  21927. $core.addMethod(
  21928. $core.method({
  21929. selector: "close",
  21930. protocol: 'actions',
  21931. fn: function (){
  21932. var self=this;
  21933. return self;
  21934. },
  21935. //>>excludeStart("ide", pragmas.excludeIdeData);
  21936. args: [],
  21937. source: "close",
  21938. referencedClasses: [],
  21939. //>>excludeEnd("ide");
  21940. messageSends: []
  21941. }),
  21942. $globals.Stream);
  21943. $core.addMethod(
  21944. $core.method({
  21945. selector: "collection",
  21946. protocol: 'accessing',
  21947. fn: function (){
  21948. var self=this;
  21949. var $1;
  21950. $1=self["@collection"];
  21951. return $1;
  21952. },
  21953. //>>excludeStart("ide", pragmas.excludeIdeData);
  21954. args: [],
  21955. source: "collection\x0a\x09^ collection",
  21956. referencedClasses: [],
  21957. //>>excludeEnd("ide");
  21958. messageSends: []
  21959. }),
  21960. $globals.Stream);
  21961. $core.addMethod(
  21962. $core.method({
  21963. selector: "contents",
  21964. protocol: 'accessing',
  21965. fn: function (){
  21966. var self=this;
  21967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21968. return $core.withContext(function($ctx1) {
  21969. //>>excludeEnd("ctx");
  21970. var $1;
  21971. $1=$recv(self._collection())._copyFrom_to_((1),self._streamSize());
  21972. return $1;
  21973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21974. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.Stream)});
  21975. //>>excludeEnd("ctx");
  21976. },
  21977. //>>excludeStart("ide", pragmas.excludeIdeData);
  21978. args: [],
  21979. source: "contents\x0a\x09^ self collection\x0a\x09\x09copyFrom: 1\x0a\x09\x09to: self streamSize",
  21980. referencedClasses: [],
  21981. //>>excludeEnd("ide");
  21982. messageSends: ["copyFrom:to:", "collection", "streamSize"]
  21983. }),
  21984. $globals.Stream);
  21985. $core.addMethod(
  21986. $core.method({
  21987. selector: "do:",
  21988. protocol: 'enumerating',
  21989. fn: function (aBlock){
  21990. var self=this;
  21991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21992. return $core.withContext(function($ctx1) {
  21993. //>>excludeEnd("ctx");
  21994. $recv((function(){
  21995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  21996. return $core.withContext(function($ctx2) {
  21997. //>>excludeEnd("ctx");
  21998. return self._atEnd();
  21999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22000. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22001. //>>excludeEnd("ctx");
  22002. }))._whileFalse_((function(){
  22003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22004. return $core.withContext(function($ctx2) {
  22005. //>>excludeEnd("ctx");
  22006. return $recv(aBlock)._value_(self._next());
  22007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22008. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  22009. //>>excludeEnd("ctx");
  22010. }));
  22011. return self;
  22012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22013. }, function($ctx1) {$ctx1.fill(self,"do:",{aBlock:aBlock},$globals.Stream)});
  22014. //>>excludeEnd("ctx");
  22015. },
  22016. //>>excludeStart("ide", pragmas.excludeIdeData);
  22017. args: ["aBlock"],
  22018. source: "do: aBlock\x0a\x09[ self atEnd ] whileFalse: [ aBlock value: self next ]",
  22019. referencedClasses: [],
  22020. //>>excludeEnd("ide");
  22021. messageSends: ["whileFalse:", "atEnd", "value:", "next"]
  22022. }),
  22023. $globals.Stream);
  22024. $core.addMethod(
  22025. $core.method({
  22026. selector: "flush",
  22027. protocol: 'actions',
  22028. fn: function (){
  22029. var self=this;
  22030. return self;
  22031. },
  22032. //>>excludeStart("ide", pragmas.excludeIdeData);
  22033. args: [],
  22034. source: "flush",
  22035. referencedClasses: [],
  22036. //>>excludeEnd("ide");
  22037. messageSends: []
  22038. }),
  22039. $globals.Stream);
  22040. $core.addMethod(
  22041. $core.method({
  22042. selector: "isEmpty",
  22043. protocol: 'testing',
  22044. fn: function (){
  22045. var self=this;
  22046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22047. return $core.withContext(function($ctx1) {
  22048. //>>excludeEnd("ctx");
  22049. var $1;
  22050. $1=$recv(self._size()).__eq((0));
  22051. return $1;
  22052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22053. }, function($ctx1) {$ctx1.fill(self,"isEmpty",{},$globals.Stream)});
  22054. //>>excludeEnd("ctx");
  22055. },
  22056. //>>excludeStart("ide", pragmas.excludeIdeData);
  22057. args: [],
  22058. source: "isEmpty\x0a\x09^ self size = 0",
  22059. referencedClasses: [],
  22060. //>>excludeEnd("ide");
  22061. messageSends: ["=", "size"]
  22062. }),
  22063. $globals.Stream);
  22064. $core.addMethod(
  22065. $core.method({
  22066. selector: "next",
  22067. protocol: 'reading',
  22068. fn: function (){
  22069. var self=this;
  22070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22071. return $core.withContext(function($ctx1) {
  22072. //>>excludeEnd("ctx");
  22073. var $2,$4,$3,$1;
  22074. $2=self._atEnd();
  22075. if($core.assert($2)){
  22076. $1=nil;
  22077. } else {
  22078. $4=self._position();
  22079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22080. $ctx1.sendIdx["position"]=1;
  22081. //>>excludeEnd("ctx");
  22082. $3=$recv($4).__plus((1));
  22083. self._position_($3);
  22084. $1=$recv(self["@collection"])._at_(self._position());
  22085. };
  22086. return $1;
  22087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22088. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.Stream)});
  22089. //>>excludeEnd("ctx");
  22090. },
  22091. //>>excludeStart("ide", pragmas.excludeIdeData);
  22092. args: [],
  22093. source: "next\x0a\x09^ self atEnd\x0a\x09\x09ifTrue: [ nil ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09self position: self position + 1.\x0a\x09\x09\x09collection at: self position ]",
  22094. referencedClasses: [],
  22095. //>>excludeEnd("ide");
  22096. messageSends: ["ifTrue:ifFalse:", "atEnd", "position:", "+", "position", "at:"]
  22097. }),
  22098. $globals.Stream);
  22099. $core.addMethod(
  22100. $core.method({
  22101. selector: "next:",
  22102. protocol: 'reading',
  22103. fn: function (anInteger){
  22104. var self=this;
  22105. var tempCollection;
  22106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22107. return $core.withContext(function($ctx1) {
  22108. //>>excludeEnd("ctx");
  22109. var $1,$2;
  22110. tempCollection=$recv($recv(self._collection())._class())._new();
  22111. $recv(anInteger)._timesRepeat_((function(){
  22112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22113. return $core.withContext(function($ctx2) {
  22114. //>>excludeEnd("ctx");
  22115. $1=self._atEnd();
  22116. if(!$core.assert($1)){
  22117. return $recv(tempCollection)._add_(self._next());
  22118. };
  22119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22120. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22121. //>>excludeEnd("ctx");
  22122. }));
  22123. $2=tempCollection;
  22124. return $2;
  22125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22126. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},$globals.Stream)});
  22127. //>>excludeEnd("ctx");
  22128. },
  22129. //>>excludeStart("ide", pragmas.excludeIdeData);
  22130. args: ["anInteger"],
  22131. source: "next: anInteger\x0a\x09| tempCollection |\x0a\x09tempCollection := self collection class new.\x0a\x09anInteger timesRepeat: [\x0a\x09\x09self atEnd ifFalse: [\x0a\x09\x09tempCollection add: self next ]].\x0a\x09^ tempCollection",
  22132. referencedClasses: [],
  22133. //>>excludeEnd("ide");
  22134. messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", "add:", "next"]
  22135. }),
  22136. $globals.Stream);
  22137. $core.addMethod(
  22138. $core.method({
  22139. selector: "nextPut:",
  22140. protocol: 'writing',
  22141. fn: function (anObject){
  22142. var self=this;
  22143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22144. return $core.withContext(function($ctx1) {
  22145. //>>excludeEnd("ctx");
  22146. var $2,$1,$3,$4;
  22147. $2=self._position();
  22148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22149. $ctx1.sendIdx["position"]=1;
  22150. //>>excludeEnd("ctx");
  22151. $1=$recv($2).__plus((1));
  22152. self._position_($1);
  22153. $3=self._collection();
  22154. $4=self._position();
  22155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22156. $ctx1.sendIdx["position"]=2;
  22157. //>>excludeEnd("ctx");
  22158. $recv($3)._at_put_($4,anObject);
  22159. self._setStreamSize_($recv(self._streamSize())._max_(self._position()));
  22160. return self;
  22161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22162. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{anObject:anObject},$globals.Stream)});
  22163. //>>excludeEnd("ctx");
  22164. },
  22165. //>>excludeStart("ide", pragmas.excludeIdeData);
  22166. args: ["anObject"],
  22167. source: "nextPut: anObject\x0a\x09self position: self position + 1.\x0a\x09self collection at: self position put: anObject.\x0a\x09self setStreamSize: (self streamSize max: self position)",
  22168. referencedClasses: [],
  22169. //>>excludeEnd("ide");
  22170. messageSends: ["position:", "+", "position", "at:put:", "collection", "setStreamSize:", "max:", "streamSize"]
  22171. }),
  22172. $globals.Stream);
  22173. $core.addMethod(
  22174. $core.method({
  22175. selector: "nextPutAll:",
  22176. protocol: 'writing',
  22177. fn: function (aCollection){
  22178. var self=this;
  22179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22180. return $core.withContext(function($ctx1) {
  22181. //>>excludeEnd("ctx");
  22182. $recv(aCollection)._do_((function(each){
  22183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22184. return $core.withContext(function($ctx2) {
  22185. //>>excludeEnd("ctx");
  22186. return self._nextPut_(each);
  22187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22188. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  22189. //>>excludeEnd("ctx");
  22190. }));
  22191. return self;
  22192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22193. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aCollection:aCollection},$globals.Stream)});
  22194. //>>excludeEnd("ctx");
  22195. },
  22196. //>>excludeStart("ide", pragmas.excludeIdeData);
  22197. args: ["aCollection"],
  22198. source: "nextPutAll: aCollection\x0a\x09aCollection do: [ :each |\x0a\x09\x09self nextPut: each ]",
  22199. referencedClasses: [],
  22200. //>>excludeEnd("ide");
  22201. messageSends: ["do:", "nextPut:"]
  22202. }),
  22203. $globals.Stream);
  22204. $core.addMethod(
  22205. $core.method({
  22206. selector: "nextPutString:",
  22207. protocol: 'writing',
  22208. fn: function (aString){
  22209. var self=this;
  22210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22211. return $core.withContext(function($ctx1) {
  22212. //>>excludeEnd("ctx");
  22213. self._nextPut_(aString);
  22214. return self;
  22215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22216. }, function($ctx1) {$ctx1.fill(self,"nextPutString:",{aString:aString},$globals.Stream)});
  22217. //>>excludeEnd("ctx");
  22218. },
  22219. //>>excludeStart("ide", pragmas.excludeIdeData);
  22220. args: ["aString"],
  22221. source: "nextPutString: aString\x0a\x09self nextPut: aString",
  22222. referencedClasses: [],
  22223. //>>excludeEnd("ide");
  22224. messageSends: ["nextPut:"]
  22225. }),
  22226. $globals.Stream);
  22227. $core.addMethod(
  22228. $core.method({
  22229. selector: "peek",
  22230. protocol: 'reading',
  22231. fn: function (){
  22232. var self=this;
  22233. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22234. return $core.withContext(function($ctx1) {
  22235. //>>excludeEnd("ctx");
  22236. var $2,$1;
  22237. $2=self._atEnd();
  22238. if(!$core.assert($2)){
  22239. $1=$recv(self._collection())._at_($recv(self._position()).__plus((1)));
  22240. };
  22241. return $1;
  22242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22243. }, function($ctx1) {$ctx1.fill(self,"peek",{},$globals.Stream)});
  22244. //>>excludeEnd("ctx");
  22245. },
  22246. //>>excludeStart("ide", pragmas.excludeIdeData);
  22247. args: [],
  22248. source: "peek\x0a\x09^ self atEnd ifFalse: [\x0a\x09\x09self collection at: self position + 1 ]",
  22249. referencedClasses: [],
  22250. //>>excludeEnd("ide");
  22251. messageSends: ["ifFalse:", "atEnd", "at:", "collection", "+", "position"]
  22252. }),
  22253. $globals.Stream);
  22254. $core.addMethod(
  22255. $core.method({
  22256. selector: "position",
  22257. protocol: 'accessing',
  22258. fn: function (){
  22259. var self=this;
  22260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22261. return $core.withContext(function($ctx1) {
  22262. //>>excludeEnd("ctx");
  22263. var $2,$1,$receiver;
  22264. $2=self["@position"];
  22265. if(($receiver = $2) == null || $receiver.isNil){
  22266. self["@position"]=(0);
  22267. $1=self["@position"];
  22268. } else {
  22269. $1=$2;
  22270. };
  22271. return $1;
  22272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22273. }, function($ctx1) {$ctx1.fill(self,"position",{},$globals.Stream)});
  22274. //>>excludeEnd("ctx");
  22275. },
  22276. //>>excludeStart("ide", pragmas.excludeIdeData);
  22277. args: [],
  22278. source: "position\x0a\x09^ position ifNil: [ position := 0 ]",
  22279. referencedClasses: [],
  22280. //>>excludeEnd("ide");
  22281. messageSends: ["ifNil:"]
  22282. }),
  22283. $globals.Stream);
  22284. $core.addMethod(
  22285. $core.method({
  22286. selector: "position:",
  22287. protocol: 'accessing',
  22288. fn: function (anInteger){
  22289. var self=this;
  22290. self["@position"]=anInteger;
  22291. return self;
  22292. },
  22293. //>>excludeStart("ide", pragmas.excludeIdeData);
  22294. args: ["anInteger"],
  22295. source: "position: anInteger\x0a\x09position := anInteger",
  22296. referencedClasses: [],
  22297. //>>excludeEnd("ide");
  22298. messageSends: []
  22299. }),
  22300. $globals.Stream);
  22301. $core.addMethod(
  22302. $core.method({
  22303. selector: "reset",
  22304. protocol: 'actions',
  22305. fn: function (){
  22306. var self=this;
  22307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22308. return $core.withContext(function($ctx1) {
  22309. //>>excludeEnd("ctx");
  22310. self._position_((0));
  22311. return self;
  22312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22313. }, function($ctx1) {$ctx1.fill(self,"reset",{},$globals.Stream)});
  22314. //>>excludeEnd("ctx");
  22315. },
  22316. //>>excludeStart("ide", pragmas.excludeIdeData);
  22317. args: [],
  22318. source: "reset\x0a\x09self position: 0",
  22319. referencedClasses: [],
  22320. //>>excludeEnd("ide");
  22321. messageSends: ["position:"]
  22322. }),
  22323. $globals.Stream);
  22324. $core.addMethod(
  22325. $core.method({
  22326. selector: "resetContents",
  22327. protocol: 'actions',
  22328. fn: function (){
  22329. var self=this;
  22330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22331. return $core.withContext(function($ctx1) {
  22332. //>>excludeEnd("ctx");
  22333. self._reset();
  22334. self._setStreamSize_((0));
  22335. return self;
  22336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22337. }, function($ctx1) {$ctx1.fill(self,"resetContents",{},$globals.Stream)});
  22338. //>>excludeEnd("ctx");
  22339. },
  22340. //>>excludeStart("ide", pragmas.excludeIdeData);
  22341. args: [],
  22342. source: "resetContents\x0a\x09self reset.\x0a\x09self setStreamSize: 0",
  22343. referencedClasses: [],
  22344. //>>excludeEnd("ide");
  22345. messageSends: ["reset", "setStreamSize:"]
  22346. }),
  22347. $globals.Stream);
  22348. $core.addMethod(
  22349. $core.method({
  22350. selector: "setCollection:",
  22351. protocol: 'accessing',
  22352. fn: function (aCollection){
  22353. var self=this;
  22354. self["@collection"]=aCollection;
  22355. return self;
  22356. },
  22357. //>>excludeStart("ide", pragmas.excludeIdeData);
  22358. args: ["aCollection"],
  22359. source: "setCollection: aCollection\x0a\x09collection := aCollection",
  22360. referencedClasses: [],
  22361. //>>excludeEnd("ide");
  22362. messageSends: []
  22363. }),
  22364. $globals.Stream);
  22365. $core.addMethod(
  22366. $core.method({
  22367. selector: "setStreamSize:",
  22368. protocol: 'accessing',
  22369. fn: function (anInteger){
  22370. var self=this;
  22371. self["@streamSize"]=anInteger;
  22372. return self;
  22373. },
  22374. //>>excludeStart("ide", pragmas.excludeIdeData);
  22375. args: ["anInteger"],
  22376. source: "setStreamSize: anInteger\x0a\x09streamSize := anInteger",
  22377. referencedClasses: [],
  22378. //>>excludeEnd("ide");
  22379. messageSends: []
  22380. }),
  22381. $globals.Stream);
  22382. $core.addMethod(
  22383. $core.method({
  22384. selector: "setToEnd",
  22385. protocol: 'positioning',
  22386. fn: function (){
  22387. var self=this;
  22388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22389. return $core.withContext(function($ctx1) {
  22390. //>>excludeEnd("ctx");
  22391. self._position_(self._size());
  22392. return self;
  22393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22394. }, function($ctx1) {$ctx1.fill(self,"setToEnd",{},$globals.Stream)});
  22395. //>>excludeEnd("ctx");
  22396. },
  22397. //>>excludeStart("ide", pragmas.excludeIdeData);
  22398. args: [],
  22399. source: "setToEnd\x0a\x09self position: self size",
  22400. referencedClasses: [],
  22401. //>>excludeEnd("ide");
  22402. messageSends: ["position:", "size"]
  22403. }),
  22404. $globals.Stream);
  22405. $core.addMethod(
  22406. $core.method({
  22407. selector: "size",
  22408. protocol: 'accessing',
  22409. fn: function (){
  22410. var self=this;
  22411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22412. return $core.withContext(function($ctx1) {
  22413. //>>excludeEnd("ctx");
  22414. var $1;
  22415. $1=self._streamSize();
  22416. return $1;
  22417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22418. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Stream)});
  22419. //>>excludeEnd("ctx");
  22420. },
  22421. //>>excludeStart("ide", pragmas.excludeIdeData);
  22422. args: [],
  22423. source: "size\x0a\x09^ self streamSize",
  22424. referencedClasses: [],
  22425. //>>excludeEnd("ide");
  22426. messageSends: ["streamSize"]
  22427. }),
  22428. $globals.Stream);
  22429. $core.addMethod(
  22430. $core.method({
  22431. selector: "skip:",
  22432. protocol: 'positioning',
  22433. fn: function (anInteger){
  22434. var self=this;
  22435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22436. return $core.withContext(function($ctx1) {
  22437. //>>excludeEnd("ctx");
  22438. self._position_($recv($recv(self._position()).__plus(anInteger))._min_max_(self._size(),(0)));
  22439. return self;
  22440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22441. }, function($ctx1) {$ctx1.fill(self,"skip:",{anInteger:anInteger},$globals.Stream)});
  22442. //>>excludeEnd("ctx");
  22443. },
  22444. //>>excludeStart("ide", pragmas.excludeIdeData);
  22445. args: ["anInteger"],
  22446. source: "skip: anInteger\x0a\x09self position: ((self position + anInteger) min: self size max: 0)",
  22447. referencedClasses: [],
  22448. //>>excludeEnd("ide");
  22449. messageSends: ["position:", "min:max:", "+", "position", "size"]
  22450. }),
  22451. $globals.Stream);
  22452. $core.addMethod(
  22453. $core.method({
  22454. selector: "streamSize",
  22455. protocol: 'accessing',
  22456. fn: function (){
  22457. var self=this;
  22458. var $1;
  22459. $1=self["@streamSize"];
  22460. return $1;
  22461. },
  22462. //>>excludeStart("ide", pragmas.excludeIdeData);
  22463. args: [],
  22464. source: "streamSize\x0a\x09^ streamSize",
  22465. referencedClasses: [],
  22466. //>>excludeEnd("ide");
  22467. messageSends: []
  22468. }),
  22469. $globals.Stream);
  22470. $core.addMethod(
  22471. $core.method({
  22472. selector: "write:",
  22473. protocol: 'writing',
  22474. fn: function (anObject){
  22475. var self=this;
  22476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22477. return $core.withContext(function($ctx1) {
  22478. //>>excludeEnd("ctx");
  22479. $recv(anObject)._putOn_(self);
  22480. return self;
  22481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22482. }, function($ctx1) {$ctx1.fill(self,"write:",{anObject:anObject},$globals.Stream)});
  22483. //>>excludeEnd("ctx");
  22484. },
  22485. //>>excludeStart("ide", pragmas.excludeIdeData);
  22486. args: ["anObject"],
  22487. source: "write: anObject\x0a\x09anObject putOn: self",
  22488. referencedClasses: [],
  22489. //>>excludeEnd("ide");
  22490. messageSends: ["putOn:"]
  22491. }),
  22492. $globals.Stream);
  22493. $core.addMethod(
  22494. $core.method({
  22495. selector: "on:",
  22496. protocol: 'instance creation',
  22497. fn: function (aCollection){
  22498. var self=this;
  22499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22500. return $core.withContext(function($ctx1) {
  22501. //>>excludeEnd("ctx");
  22502. var $2,$3,$1;
  22503. $2=self._new();
  22504. $recv($2)._setCollection_(aCollection);
  22505. $recv($2)._setStreamSize_($recv(aCollection)._size());
  22506. $3=$recv($2)._yourself();
  22507. $1=$3;
  22508. return $1;
  22509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22510. }, function($ctx1) {$ctx1.fill(self,"on:",{aCollection:aCollection},$globals.Stream.klass)});
  22511. //>>excludeEnd("ctx");
  22512. },
  22513. //>>excludeStart("ide", pragmas.excludeIdeData);
  22514. args: ["aCollection"],
  22515. source: "on: aCollection\x0a\x09\x09^ self new\x0a\x09\x09setCollection: aCollection;\x0a\x09\x09setStreamSize: aCollection size;\x0a\x09\x09yourself",
  22516. referencedClasses: [],
  22517. //>>excludeEnd("ide");
  22518. messageSends: ["setCollection:", "new", "setStreamSize:", "size", "yourself"]
  22519. }),
  22520. $globals.Stream.klass);
  22521. $core.addClass('StringStream', $globals.Stream, [], 'Kernel-Collections');
  22522. //>>excludeStart("ide", pragmas.excludeIdeData);
  22523. $globals.StringStream.comment="I am a Stream specific to `String` objects.";
  22524. //>>excludeEnd("ide");
  22525. $core.addMethod(
  22526. $core.method({
  22527. selector: "cr",
  22528. protocol: 'writing',
  22529. fn: function (){
  22530. var self=this;
  22531. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  22532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22533. return $core.withContext(function($ctx1) {
  22534. //>>excludeEnd("ctx");
  22535. var $1;
  22536. $1=self._nextPutAll_($recv($String())._cr());
  22537. return $1;
  22538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22539. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.StringStream)});
  22540. //>>excludeEnd("ctx");
  22541. },
  22542. //>>excludeStart("ide", pragmas.excludeIdeData);
  22543. args: [],
  22544. source: "cr\x0a\x09^ self nextPutAll: String cr",
  22545. referencedClasses: ["String"],
  22546. //>>excludeEnd("ide");
  22547. messageSends: ["nextPutAll:", "cr"]
  22548. }),
  22549. $globals.StringStream);
  22550. $core.addMethod(
  22551. $core.method({
  22552. selector: "crlf",
  22553. protocol: 'writing',
  22554. fn: function (){
  22555. var self=this;
  22556. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  22557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22558. return $core.withContext(function($ctx1) {
  22559. //>>excludeEnd("ctx");
  22560. var $1;
  22561. $1=self._nextPutAll_($recv($String())._crlf());
  22562. return $1;
  22563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22564. }, function($ctx1) {$ctx1.fill(self,"crlf",{},$globals.StringStream)});
  22565. //>>excludeEnd("ctx");
  22566. },
  22567. //>>excludeStart("ide", pragmas.excludeIdeData);
  22568. args: [],
  22569. source: "crlf\x0a\x09^ self nextPutAll: String crlf",
  22570. referencedClasses: ["String"],
  22571. //>>excludeEnd("ide");
  22572. messageSends: ["nextPutAll:", "crlf"]
  22573. }),
  22574. $globals.StringStream);
  22575. $core.addMethod(
  22576. $core.method({
  22577. selector: "lf",
  22578. protocol: 'writing',
  22579. fn: function (){
  22580. var self=this;
  22581. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  22582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22583. return $core.withContext(function($ctx1) {
  22584. //>>excludeEnd("ctx");
  22585. var $1;
  22586. $1=self._nextPutAll_($recv($String())._lf());
  22587. return $1;
  22588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22589. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.StringStream)});
  22590. //>>excludeEnd("ctx");
  22591. },
  22592. //>>excludeStart("ide", pragmas.excludeIdeData);
  22593. args: [],
  22594. source: "lf\x0a\x09^ self nextPutAll: String lf",
  22595. referencedClasses: ["String"],
  22596. //>>excludeEnd("ide");
  22597. messageSends: ["nextPutAll:", "lf"]
  22598. }),
  22599. $globals.StringStream);
  22600. $core.addMethod(
  22601. $core.method({
  22602. selector: "next:",
  22603. protocol: 'reading',
  22604. fn: function (anInteger){
  22605. var self=this;
  22606. var tempCollection;
  22607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22608. return $core.withContext(function($ctx1) {
  22609. //>>excludeEnd("ctx");
  22610. var $1,$2;
  22611. tempCollection=$recv($recv(self._collection())._class())._new();
  22612. $recv(anInteger)._timesRepeat_((function(){
  22613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22614. return $core.withContext(function($ctx2) {
  22615. //>>excludeEnd("ctx");
  22616. $1=self._atEnd();
  22617. if(!$core.assert($1)){
  22618. tempCollection=$recv(tempCollection).__comma(self._next());
  22619. return tempCollection;
  22620. };
  22621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22622. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  22623. //>>excludeEnd("ctx");
  22624. }));
  22625. $2=tempCollection;
  22626. return $2;
  22627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22628. }, function($ctx1) {$ctx1.fill(self,"next:",{anInteger:anInteger,tempCollection:tempCollection},$globals.StringStream)});
  22629. //>>excludeEnd("ctx");
  22630. },
  22631. //>>excludeStart("ide", pragmas.excludeIdeData);
  22632. args: ["anInteger"],
  22633. source: "next: anInteger\x0a\x09| tempCollection |\x0a\x09tempCollection := self collection class new.\x0a\x09anInteger timesRepeat: [\x0a\x09\x09self atEnd ifFalse: [\x0a\x09\x09tempCollection := tempCollection, self next ]].\x0a\x09^ tempCollection",
  22634. referencedClasses: [],
  22635. //>>excludeEnd("ide");
  22636. messageSends: ["new", "class", "collection", "timesRepeat:", "ifFalse:", "atEnd", ",", "next"]
  22637. }),
  22638. $globals.StringStream);
  22639. $core.addMethod(
  22640. $core.method({
  22641. selector: "nextPut:",
  22642. protocol: 'writing',
  22643. fn: function (aString){
  22644. var self=this;
  22645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22646. return $core.withContext(function($ctx1) {
  22647. //>>excludeEnd("ctx");
  22648. self._nextPutAll_(aString);
  22649. return self;
  22650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22651. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{aString:aString},$globals.StringStream)});
  22652. //>>excludeEnd("ctx");
  22653. },
  22654. //>>excludeStart("ide", pragmas.excludeIdeData);
  22655. args: ["aString"],
  22656. source: "nextPut: aString\x0a\x09self nextPutAll: aString",
  22657. referencedClasses: [],
  22658. //>>excludeEnd("ide");
  22659. messageSends: ["nextPutAll:"]
  22660. }),
  22661. $globals.StringStream);
  22662. $core.addMethod(
  22663. $core.method({
  22664. selector: "nextPutAll:",
  22665. protocol: 'writing',
  22666. fn: function (aString){
  22667. var self=this;
  22668. var pre,post;
  22669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22670. return $core.withContext(function($ctx1) {
  22671. //>>excludeEnd("ctx");
  22672. var $1,$3,$2,$4,$5,$6,$9,$8,$10,$7,$11,$12,$14,$13;
  22673. $1=self._atEnd();
  22674. if($core.assert($1)){
  22675. $3=self._collection();
  22676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22677. $ctx1.sendIdx["collection"]=1;
  22678. //>>excludeEnd("ctx");
  22679. $2=$recv($3).__comma(aString);
  22680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22681. $ctx1.sendIdx[","]=1;
  22682. //>>excludeEnd("ctx");
  22683. self._setCollection_($2);
  22684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22685. $ctx1.sendIdx["setCollection:"]=1;
  22686. //>>excludeEnd("ctx");
  22687. } else {
  22688. $4=self._collection();
  22689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22690. $ctx1.sendIdx["collection"]=2;
  22691. //>>excludeEnd("ctx");
  22692. $5=self._position();
  22693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22694. $ctx1.sendIdx["position"]=1;
  22695. //>>excludeEnd("ctx");
  22696. pre=$recv($4)._copyFrom_to_((1),$5);
  22697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22698. $ctx1.sendIdx["copyFrom:to:"]=1;
  22699. //>>excludeEnd("ctx");
  22700. pre;
  22701. $6=self._collection();
  22702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22703. $ctx1.sendIdx["collection"]=3;
  22704. //>>excludeEnd("ctx");
  22705. $9=self._position();
  22706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22707. $ctx1.sendIdx["position"]=2;
  22708. //>>excludeEnd("ctx");
  22709. $8=$recv($9).__plus((1));
  22710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22711. $ctx1.sendIdx["+"]=2;
  22712. //>>excludeEnd("ctx");
  22713. $10=$recv(aString)._size();
  22714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22715. $ctx1.sendIdx["size"]=1;
  22716. //>>excludeEnd("ctx");
  22717. $7=$recv($8).__plus($10);
  22718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22719. $ctx1.sendIdx["+"]=1;
  22720. //>>excludeEnd("ctx");
  22721. $11=$recv(self._collection())._size();
  22722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22723. $ctx1.sendIdx["size"]=2;
  22724. //>>excludeEnd("ctx");
  22725. post=$recv($6)._copyFrom_to_($7,$11);
  22726. post;
  22727. $12=$recv($recv(pre).__comma(aString)).__comma(post);
  22728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22729. $ctx1.sendIdx[","]=2;
  22730. //>>excludeEnd("ctx");
  22731. self._setCollection_($12);
  22732. };
  22733. $14=self._position();
  22734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22735. $ctx1.sendIdx["position"]=3;
  22736. //>>excludeEnd("ctx");
  22737. $13=$recv($14).__plus($recv(aString)._size());
  22738. self._position_($13);
  22739. self._setStreamSize_($recv(self._streamSize())._max_(self._position()));
  22740. return self;
  22741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22742. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aString:aString,pre:pre,post:post},$globals.StringStream)});
  22743. //>>excludeEnd("ctx");
  22744. },
  22745. //>>excludeStart("ide", pragmas.excludeIdeData);
  22746. args: ["aString"],
  22747. source: "nextPutAll: aString\x0a\x09| pre post |\x0a\x09self atEnd ifTrue: [ self setCollection: self collection, aString ] ifFalse: [\x0a\x09\x09pre := self collection copyFrom: 1 to: self position.\x0a\x09\x09post := self collection copyFrom: (self position + 1 + aString size) to: self collection size.\x0a\x09\x09self setCollection: pre, aString, post\x0a\x09].\x0a\x09self position: self position + aString size.\x0a\x09self setStreamSize: (self streamSize max: self position)",
  22748. referencedClasses: [],
  22749. //>>excludeEnd("ide");
  22750. messageSends: ["ifTrue:ifFalse:", "atEnd", "setCollection:", ",", "collection", "copyFrom:to:", "position", "+", "size", "position:", "setStreamSize:", "max:", "streamSize"]
  22751. }),
  22752. $globals.StringStream);
  22753. $core.addMethod(
  22754. $core.method({
  22755. selector: "nextPutString:",
  22756. protocol: 'writing',
  22757. fn: function (aString){
  22758. var self=this;
  22759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22760. return $core.withContext(function($ctx1) {
  22761. //>>excludeEnd("ctx");
  22762. self._nextPutAll_(aString);
  22763. return self;
  22764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22765. }, function($ctx1) {$ctx1.fill(self,"nextPutString:",{aString:aString},$globals.StringStream)});
  22766. //>>excludeEnd("ctx");
  22767. },
  22768. //>>excludeStart("ide", pragmas.excludeIdeData);
  22769. args: ["aString"],
  22770. source: "nextPutString: aString\x0a\x09self nextPutAll: aString",
  22771. referencedClasses: [],
  22772. //>>excludeEnd("ide");
  22773. messageSends: ["nextPutAll:"]
  22774. }),
  22775. $globals.StringStream);
  22776. $core.addMethod(
  22777. $core.method({
  22778. selector: "space",
  22779. protocol: 'writing',
  22780. fn: function (){
  22781. var self=this;
  22782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22783. return $core.withContext(function($ctx1) {
  22784. //>>excludeEnd("ctx");
  22785. self._nextPut_(" ");
  22786. return self;
  22787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22788. }, function($ctx1) {$ctx1.fill(self,"space",{},$globals.StringStream)});
  22789. //>>excludeEnd("ctx");
  22790. },
  22791. //>>excludeStart("ide", pragmas.excludeIdeData);
  22792. args: [],
  22793. source: "space\x0a\x09self nextPut: ' '",
  22794. referencedClasses: [],
  22795. //>>excludeEnd("ide");
  22796. messageSends: ["nextPut:"]
  22797. }),
  22798. $globals.StringStream);
  22799. $core.addMethod(
  22800. $core.method({
  22801. selector: "tab",
  22802. protocol: 'writing',
  22803. fn: function (){
  22804. var self=this;
  22805. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  22806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22807. return $core.withContext(function($ctx1) {
  22808. //>>excludeEnd("ctx");
  22809. var $1;
  22810. $1=self._nextPutAll_($recv($String())._tab());
  22811. return $1;
  22812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22813. }, function($ctx1) {$ctx1.fill(self,"tab",{},$globals.StringStream)});
  22814. //>>excludeEnd("ctx");
  22815. },
  22816. //>>excludeStart("ide", pragmas.excludeIdeData);
  22817. args: [],
  22818. source: "tab\x0a\x09^ self nextPutAll: String tab",
  22819. referencedClasses: ["String"],
  22820. //>>excludeEnd("ide");
  22821. messageSends: ["nextPutAll:", "tab"]
  22822. }),
  22823. $globals.StringStream);
  22824. });
  22825. define("amber_core/Kernel-Infrastructure", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Collections"], function($boot){
  22826. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  22827. var smalltalk=$core,_st=$recv,globals=$globals;
  22828. $core.addPackage('Kernel-Infrastructure');
  22829. $core.packages["Kernel-Infrastructure"].transport = {"type":"amd","amdNamespace":"amber_core"};
  22830. $core.addClass('ConsoleErrorHandler', $globals.Object, [], 'Kernel-Infrastructure');
  22831. //>>excludeStart("ide", pragmas.excludeIdeData);
  22832. $globals.ConsoleErrorHandler.comment="I am manage Smalltalk errors, displaying the stack in the console.";
  22833. //>>excludeEnd("ide");
  22834. $core.addMethod(
  22835. $core.method({
  22836. selector: "handleError:",
  22837. protocol: 'error handling',
  22838. fn: function (anError){
  22839. var self=this;
  22840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22841. return $core.withContext(function($ctx1) {
  22842. //>>excludeEnd("ctx");
  22843. var $1,$receiver;
  22844. $1=$recv(anError)._context();
  22845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22846. $ctx1.sendIdx["context"]=1;
  22847. //>>excludeEnd("ctx");
  22848. if(($receiver = $1) == null || $receiver.isNil){
  22849. $1;
  22850. } else {
  22851. self._logErrorContext_($recv(anError)._context());
  22852. };
  22853. self._logError_(anError);
  22854. return self;
  22855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22856. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.ConsoleErrorHandler)});
  22857. //>>excludeEnd("ctx");
  22858. },
  22859. //>>excludeStart("ide", pragmas.excludeIdeData);
  22860. args: ["anError"],
  22861. source: "handleError: anError\x0a\x09anError context ifNotNil: [ self logErrorContext: anError context ].\x0a\x09self logError: anError",
  22862. referencedClasses: [],
  22863. //>>excludeEnd("ide");
  22864. messageSends: ["ifNotNil:", "context", "logErrorContext:", "logError:"]
  22865. }),
  22866. $globals.ConsoleErrorHandler);
  22867. $core.addMethod(
  22868. $core.method({
  22869. selector: "log:",
  22870. protocol: 'private',
  22871. fn: function (aString){
  22872. var self=this;
  22873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22874. return $core.withContext(function($ctx1) {
  22875. //>>excludeEnd("ctx");
  22876. $recv(console)._log_(aString);
  22877. return self;
  22878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22879. }, function($ctx1) {$ctx1.fill(self,"log:",{aString:aString},$globals.ConsoleErrorHandler)});
  22880. //>>excludeEnd("ctx");
  22881. },
  22882. //>>excludeStart("ide", pragmas.excludeIdeData);
  22883. args: ["aString"],
  22884. source: "log: aString\x0a\x09console log: aString",
  22885. referencedClasses: [],
  22886. //>>excludeEnd("ide");
  22887. messageSends: ["log:"]
  22888. }),
  22889. $globals.ConsoleErrorHandler);
  22890. $core.addMethod(
  22891. $core.method({
  22892. selector: "logContext:",
  22893. protocol: 'private',
  22894. fn: function (aContext){
  22895. var self=this;
  22896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22897. return $core.withContext(function($ctx1) {
  22898. //>>excludeEnd("ctx");
  22899. var $1,$receiver;
  22900. $1=$recv(aContext)._home();
  22901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22902. $ctx1.sendIdx["home"]=1;
  22903. //>>excludeEnd("ctx");
  22904. if(($receiver = $1) == null || $receiver.isNil){
  22905. $1;
  22906. } else {
  22907. self._logContext_($recv(aContext)._home());
  22908. };
  22909. self._log_($recv(aContext)._asString());
  22910. return self;
  22911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22912. }, function($ctx1) {$ctx1.fill(self,"logContext:",{aContext:aContext},$globals.ConsoleErrorHandler)});
  22913. //>>excludeEnd("ctx");
  22914. },
  22915. //>>excludeStart("ide", pragmas.excludeIdeData);
  22916. args: ["aContext"],
  22917. source: "logContext: aContext\x0a\x09aContext home ifNotNil: [\x0a\x09\x09self logContext: aContext home ].\x0a\x09self log: aContext asString",
  22918. referencedClasses: [],
  22919. //>>excludeEnd("ide");
  22920. messageSends: ["ifNotNil:", "home", "logContext:", "log:", "asString"]
  22921. }),
  22922. $globals.ConsoleErrorHandler);
  22923. $core.addMethod(
  22924. $core.method({
  22925. selector: "logError:",
  22926. protocol: 'private',
  22927. fn: function (anError){
  22928. var self=this;
  22929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22930. return $core.withContext(function($ctx1) {
  22931. //>>excludeEnd("ctx");
  22932. self._log_($recv(anError)._messageText());
  22933. return self;
  22934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22935. }, function($ctx1) {$ctx1.fill(self,"logError:",{anError:anError},$globals.ConsoleErrorHandler)});
  22936. //>>excludeEnd("ctx");
  22937. },
  22938. //>>excludeStart("ide", pragmas.excludeIdeData);
  22939. args: ["anError"],
  22940. source: "logError: anError\x0a\x09self log: anError messageText",
  22941. referencedClasses: [],
  22942. //>>excludeEnd("ide");
  22943. messageSends: ["log:", "messageText"]
  22944. }),
  22945. $globals.ConsoleErrorHandler);
  22946. $core.addMethod(
  22947. $core.method({
  22948. selector: "logErrorContext:",
  22949. protocol: 'private',
  22950. fn: function (aContext){
  22951. var self=this;
  22952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22953. return $core.withContext(function($ctx1) {
  22954. //>>excludeEnd("ctx");
  22955. var $1,$receiver;
  22956. if(($receiver = aContext) == null || $receiver.isNil){
  22957. aContext;
  22958. } else {
  22959. $1=$recv(aContext)._home();
  22960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22961. $ctx1.sendIdx["home"]=1;
  22962. //>>excludeEnd("ctx");
  22963. if(($receiver = $1) == null || $receiver.isNil){
  22964. $1;
  22965. } else {
  22966. self._logContext_($recv(aContext)._home());
  22967. };
  22968. };
  22969. return self;
  22970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22971. }, function($ctx1) {$ctx1.fill(self,"logErrorContext:",{aContext:aContext},$globals.ConsoleErrorHandler)});
  22972. //>>excludeEnd("ctx");
  22973. },
  22974. //>>excludeStart("ide", pragmas.excludeIdeData);
  22975. args: ["aContext"],
  22976. source: "logErrorContext: aContext\x0a\x09aContext ifNotNil: [\x0a\x09\x09aContext home ifNotNil: [\x0a\x09\x09\x09self logContext: aContext home ]]",
  22977. referencedClasses: [],
  22978. //>>excludeEnd("ide");
  22979. messageSends: ["ifNotNil:", "home", "logContext:"]
  22980. }),
  22981. $globals.ConsoleErrorHandler);
  22982. $globals.ConsoleErrorHandler.klass.iVarNames = ['current'];
  22983. $core.addMethod(
  22984. $core.method({
  22985. selector: "initialize",
  22986. protocol: 'initialization',
  22987. fn: function (){
  22988. var self=this;
  22989. function $ErrorHandler(){return $globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
  22990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22991. return $core.withContext(function($ctx1) {
  22992. //>>excludeEnd("ctx");
  22993. $recv($ErrorHandler())._registerIfNone_(self._new());
  22994. return self;
  22995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22996. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ConsoleErrorHandler.klass)});
  22997. //>>excludeEnd("ctx");
  22998. },
  22999. //>>excludeStart("ide", pragmas.excludeIdeData);
  23000. args: [],
  23001. source: "initialize\x0a\x09ErrorHandler registerIfNone: self new",
  23002. referencedClasses: ["ErrorHandler"],
  23003. //>>excludeEnd("ide");
  23004. messageSends: ["registerIfNone:", "new"]
  23005. }),
  23006. $globals.ConsoleErrorHandler.klass);
  23007. $core.addClass('InterfacingObject', $globals.Object, [], 'Kernel-Infrastructure');
  23008. //>>excludeStart("ide", pragmas.excludeIdeData);
  23009. $globals.InterfacingObject.comment="I am superclass of all object that interface with user or environment. `Widget` and a few other classes are subclasses of me. I delegate all of the above APIs to `PlatformInterface`.\x0a\x0a## API\x0a\x0a self alert: 'Hey, there is a problem'.\x0a self confirm: 'Affirmative?'.\x0a self prompt: 'Your name:'.\x0a\x0a self ajax: #{\x0a 'url' -> '/patch.js'. 'type' -> 'GET'. dataType->'script'\x0a }.";
  23010. //>>excludeEnd("ide");
  23011. $core.addMethod(
  23012. $core.method({
  23013. selector: "ajax:",
  23014. protocol: 'actions',
  23015. fn: function (anObject){
  23016. var self=this;
  23017. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  23018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23019. return $core.withContext(function($ctx1) {
  23020. //>>excludeEnd("ctx");
  23021. var $1;
  23022. $1=$recv($PlatformInterface())._ajax_(anObject);
  23023. return $1;
  23024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23025. }, function($ctx1) {$ctx1.fill(self,"ajax:",{anObject:anObject},$globals.InterfacingObject)});
  23026. //>>excludeEnd("ctx");
  23027. },
  23028. //>>excludeStart("ide", pragmas.excludeIdeData);
  23029. args: ["anObject"],
  23030. source: "ajax: anObject\x0a\x09^ PlatformInterface ajax: anObject",
  23031. referencedClasses: ["PlatformInterface"],
  23032. //>>excludeEnd("ide");
  23033. messageSends: ["ajax:"]
  23034. }),
  23035. $globals.InterfacingObject);
  23036. $core.addMethod(
  23037. $core.method({
  23038. selector: "alert:",
  23039. protocol: 'actions',
  23040. fn: function (aString){
  23041. var self=this;
  23042. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  23043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23044. return $core.withContext(function($ctx1) {
  23045. //>>excludeEnd("ctx");
  23046. var $1;
  23047. $1=$recv($PlatformInterface())._alert_(aString);
  23048. return $1;
  23049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23050. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString},$globals.InterfacingObject)});
  23051. //>>excludeEnd("ctx");
  23052. },
  23053. //>>excludeStart("ide", pragmas.excludeIdeData);
  23054. args: ["aString"],
  23055. source: "alert: aString\x0a\x09^ PlatformInterface alert: aString",
  23056. referencedClasses: ["PlatformInterface"],
  23057. //>>excludeEnd("ide");
  23058. messageSends: ["alert:"]
  23059. }),
  23060. $globals.InterfacingObject);
  23061. $core.addMethod(
  23062. $core.method({
  23063. selector: "confirm:",
  23064. protocol: 'actions',
  23065. fn: function (aString){
  23066. var self=this;
  23067. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  23068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23069. return $core.withContext(function($ctx1) {
  23070. //>>excludeEnd("ctx");
  23071. var $1;
  23072. $1=$recv($PlatformInterface())._confirm_(aString);
  23073. return $1;
  23074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23075. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString},$globals.InterfacingObject)});
  23076. //>>excludeEnd("ctx");
  23077. },
  23078. //>>excludeStart("ide", pragmas.excludeIdeData);
  23079. args: ["aString"],
  23080. source: "confirm: aString\x0a\x09^ PlatformInterface confirm: aString",
  23081. referencedClasses: ["PlatformInterface"],
  23082. //>>excludeEnd("ide");
  23083. messageSends: ["confirm:"]
  23084. }),
  23085. $globals.InterfacingObject);
  23086. $core.addMethod(
  23087. $core.method({
  23088. selector: "prompt:",
  23089. protocol: 'actions',
  23090. fn: function (aString){
  23091. var self=this;
  23092. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  23093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23094. return $core.withContext(function($ctx1) {
  23095. //>>excludeEnd("ctx");
  23096. var $1;
  23097. $1=$recv($PlatformInterface())._prompt_(aString);
  23098. return $1;
  23099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23100. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString},$globals.InterfacingObject)});
  23101. //>>excludeEnd("ctx");
  23102. },
  23103. //>>excludeStart("ide", pragmas.excludeIdeData);
  23104. args: ["aString"],
  23105. source: "prompt: aString\x0a\x09^ PlatformInterface prompt: aString",
  23106. referencedClasses: ["PlatformInterface"],
  23107. //>>excludeEnd("ide");
  23108. messageSends: ["prompt:"]
  23109. }),
  23110. $globals.InterfacingObject);
  23111. $core.addMethod(
  23112. $core.method({
  23113. selector: "prompt:default:",
  23114. protocol: 'actions',
  23115. fn: function (aString,defaultString){
  23116. var self=this;
  23117. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  23118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23119. return $core.withContext(function($ctx1) {
  23120. //>>excludeEnd("ctx");
  23121. var $1;
  23122. $1=$recv($PlatformInterface())._prompt_default_(aString,defaultString);
  23123. return $1;
  23124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23125. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString},$globals.InterfacingObject)});
  23126. //>>excludeEnd("ctx");
  23127. },
  23128. //>>excludeStart("ide", pragmas.excludeIdeData);
  23129. args: ["aString", "defaultString"],
  23130. source: "prompt: aString default: defaultString\x0a\x09^ PlatformInterface prompt: aString default: defaultString",
  23131. referencedClasses: ["PlatformInterface"],
  23132. //>>excludeEnd("ide");
  23133. messageSends: ["prompt:default:"]
  23134. }),
  23135. $globals.InterfacingObject);
  23136. $core.addClass('Environment', $globals.InterfacingObject, [], 'Kernel-Infrastructure');
  23137. //>>excludeStart("ide", pragmas.excludeIdeData);
  23138. $globals.Environment.comment="I provide an unified entry point to manipulate Amber packages, classes and methods.\x0a\x0aTypical use cases include IDEs, remote access and restricting browsing.";
  23139. //>>excludeEnd("ide");
  23140. $core.addMethod(
  23141. $core.method({
  23142. selector: "addInstVarNamed:to:",
  23143. protocol: 'compiling',
  23144. fn: function (aString,aClass){
  23145. var self=this;
  23146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23147. return $core.withContext(function($ctx1) {
  23148. //>>excludeEnd("ctx");
  23149. var $1,$2,$3,$4,$5;
  23150. $1=self._classBuilder();
  23151. $2=$recv(aClass)._superclass();
  23152. $3=$recv(aClass)._name();
  23153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23154. $ctx1.sendIdx["name"]=1;
  23155. //>>excludeEnd("ctx");
  23156. $4=$recv($recv(aClass)._instanceVariableNames())._copy();
  23157. $recv($4)._add_(aString);
  23158. $5=$recv($4)._yourself();
  23159. $recv($1)._addSubclassOf_named_instanceVariableNames_package_($2,$3,$5,$recv($recv(aClass)._package())._name());
  23160. return self;
  23161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23162. }, function($ctx1) {$ctx1.fill(self,"addInstVarNamed:to:",{aString:aString,aClass:aClass},$globals.Environment)});
  23163. //>>excludeEnd("ctx");
  23164. },
  23165. //>>excludeStart("ide", pragmas.excludeIdeData);
  23166. args: ["aString", "aClass"],
  23167. source: "addInstVarNamed: aString to: aClass\x0a\x09self classBuilder\x0a\x09\x09addSubclassOf: aClass superclass \x0a\x09\x09named: aClass name \x0a\x09\x09instanceVariableNames: (aClass instanceVariableNames copy add: aString; yourself)\x0a\x09\x09package: aClass package name",
  23168. referencedClasses: [],
  23169. //>>excludeEnd("ide");
  23170. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "classBuilder", "superclass", "name", "add:", "copy", "instanceVariableNames", "yourself", "package"]
  23171. }),
  23172. $globals.Environment);
  23173. $core.addMethod(
  23174. $core.method({
  23175. selector: "allSelectors",
  23176. protocol: 'accessing',
  23177. fn: function (){
  23178. var self=this;
  23179. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23181. return $core.withContext(function($ctx1) {
  23182. //>>excludeEnd("ctx");
  23183. var $1;
  23184. $1=$recv($recv($Smalltalk())._core())._allSelectors();
  23185. return $1;
  23186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23187. }, function($ctx1) {$ctx1.fill(self,"allSelectors",{},$globals.Environment)});
  23188. //>>excludeEnd("ctx");
  23189. },
  23190. //>>excludeStart("ide", pragmas.excludeIdeData);
  23191. args: [],
  23192. source: "allSelectors\x0a\x09^ Smalltalk core allSelectors",
  23193. referencedClasses: ["Smalltalk"],
  23194. //>>excludeEnd("ide");
  23195. messageSends: ["allSelectors", "core"]
  23196. }),
  23197. $globals.Environment);
  23198. $core.addMethod(
  23199. $core.method({
  23200. selector: "availableClassNames",
  23201. protocol: 'accessing',
  23202. fn: function (){
  23203. var self=this;
  23204. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23206. return $core.withContext(function($ctx1) {
  23207. //>>excludeEnd("ctx");
  23208. var $1;
  23209. $1=$recv($recv($Smalltalk())._classes())._collect_((function(each){
  23210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23211. return $core.withContext(function($ctx2) {
  23212. //>>excludeEnd("ctx");
  23213. return $recv(each)._name();
  23214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23215. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  23216. //>>excludeEnd("ctx");
  23217. }));
  23218. return $1;
  23219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23220. }, function($ctx1) {$ctx1.fill(self,"availableClassNames",{},$globals.Environment)});
  23221. //>>excludeEnd("ctx");
  23222. },
  23223. //>>excludeStart("ide", pragmas.excludeIdeData);
  23224. args: [],
  23225. source: "availableClassNames\x0a\x09^ Smalltalk classes \x0a\x09\x09collect: [ :each | each name ]",
  23226. referencedClasses: ["Smalltalk"],
  23227. //>>excludeEnd("ide");
  23228. messageSends: ["collect:", "classes", "name"]
  23229. }),
  23230. $globals.Environment);
  23231. $core.addMethod(
  23232. $core.method({
  23233. selector: "availablePackageNames",
  23234. protocol: 'accessing',
  23235. fn: function (){
  23236. var self=this;
  23237. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23239. return $core.withContext(function($ctx1) {
  23240. //>>excludeEnd("ctx");
  23241. var $1;
  23242. $1=$recv($recv($Smalltalk())._packages())._collect_((function(each){
  23243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23244. return $core.withContext(function($ctx2) {
  23245. //>>excludeEnd("ctx");
  23246. return $recv(each)._name();
  23247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23248. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  23249. //>>excludeEnd("ctx");
  23250. }));
  23251. return $1;
  23252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23253. }, function($ctx1) {$ctx1.fill(self,"availablePackageNames",{},$globals.Environment)});
  23254. //>>excludeEnd("ctx");
  23255. },
  23256. //>>excludeStart("ide", pragmas.excludeIdeData);
  23257. args: [],
  23258. source: "availablePackageNames\x0a\x09^ Smalltalk packages \x0a\x09\x09collect: [ :each | each name ]",
  23259. referencedClasses: ["Smalltalk"],
  23260. //>>excludeEnd("ide");
  23261. messageSends: ["collect:", "packages", "name"]
  23262. }),
  23263. $globals.Environment);
  23264. $core.addMethod(
  23265. $core.method({
  23266. selector: "availableProtocolsFor:",
  23267. protocol: 'accessing',
  23268. fn: function (aClass){
  23269. var self=this;
  23270. var protocols;
  23271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23272. return $core.withContext(function($ctx1) {
  23273. //>>excludeEnd("ctx");
  23274. var $1,$2,$receiver;
  23275. protocols=$recv(aClass)._protocols();
  23276. $1=$recv(aClass)._superclass();
  23277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23278. $ctx1.sendIdx["superclass"]=1;
  23279. //>>excludeEnd("ctx");
  23280. if(($receiver = $1) == null || $receiver.isNil){
  23281. $1;
  23282. } else {
  23283. $recv(protocols)._addAll_(self._availableProtocolsFor_($recv(aClass)._superclass()));
  23284. };
  23285. $2=$recv($recv($recv(protocols)._asSet())._asArray())._sort();
  23286. return $2;
  23287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23288. }, function($ctx1) {$ctx1.fill(self,"availableProtocolsFor:",{aClass:aClass,protocols:protocols},$globals.Environment)});
  23289. //>>excludeEnd("ctx");
  23290. },
  23291. //>>excludeStart("ide", pragmas.excludeIdeData);
  23292. args: ["aClass"],
  23293. source: "availableProtocolsFor: aClass\x0a\x09| protocols |\x0a\x09\x0a\x09protocols := aClass protocols.\x0a\x09aClass superclass ifNotNil: [ protocols addAll: (self availableProtocolsFor: aClass superclass) ].\x0a\x09^ protocols asSet asArray sort",
  23294. referencedClasses: [],
  23295. //>>excludeEnd("ide");
  23296. messageSends: ["protocols", "ifNotNil:", "superclass", "addAll:", "availableProtocolsFor:", "sort", "asArray", "asSet"]
  23297. }),
  23298. $globals.Environment);
  23299. $core.addMethod(
  23300. $core.method({
  23301. selector: "classBuilder",
  23302. protocol: 'accessing',
  23303. fn: function (){
  23304. var self=this;
  23305. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  23306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23307. return $core.withContext(function($ctx1) {
  23308. //>>excludeEnd("ctx");
  23309. var $1;
  23310. $1=$recv($ClassBuilder())._new();
  23311. return $1;
  23312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23313. }, function($ctx1) {$ctx1.fill(self,"classBuilder",{},$globals.Environment)});
  23314. //>>excludeEnd("ctx");
  23315. },
  23316. //>>excludeStart("ide", pragmas.excludeIdeData);
  23317. args: [],
  23318. source: "classBuilder\x0a\x09^ ClassBuilder new",
  23319. referencedClasses: ["ClassBuilder"],
  23320. //>>excludeEnd("ide");
  23321. messageSends: ["new"]
  23322. }),
  23323. $globals.Environment);
  23324. $core.addMethod(
  23325. $core.method({
  23326. selector: "classNamed:",
  23327. protocol: 'accessing',
  23328. fn: function (aString){
  23329. var self=this;
  23330. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23332. return $core.withContext(function($ctx1) {
  23333. //>>excludeEnd("ctx");
  23334. var $2,$1,$receiver;
  23335. $2=$recv($recv($Smalltalk())._globals())._at_($recv(aString)._asSymbol());
  23336. if(($receiver = $2) == null || $receiver.isNil){
  23337. $1=self._error_("Invalid class name");
  23338. } else {
  23339. $1=$2;
  23340. };
  23341. return $1;
  23342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23343. }, function($ctx1) {$ctx1.fill(self,"classNamed:",{aString:aString},$globals.Environment)});
  23344. //>>excludeEnd("ctx");
  23345. },
  23346. //>>excludeStart("ide", pragmas.excludeIdeData);
  23347. args: ["aString"],
  23348. source: "classNamed: aString\x0a\x09^ (Smalltalk globals at: aString asSymbol)\x0a\x09\x09ifNil: [ self error: 'Invalid class name' ]",
  23349. referencedClasses: ["Smalltalk"],
  23350. //>>excludeEnd("ide");
  23351. messageSends: ["ifNil:", "at:", "globals", "asSymbol", "error:"]
  23352. }),
  23353. $globals.Environment);
  23354. $core.addMethod(
  23355. $core.method({
  23356. selector: "classes",
  23357. protocol: 'accessing',
  23358. fn: function (){
  23359. var self=this;
  23360. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23362. return $core.withContext(function($ctx1) {
  23363. //>>excludeEnd("ctx");
  23364. var $1;
  23365. $1=$recv($Smalltalk())._classes();
  23366. return $1;
  23367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23368. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.Environment)});
  23369. //>>excludeEnd("ctx");
  23370. },
  23371. //>>excludeStart("ide", pragmas.excludeIdeData);
  23372. args: [],
  23373. source: "classes\x0a\x09^ Smalltalk classes",
  23374. referencedClasses: ["Smalltalk"],
  23375. //>>excludeEnd("ide");
  23376. messageSends: ["classes"]
  23377. }),
  23378. $globals.Environment);
  23379. $core.addMethod(
  23380. $core.method({
  23381. selector: "commitPackage:onSuccess:onError:",
  23382. protocol: 'actions',
  23383. fn: function (aPackage,aBlock,anotherBlock){
  23384. var self=this;
  23385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23386. return $core.withContext(function($ctx1) {
  23387. //>>excludeEnd("ctx");
  23388. $recv($recv(aPackage)._transport())._commitOnSuccess_onError_(aBlock,anotherBlock);
  23389. return self;
  23390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23391. }, function($ctx1) {$ctx1.fill(self,"commitPackage:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.Environment)});
  23392. //>>excludeEnd("ctx");
  23393. },
  23394. //>>excludeStart("ide", pragmas.excludeIdeData);
  23395. args: ["aPackage", "aBlock", "anotherBlock"],
  23396. source: "commitPackage: aPackage onSuccess: aBlock onError: anotherBlock\x0a\x09aPackage transport\x0a\x09\x09commitOnSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  23397. referencedClasses: [],
  23398. //>>excludeEnd("ide");
  23399. messageSends: ["commitOnSuccess:onError:", "transport"]
  23400. }),
  23401. $globals.Environment);
  23402. $core.addMethod(
  23403. $core.method({
  23404. selector: "compileClassComment:for:",
  23405. protocol: 'compiling',
  23406. fn: function (aString,aClass){
  23407. var self=this;
  23408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23409. return $core.withContext(function($ctx1) {
  23410. //>>excludeEnd("ctx");
  23411. $recv(aClass)._comment_(aString);
  23412. return self;
  23413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23414. }, function($ctx1) {$ctx1.fill(self,"compileClassComment:for:",{aString:aString,aClass:aClass},$globals.Environment)});
  23415. //>>excludeEnd("ctx");
  23416. },
  23417. //>>excludeStart("ide", pragmas.excludeIdeData);
  23418. args: ["aString", "aClass"],
  23419. source: "compileClassComment: aString for: aClass\x0a\x09aClass comment: aString",
  23420. referencedClasses: [],
  23421. //>>excludeEnd("ide");
  23422. messageSends: ["comment:"]
  23423. }),
  23424. $globals.Environment);
  23425. $core.addMethod(
  23426. $core.method({
  23427. selector: "compileClassDefinition:",
  23428. protocol: 'compiling',
  23429. fn: function (aString){
  23430. var self=this;
  23431. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  23432. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  23433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23434. return $core.withContext(function($ctx1) {
  23435. //>>excludeEnd("ctx");
  23436. $recv((function(){
  23437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23438. return $core.withContext(function($ctx2) {
  23439. //>>excludeEnd("ctx");
  23440. return self._evaluate_for_(aString,$recv($DoIt())._new());
  23441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23442. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  23443. //>>excludeEnd("ctx");
  23444. }))._on_do_($Error(),(function(error){
  23445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23446. return $core.withContext(function($ctx2) {
  23447. //>>excludeEnd("ctx");
  23448. return self._alert_($recv(error)._messageText());
  23449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23450. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  23451. //>>excludeEnd("ctx");
  23452. }));
  23453. return self;
  23454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23455. }, function($ctx1) {$ctx1.fill(self,"compileClassDefinition:",{aString:aString},$globals.Environment)});
  23456. //>>excludeEnd("ctx");
  23457. },
  23458. //>>excludeStart("ide", pragmas.excludeIdeData);
  23459. args: ["aString"],
  23460. source: "compileClassDefinition: aString\x0a\x09[ self evaluate: aString for: DoIt new ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :error | self alert: error messageText ]",
  23461. referencedClasses: ["DoIt", "Error"],
  23462. //>>excludeEnd("ide");
  23463. messageSends: ["on:do:", "evaluate:for:", "new", "alert:", "messageText"]
  23464. }),
  23465. $globals.Environment);
  23466. $core.addMethod(
  23467. $core.method({
  23468. selector: "compileMethod:for:protocol:",
  23469. protocol: 'compiling',
  23470. fn: function (sourceCode,class_,protocol){
  23471. var self=this;
  23472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23473. return $core.withContext(function($ctx1) {
  23474. //>>excludeEnd("ctx");
  23475. var $1;
  23476. $1=$recv(class_)._compile_protocol_(sourceCode,protocol);
  23477. return $1;
  23478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23479. }, function($ctx1) {$ctx1.fill(self,"compileMethod:for:protocol:",{sourceCode:sourceCode,class_:class_,protocol:protocol},$globals.Environment)});
  23480. //>>excludeEnd("ctx");
  23481. },
  23482. //>>excludeStart("ide", pragmas.excludeIdeData);
  23483. args: ["sourceCode", "class", "protocol"],
  23484. source: "compileMethod: sourceCode for: class protocol: protocol\x0a\x09^ class\x0a\x09\x09compile: sourceCode\x0a\x09\x09protocol: protocol",
  23485. referencedClasses: [],
  23486. //>>excludeEnd("ide");
  23487. messageSends: ["compile:protocol:"]
  23488. }),
  23489. $globals.Environment);
  23490. $core.addMethod(
  23491. $core.method({
  23492. selector: "copyClass:to:",
  23493. protocol: 'actions',
  23494. fn: function (aClass,aClassName){
  23495. var self=this;
  23496. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23497. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  23498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23499. return $core.withContext(function($ctx1) {
  23500. //>>excludeEnd("ctx");
  23501. var $1,$2,$receiver;
  23502. $1=$recv($recv($Smalltalk())._globals())._at_(aClassName);
  23503. if(($receiver = $1) == null || $receiver.isNil){
  23504. $1;
  23505. } else {
  23506. $2=$recv("A class named ".__comma(aClassName)).__comma(" already exists");
  23507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23508. $ctx1.sendIdx[","]=1;
  23509. //>>excludeEnd("ctx");
  23510. self._error_($2);
  23511. };
  23512. $recv($recv($ClassBuilder())._new())._copyClass_named_(aClass,aClassName);
  23513. return self;
  23514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23515. }, function($ctx1) {$ctx1.fill(self,"copyClass:to:",{aClass:aClass,aClassName:aClassName},$globals.Environment)});
  23516. //>>excludeEnd("ctx");
  23517. },
  23518. //>>excludeStart("ide", pragmas.excludeIdeData);
  23519. args: ["aClass", "aClassName"],
  23520. source: "copyClass: aClass to: aClassName\x0a\x09(Smalltalk globals at: aClassName)\x0a\x09\x09ifNotNil: [ self error: 'A class named ', aClassName, ' already exists' ].\x0a\x09\x09\x0a\x09ClassBuilder new copyClass: aClass named: aClassName",
  23521. referencedClasses: ["Smalltalk", "ClassBuilder"],
  23522. //>>excludeEnd("ide");
  23523. messageSends: ["ifNotNil:", "at:", "globals", "error:", ",", "copyClass:named:", "new"]
  23524. }),
  23525. $globals.Environment);
  23526. $core.addMethod(
  23527. $core.method({
  23528. selector: "doItReceiver",
  23529. protocol: 'accessing',
  23530. fn: function (){
  23531. var self=this;
  23532. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  23533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23534. return $core.withContext(function($ctx1) {
  23535. //>>excludeEnd("ctx");
  23536. var $1;
  23537. $1=$recv($DoIt())._new();
  23538. return $1;
  23539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23540. }, function($ctx1) {$ctx1.fill(self,"doItReceiver",{},$globals.Environment)});
  23541. //>>excludeEnd("ctx");
  23542. },
  23543. //>>excludeStart("ide", pragmas.excludeIdeData);
  23544. args: [],
  23545. source: "doItReceiver\x0a\x09^ DoIt new",
  23546. referencedClasses: ["DoIt"],
  23547. //>>excludeEnd("ide");
  23548. messageSends: ["new"]
  23549. }),
  23550. $globals.Environment);
  23551. $core.addMethod(
  23552. $core.method({
  23553. selector: "evaluate:for:",
  23554. protocol: 'evaluating',
  23555. fn: function (aString,anObject){
  23556. var self=this;
  23557. function $Evaluator(){return $globals.Evaluator||(typeof Evaluator=="undefined"?nil:Evaluator)}
  23558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23559. return $core.withContext(function($ctx1) {
  23560. //>>excludeEnd("ctx");
  23561. var $1;
  23562. $1=$recv($Evaluator())._evaluate_for_(aString,anObject);
  23563. return $1;
  23564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23565. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Environment)});
  23566. //>>excludeEnd("ctx");
  23567. },
  23568. //>>excludeStart("ide", pragmas.excludeIdeData);
  23569. args: ["aString", "anObject"],
  23570. source: "evaluate: aString for: anObject\x0a\x09^ Evaluator evaluate: aString for: anObject",
  23571. referencedClasses: ["Evaluator"],
  23572. //>>excludeEnd("ide");
  23573. messageSends: ["evaluate:for:"]
  23574. }),
  23575. $globals.Environment);
  23576. $core.addMethod(
  23577. $core.method({
  23578. selector: "evaluate:on:do:",
  23579. protocol: 'error handling',
  23580. fn: function (aBlock,anErrorClass,exceptionBlock){
  23581. var self=this;
  23582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23583. return $core.withContext(function($ctx1) {
  23584. //>>excludeEnd("ctx");
  23585. var $1;
  23586. $recv(aBlock)._tryCatch_((function(exception){
  23587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23588. return $core.withContext(function($ctx2) {
  23589. //>>excludeEnd("ctx");
  23590. $1=$recv(exception)._isKindOf_(self._classNamed_($recv(anErrorClass)._name()));
  23591. if($core.assert($1)){
  23592. return $recv(exceptionBlock)._value_(exception);
  23593. } else {
  23594. return $recv(exception)._signal();
  23595. };
  23596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23597. }, function($ctx2) {$ctx2.fillBlock({exception:exception},$ctx1,1)});
  23598. //>>excludeEnd("ctx");
  23599. }));
  23600. return self;
  23601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23602. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:do:",{aBlock:aBlock,anErrorClass:anErrorClass,exceptionBlock:exceptionBlock},$globals.Environment)});
  23603. //>>excludeEnd("ctx");
  23604. },
  23605. //>>excludeStart("ide", pragmas.excludeIdeData);
  23606. args: ["aBlock", "anErrorClass", "exceptionBlock"],
  23607. source: "evaluate: aBlock on: anErrorClass do: exceptionBlock\x0a\x09\x22Evaluate a block and catch exceptions happening on the environment stack\x22\x0a\x09\x0a\x09aBlock tryCatch: [ :exception | \x0a\x09\x09(exception isKindOf: (self classNamed: anErrorClass name))\x0a\x09\x09\x09ifTrue: [ exceptionBlock value: exception ]\x0a \x09\x09\x09ifFalse: [ exception signal ] ]",
  23608. referencedClasses: [],
  23609. //>>excludeEnd("ide");
  23610. messageSends: ["tryCatch:", "ifTrue:ifFalse:", "isKindOf:", "classNamed:", "name", "value:", "signal"]
  23611. }),
  23612. $globals.Environment);
  23613. $core.addMethod(
  23614. $core.method({
  23615. selector: "inspect:",
  23616. protocol: 'actions',
  23617. fn: function (anObject){
  23618. var self=this;
  23619. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  23620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23621. return $core.withContext(function($ctx1) {
  23622. //>>excludeEnd("ctx");
  23623. $recv($Inspector())._inspect_(anObject);
  23624. return self;
  23625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23626. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Environment)});
  23627. //>>excludeEnd("ctx");
  23628. },
  23629. //>>excludeStart("ide", pragmas.excludeIdeData);
  23630. args: ["anObject"],
  23631. source: "inspect: anObject\x0a\x09Inspector inspect: anObject",
  23632. referencedClasses: ["Inspector"],
  23633. //>>excludeEnd("ide");
  23634. messageSends: ["inspect:"]
  23635. }),
  23636. $globals.Environment);
  23637. $core.addMethod(
  23638. $core.method({
  23639. selector: "moveClass:toPackage:",
  23640. protocol: 'actions',
  23641. fn: function (aClass,aPackageName){
  23642. var self=this;
  23643. var package_;
  23644. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  23645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23646. return $core.withContext(function($ctx1) {
  23647. //>>excludeEnd("ctx");
  23648. var $1,$2,$receiver;
  23649. package_=$recv($Package())._named_(aPackageName);
  23650. $1=package_;
  23651. if(($receiver = $1) == null || $receiver.isNil){
  23652. self._error_("Invalid package name");
  23653. } else {
  23654. $1;
  23655. };
  23656. $2=$recv(package_).__eq_eq($recv(aClass)._package());
  23657. if($core.assert($2)){
  23658. return self;
  23659. };
  23660. $recv(aClass)._package_(package_);
  23661. return self;
  23662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23663. }, function($ctx1) {$ctx1.fill(self,"moveClass:toPackage:",{aClass:aClass,aPackageName:aPackageName,package_:package_},$globals.Environment)});
  23664. //>>excludeEnd("ctx");
  23665. },
  23666. //>>excludeStart("ide", pragmas.excludeIdeData);
  23667. args: ["aClass", "aPackageName"],
  23668. source: "moveClass: aClass toPackage: aPackageName\x0a\x09| package |\x0a\x09\x0a\x09package := Package named: aPackageName.\x0a\x09package ifNil: [ self error: 'Invalid package name' ].\x0a\x09package == aClass package ifTrue: [ ^ self ].\x0a\x09\x0a\x09aClass package: package",
  23669. referencedClasses: ["Package"],
  23670. //>>excludeEnd("ide");
  23671. messageSends: ["named:", "ifNil:", "error:", "ifTrue:", "==", "package", "package:"]
  23672. }),
  23673. $globals.Environment);
  23674. $core.addMethod(
  23675. $core.method({
  23676. selector: "moveMethod:toClass:",
  23677. protocol: 'actions',
  23678. fn: function (aMethod,aClassName){
  23679. var self=this;
  23680. var destinationClass;
  23681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23682. return $core.withContext(function($ctx1) {
  23683. //>>excludeEnd("ctx");
  23684. var $2,$3,$1,$5,$4;
  23685. destinationClass=self._classNamed_(aClassName);
  23686. $2=destinationClass;
  23687. $3=$recv(aMethod)._methodClass();
  23688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23689. $ctx1.sendIdx["methodClass"]=1;
  23690. //>>excludeEnd("ctx");
  23691. $1=$recv($2).__eq_eq($3);
  23692. if($core.assert($1)){
  23693. return self;
  23694. };
  23695. $5=$recv(aMethod)._methodClass();
  23696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23697. $ctx1.sendIdx["methodClass"]=2;
  23698. //>>excludeEnd("ctx");
  23699. $4=$recv($5)._isMetaclass();
  23700. if($core.assert($4)){
  23701. destinationClass=$recv(destinationClass)._class();
  23702. destinationClass;
  23703. };
  23704. $recv(destinationClass)._compile_protocol_($recv(aMethod)._source(),$recv(aMethod)._protocol());
  23705. $recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
  23706. return self;
  23707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23708. }, function($ctx1) {$ctx1.fill(self,"moveMethod:toClass:",{aMethod:aMethod,aClassName:aClassName,destinationClass:destinationClass},$globals.Environment)});
  23709. //>>excludeEnd("ctx");
  23710. },
  23711. //>>excludeStart("ide", pragmas.excludeIdeData);
  23712. args: ["aMethod", "aClassName"],
  23713. source: "moveMethod: aMethod toClass: aClassName\x0a\x09| destinationClass |\x0a\x09\x0a\x09destinationClass := self classNamed: aClassName.\x0a\x09destinationClass == aMethod methodClass ifTrue: [ ^ self ].\x0a\x09\x0a\x09aMethod methodClass isMetaclass ifTrue: [ \x0a\x09\x09destinationClass := destinationClass class ].\x0a\x09\x0a\x09destinationClass \x0a\x09\x09compile: aMethod source\x0a\x09\x09protocol: aMethod protocol.\x0a\x09aMethod methodClass \x0a\x09\x09removeCompiledMethod: aMethod",
  23714. referencedClasses: [],
  23715. //>>excludeEnd("ide");
  23716. messageSends: ["classNamed:", "ifTrue:", "==", "methodClass", "isMetaclass", "class", "compile:protocol:", "source", "protocol", "removeCompiledMethod:"]
  23717. }),
  23718. $globals.Environment);
  23719. $core.addMethod(
  23720. $core.method({
  23721. selector: "moveMethod:toProtocol:",
  23722. protocol: 'actions',
  23723. fn: function (aMethod,aProtocol){
  23724. var self=this;
  23725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23726. return $core.withContext(function($ctx1) {
  23727. //>>excludeEnd("ctx");
  23728. $recv(aMethod)._protocol_(aProtocol);
  23729. return self;
  23730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23731. }, function($ctx1) {$ctx1.fill(self,"moveMethod:toProtocol:",{aMethod:aMethod,aProtocol:aProtocol},$globals.Environment)});
  23732. //>>excludeEnd("ctx");
  23733. },
  23734. //>>excludeStart("ide", pragmas.excludeIdeData);
  23735. args: ["aMethod", "aProtocol"],
  23736. source: "moveMethod: aMethod toProtocol: aProtocol\x0a\x09aMethod protocol: aProtocol",
  23737. referencedClasses: [],
  23738. //>>excludeEnd("ide");
  23739. messageSends: ["protocol:"]
  23740. }),
  23741. $globals.Environment);
  23742. $core.addMethod(
  23743. $core.method({
  23744. selector: "packages",
  23745. protocol: 'accessing',
  23746. fn: function (){
  23747. var self=this;
  23748. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23750. return $core.withContext(function($ctx1) {
  23751. //>>excludeEnd("ctx");
  23752. var $1;
  23753. $1=$recv($Smalltalk())._packages();
  23754. return $1;
  23755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23756. }, function($ctx1) {$ctx1.fill(self,"packages",{},$globals.Environment)});
  23757. //>>excludeEnd("ctx");
  23758. },
  23759. //>>excludeStart("ide", pragmas.excludeIdeData);
  23760. args: [],
  23761. source: "packages\x0a\x09^ Smalltalk packages",
  23762. referencedClasses: ["Smalltalk"],
  23763. //>>excludeEnd("ide");
  23764. messageSends: ["packages"]
  23765. }),
  23766. $globals.Environment);
  23767. $core.addMethod(
  23768. $core.method({
  23769. selector: "registerErrorHandler:",
  23770. protocol: 'services',
  23771. fn: function (anErrorHandler){
  23772. var self=this;
  23773. function $ErrorHandler(){return $globals.ErrorHandler||(typeof ErrorHandler=="undefined"?nil:ErrorHandler)}
  23774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23775. return $core.withContext(function($ctx1) {
  23776. //>>excludeEnd("ctx");
  23777. $recv($ErrorHandler())._register_(anErrorHandler);
  23778. return self;
  23779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23780. }, function($ctx1) {$ctx1.fill(self,"registerErrorHandler:",{anErrorHandler:anErrorHandler},$globals.Environment)});
  23781. //>>excludeEnd("ctx");
  23782. },
  23783. //>>excludeStart("ide", pragmas.excludeIdeData);
  23784. args: ["anErrorHandler"],
  23785. source: "registerErrorHandler: anErrorHandler\x0a\x09ErrorHandler register: anErrorHandler",
  23786. referencedClasses: ["ErrorHandler"],
  23787. //>>excludeEnd("ide");
  23788. messageSends: ["register:"]
  23789. }),
  23790. $globals.Environment);
  23791. $core.addMethod(
  23792. $core.method({
  23793. selector: "registerFinder:",
  23794. protocol: 'services',
  23795. fn: function (aFinder){
  23796. var self=this;
  23797. function $Finder(){return $globals.Finder||(typeof Finder=="undefined"?nil:Finder)}
  23798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23799. return $core.withContext(function($ctx1) {
  23800. //>>excludeEnd("ctx");
  23801. $recv($Finder())._register_(aFinder);
  23802. return self;
  23803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23804. }, function($ctx1) {$ctx1.fill(self,"registerFinder:",{aFinder:aFinder},$globals.Environment)});
  23805. //>>excludeEnd("ctx");
  23806. },
  23807. //>>excludeStart("ide", pragmas.excludeIdeData);
  23808. args: ["aFinder"],
  23809. source: "registerFinder: aFinder\x0a\x09Finder register: aFinder",
  23810. referencedClasses: ["Finder"],
  23811. //>>excludeEnd("ide");
  23812. messageSends: ["register:"]
  23813. }),
  23814. $globals.Environment);
  23815. $core.addMethod(
  23816. $core.method({
  23817. selector: "registerInspector:",
  23818. protocol: 'services',
  23819. fn: function (anInspector){
  23820. var self=this;
  23821. function $Inspector(){return $globals.Inspector||(typeof Inspector=="undefined"?nil:Inspector)}
  23822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23823. return $core.withContext(function($ctx1) {
  23824. //>>excludeEnd("ctx");
  23825. $recv($Inspector())._register_(anInspector);
  23826. return self;
  23827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23828. }, function($ctx1) {$ctx1.fill(self,"registerInspector:",{anInspector:anInspector},$globals.Environment)});
  23829. //>>excludeEnd("ctx");
  23830. },
  23831. //>>excludeStart("ide", pragmas.excludeIdeData);
  23832. args: ["anInspector"],
  23833. source: "registerInspector: anInspector\x0a\x09Inspector register: anInspector",
  23834. referencedClasses: ["Inspector"],
  23835. //>>excludeEnd("ide");
  23836. messageSends: ["register:"]
  23837. }),
  23838. $globals.Environment);
  23839. $core.addMethod(
  23840. $core.method({
  23841. selector: "registerProgressHandler:",
  23842. protocol: 'services',
  23843. fn: function (aProgressHandler){
  23844. var self=this;
  23845. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  23846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23847. return $core.withContext(function($ctx1) {
  23848. //>>excludeEnd("ctx");
  23849. $recv($ProgressHandler())._register_(aProgressHandler);
  23850. return self;
  23851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23852. }, function($ctx1) {$ctx1.fill(self,"registerProgressHandler:",{aProgressHandler:aProgressHandler},$globals.Environment)});
  23853. //>>excludeEnd("ctx");
  23854. },
  23855. //>>excludeStart("ide", pragmas.excludeIdeData);
  23856. args: ["aProgressHandler"],
  23857. source: "registerProgressHandler: aProgressHandler\x0a\x09ProgressHandler register: aProgressHandler",
  23858. referencedClasses: ["ProgressHandler"],
  23859. //>>excludeEnd("ide");
  23860. messageSends: ["register:"]
  23861. }),
  23862. $globals.Environment);
  23863. $core.addMethod(
  23864. $core.method({
  23865. selector: "registerTranscript:",
  23866. protocol: 'services',
  23867. fn: function (aTranscript){
  23868. var self=this;
  23869. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  23870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23871. return $core.withContext(function($ctx1) {
  23872. //>>excludeEnd("ctx");
  23873. $recv($Transcript())._register_(aTranscript);
  23874. return self;
  23875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23876. }, function($ctx1) {$ctx1.fill(self,"registerTranscript:",{aTranscript:aTranscript},$globals.Environment)});
  23877. //>>excludeEnd("ctx");
  23878. },
  23879. //>>excludeStart("ide", pragmas.excludeIdeData);
  23880. args: ["aTranscript"],
  23881. source: "registerTranscript: aTranscript\x0a\x09Transcript register: aTranscript",
  23882. referencedClasses: ["Transcript"],
  23883. //>>excludeEnd("ide");
  23884. messageSends: ["register:"]
  23885. }),
  23886. $globals.Environment);
  23887. $core.addMethod(
  23888. $core.method({
  23889. selector: "removeClass:",
  23890. protocol: 'actions',
  23891. fn: function (aClass){
  23892. var self=this;
  23893. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23895. return $core.withContext(function($ctx1) {
  23896. //>>excludeEnd("ctx");
  23897. $recv($Smalltalk())._removeClass_(aClass);
  23898. return self;
  23899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23900. }, function($ctx1) {$ctx1.fill(self,"removeClass:",{aClass:aClass},$globals.Environment)});
  23901. //>>excludeEnd("ctx");
  23902. },
  23903. //>>excludeStart("ide", pragmas.excludeIdeData);
  23904. args: ["aClass"],
  23905. source: "removeClass: aClass\x0a\x09Smalltalk removeClass: aClass",
  23906. referencedClasses: ["Smalltalk"],
  23907. //>>excludeEnd("ide");
  23908. messageSends: ["removeClass:"]
  23909. }),
  23910. $globals.Environment);
  23911. $core.addMethod(
  23912. $core.method({
  23913. selector: "removeMethod:",
  23914. protocol: 'actions',
  23915. fn: function (aMethod){
  23916. var self=this;
  23917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23918. return $core.withContext(function($ctx1) {
  23919. //>>excludeEnd("ctx");
  23920. $recv($recv(aMethod)._methodClass())._removeCompiledMethod_(aMethod);
  23921. return self;
  23922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23923. }, function($ctx1) {$ctx1.fill(self,"removeMethod:",{aMethod:aMethod},$globals.Environment)});
  23924. //>>excludeEnd("ctx");
  23925. },
  23926. //>>excludeStart("ide", pragmas.excludeIdeData);
  23927. args: ["aMethod"],
  23928. source: "removeMethod: aMethod\x0a\x09aMethod methodClass removeCompiledMethod: aMethod",
  23929. referencedClasses: [],
  23930. //>>excludeEnd("ide");
  23931. messageSends: ["removeCompiledMethod:", "methodClass"]
  23932. }),
  23933. $globals.Environment);
  23934. $core.addMethod(
  23935. $core.method({
  23936. selector: "removeProtocol:from:",
  23937. protocol: 'actions',
  23938. fn: function (aString,aClass){
  23939. var self=this;
  23940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23941. return $core.withContext(function($ctx1) {
  23942. //>>excludeEnd("ctx");
  23943. $recv($recv(aClass)._methodsInProtocol_(aString))._do_((function(each){
  23944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23945. return $core.withContext(function($ctx2) {
  23946. //>>excludeEnd("ctx");
  23947. return $recv(aClass)._removeCompiledMethod_(each);
  23948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23949. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  23950. //>>excludeEnd("ctx");
  23951. }));
  23952. return self;
  23953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23954. }, function($ctx1) {$ctx1.fill(self,"removeProtocol:from:",{aString:aString,aClass:aClass},$globals.Environment)});
  23955. //>>excludeEnd("ctx");
  23956. },
  23957. //>>excludeStart("ide", pragmas.excludeIdeData);
  23958. args: ["aString", "aClass"],
  23959. source: "removeProtocol: aString from: aClass\x0a\x09(aClass methodsInProtocol: aString)\x0a\x09\x09do: [ :each | aClass removeCompiledMethod: each ]",
  23960. referencedClasses: [],
  23961. //>>excludeEnd("ide");
  23962. messageSends: ["do:", "methodsInProtocol:", "removeCompiledMethod:"]
  23963. }),
  23964. $globals.Environment);
  23965. $core.addMethod(
  23966. $core.method({
  23967. selector: "renameClass:to:",
  23968. protocol: 'actions',
  23969. fn: function (aClass,aClassName){
  23970. var self=this;
  23971. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  23972. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  23973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23974. return $core.withContext(function($ctx1) {
  23975. //>>excludeEnd("ctx");
  23976. var $1,$2,$receiver;
  23977. $1=$recv($recv($Smalltalk())._globals())._at_(aClassName);
  23978. if(($receiver = $1) == null || $receiver.isNil){
  23979. $1;
  23980. } else {
  23981. $2=$recv("A class named ".__comma(aClassName)).__comma(" already exists");
  23982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23983. $ctx1.sendIdx[","]=1;
  23984. //>>excludeEnd("ctx");
  23985. self._error_($2);
  23986. };
  23987. $recv($recv($ClassBuilder())._new())._renameClass_to_(aClass,aClassName);
  23988. return self;
  23989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23990. }, function($ctx1) {$ctx1.fill(self,"renameClass:to:",{aClass:aClass,aClassName:aClassName},$globals.Environment)});
  23991. //>>excludeEnd("ctx");
  23992. },
  23993. //>>excludeStart("ide", pragmas.excludeIdeData);
  23994. args: ["aClass", "aClassName"],
  23995. source: "renameClass: aClass to: aClassName\x0a\x09(Smalltalk globals at: aClassName)\x0a\x09\x09ifNotNil: [ self error: 'A class named ', aClassName, ' already exists' ].\x0a\x09\x09\x0a\x09ClassBuilder new renameClass: aClass to: aClassName",
  23996. referencedClasses: ["Smalltalk", "ClassBuilder"],
  23997. //>>excludeEnd("ide");
  23998. messageSends: ["ifNotNil:", "at:", "globals", "error:", ",", "renameClass:to:", "new"]
  23999. }),
  24000. $globals.Environment);
  24001. $core.addMethod(
  24002. $core.method({
  24003. selector: "renameProtocol:to:in:",
  24004. protocol: 'actions',
  24005. fn: function (aString,anotherString,aClass){
  24006. var self=this;
  24007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24008. return $core.withContext(function($ctx1) {
  24009. //>>excludeEnd("ctx");
  24010. $recv($recv(aClass)._methodsInProtocol_(aString))._do_((function(each){
  24011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24012. return $core.withContext(function($ctx2) {
  24013. //>>excludeEnd("ctx");
  24014. return $recv(each)._protocol_(anotherString);
  24015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24016. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  24017. //>>excludeEnd("ctx");
  24018. }));
  24019. return self;
  24020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24021. }, function($ctx1) {$ctx1.fill(self,"renameProtocol:to:in:",{aString:aString,anotherString:anotherString,aClass:aClass},$globals.Environment)});
  24022. //>>excludeEnd("ctx");
  24023. },
  24024. //>>excludeStart("ide", pragmas.excludeIdeData);
  24025. args: ["aString", "anotherString", "aClass"],
  24026. source: "renameProtocol: aString to: anotherString in: aClass\x0a\x09(aClass methodsInProtocol: aString)\x0a\x09\x09do: [ :each | each protocol: anotherString ]",
  24027. referencedClasses: [],
  24028. //>>excludeEnd("ide");
  24029. messageSends: ["do:", "methodsInProtocol:", "protocol:"]
  24030. }),
  24031. $globals.Environment);
  24032. $core.addMethod(
  24033. $core.method({
  24034. selector: "setClassCommentOf:to:",
  24035. protocol: 'actions',
  24036. fn: function (aClass,aString){
  24037. var self=this;
  24038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24039. return $core.withContext(function($ctx1) {
  24040. //>>excludeEnd("ctx");
  24041. $recv(aClass)._comment_(aString);
  24042. return self;
  24043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24044. }, function($ctx1) {$ctx1.fill(self,"setClassCommentOf:to:",{aClass:aClass,aString:aString},$globals.Environment)});
  24045. //>>excludeEnd("ctx");
  24046. },
  24047. //>>excludeStart("ide", pragmas.excludeIdeData);
  24048. args: ["aClass", "aString"],
  24049. source: "setClassCommentOf: aClass to: aString\x0a\x09aClass comment: aString",
  24050. referencedClasses: [],
  24051. //>>excludeEnd("ide");
  24052. messageSends: ["comment:"]
  24053. }),
  24054. $globals.Environment);
  24055. $core.addMethod(
  24056. $core.method({
  24057. selector: "systemAnnouncer",
  24058. protocol: 'accessing',
  24059. fn: function (){
  24060. var self=this;
  24061. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  24062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24063. return $core.withContext(function($ctx1) {
  24064. //>>excludeEnd("ctx");
  24065. var $1;
  24066. $1=$recv($recv($recv($Smalltalk())._globals())._at_("SystemAnnouncer"))._current();
  24067. return $1;
  24068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24069. }, function($ctx1) {$ctx1.fill(self,"systemAnnouncer",{},$globals.Environment)});
  24070. //>>excludeEnd("ctx");
  24071. },
  24072. //>>excludeStart("ide", pragmas.excludeIdeData);
  24073. args: [],
  24074. source: "systemAnnouncer\x0a\x09^ (Smalltalk globals at: #SystemAnnouncer) current",
  24075. referencedClasses: ["Smalltalk"],
  24076. //>>excludeEnd("ide");
  24077. messageSends: ["current", "at:", "globals"]
  24078. }),
  24079. $globals.Environment);
  24080. $core.addClass('JSObjectProxy', $globals.ProtoObject, ['jsObject'], 'Kernel-Infrastructure');
  24081. //>>excludeStart("ide", pragmas.excludeIdeData);
  24082. $globals.JSObjectProxy.comment="I handle sending messages to JavaScript objects, making JavaScript object accessing from Amber fully transparent.\x0aMy instances make intensive use of `#doesNotUnderstand:`.\x0a\x0aMy instances are automatically created by Amber whenever a message is sent to a JavaScript object.\x0a\x0a## Usage examples\x0a\x0aJSObjectProxy objects are instanciated by Amber when a Smalltalk message is sent to a JavaScript object.\x0a\x0a\x09window alert: 'hello world'.\x0a\x09window inspect.\x0a\x09(window jQuery: 'body') append: 'hello world'\x0a\x0aAmber messages sends are converted to JavaScript function calls or object property access _(in this order)_. If n one of them match, a `MessageNotUnderstood` error will be thrown.\x0a\x0a## Message conversion rules\x0a\x0a- `someUser name` becomes `someUser.name`\x0a- `someUser name: 'John'` becomes `someUser name = \x22John\x22`\x0a- `console log: 'hello world'` becomes `console.log('hello world')`\x0a- `(window jQuery: 'foo') css: 'background' color: 'red'` becomes `window.jQuery('foo').css('background', 'red')`\x0a\x0a__Note:__ For keyword-based messages, only the first keyword is kept: `window foo: 1 bar: 2` is equivalent to `window foo: 1 baz: 2`.";
  24083. //>>excludeEnd("ide");
  24084. $core.addMethod(
  24085. $core.method({
  24086. selector: "=",
  24087. protocol: 'comparing',
  24088. fn: function (anObject){
  24089. var self=this;
  24090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24091. return $core.withContext(function($ctx1) {
  24092. //>>excludeEnd("ctx");
  24093. var $2,$1,$3;
  24094. $2=$recv(anObject)._class();
  24095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24096. $ctx1.sendIdx["class"]=1;
  24097. //>>excludeEnd("ctx");
  24098. $1=$recv($2).__eq_eq(self._class());
  24099. if(!$core.assert($1)){
  24100. return false;
  24101. };
  24102. $3=self._compareJSObjectWith_($recv(anObject)._jsObject());
  24103. return $3;
  24104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24105. }, function($ctx1) {$ctx1.fill(self,"=",{anObject:anObject},$globals.JSObjectProxy)});
  24106. //>>excludeEnd("ctx");
  24107. },
  24108. //>>excludeStart("ide", pragmas.excludeIdeData);
  24109. args: ["anObject"],
  24110. source: "= anObject\x0a\x09anObject class == self class ifFalse: [ ^ false ].\x0a\x09^ self compareJSObjectWith: anObject jsObject",
  24111. referencedClasses: [],
  24112. //>>excludeEnd("ide");
  24113. messageSends: ["ifFalse:", "==", "class", "compareJSObjectWith:", "jsObject"]
  24114. }),
  24115. $globals.JSObjectProxy);
  24116. $core.addMethod(
  24117. $core.method({
  24118. selector: "addObjectVariablesTo:",
  24119. protocol: 'proxy',
  24120. fn: function (aDictionary){
  24121. var self=this;
  24122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24123. return $core.withContext(function($ctx1) {
  24124. //>>excludeEnd("ctx");
  24125. for(var i in self['@jsObject']) {
  24126. aDictionary._at_put_(i, self['@jsObject'][i]);
  24127. }
  24128. ;
  24129. return self;
  24130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24131. }, function($ctx1) {$ctx1.fill(self,"addObjectVariablesTo:",{aDictionary:aDictionary},$globals.JSObjectProxy)});
  24132. //>>excludeEnd("ctx");
  24133. },
  24134. //>>excludeStart("ide", pragmas.excludeIdeData);
  24135. args: ["aDictionary"],
  24136. source: "addObjectVariablesTo: aDictionary\x0a\x09<\x0a\x09\x09for(var i in self['@jsObject']) {\x0a\x09\x09\x09aDictionary._at_put_(i, self['@jsObject'][i]);\x0a\x09\x09}\x0a\x09>",
  24137. referencedClasses: [],
  24138. //>>excludeEnd("ide");
  24139. messageSends: []
  24140. }),
  24141. $globals.JSObjectProxy);
  24142. $core.addMethod(
  24143. $core.method({
  24144. selector: "asJSON",
  24145. protocol: 'enumerating',
  24146. fn: function (){
  24147. var self=this;
  24148. var $1;
  24149. $1=self["@jsObject"];
  24150. return $1;
  24151. },
  24152. //>>excludeStart("ide", pragmas.excludeIdeData);
  24153. args: [],
  24154. source: "asJSON\x0a\x09\x22Answers the receiver in a stringyfy-friendly fashion\x22\x0a\x0a\x09^ jsObject",
  24155. referencedClasses: [],
  24156. //>>excludeEnd("ide");
  24157. messageSends: []
  24158. }),
  24159. $globals.JSObjectProxy);
  24160. $core.addMethod(
  24161. $core.method({
  24162. selector: "at:",
  24163. protocol: 'accessing',
  24164. fn: function (aString){
  24165. var self=this;
  24166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24167. return $core.withContext(function($ctx1) {
  24168. //>>excludeEnd("ctx");
  24169. return self['@jsObject'][aString];
  24170. return self;
  24171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24172. }, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.JSObjectProxy)});
  24173. //>>excludeEnd("ctx");
  24174. },
  24175. //>>excludeStart("ide", pragmas.excludeIdeData);
  24176. args: ["aString"],
  24177. source: "at: aString\x0a\x09<return self['@jsObject'][aString]>",
  24178. referencedClasses: [],
  24179. //>>excludeEnd("ide");
  24180. messageSends: []
  24181. }),
  24182. $globals.JSObjectProxy);
  24183. $core.addMethod(
  24184. $core.method({
  24185. selector: "at:ifAbsent:",
  24186. protocol: 'accessing',
  24187. fn: function (aString,aBlock){
  24188. var self=this;
  24189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24190. return $core.withContext(function($ctx1) {
  24191. //>>excludeEnd("ctx");
  24192. var obj = self['@jsObject'];
  24193. return aString in obj ? obj[aString] : aBlock._value();
  24194. ;
  24195. return self;
  24196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24197. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aString:aString,aBlock:aBlock},$globals.JSObjectProxy)});
  24198. //>>excludeEnd("ctx");
  24199. },
  24200. //>>excludeStart("ide", pragmas.excludeIdeData);
  24201. args: ["aString", "aBlock"],
  24202. source: "at: aString ifAbsent: aBlock\x0a\x09\x22return the aString property or evaluate aBlock if the property is not defined on the object\x22\x0a\x09<\x0a\x09\x09var obj = self['@jsObject'];\x0a\x09\x09return aString in obj ? obj[aString] : aBlock._value();\x0a\x09>",
  24203. referencedClasses: [],
  24204. //>>excludeEnd("ide");
  24205. messageSends: []
  24206. }),
  24207. $globals.JSObjectProxy);
  24208. $core.addMethod(
  24209. $core.method({
  24210. selector: "at:ifPresent:",
  24211. protocol: 'accessing',
  24212. fn: function (aString,aBlock){
  24213. var self=this;
  24214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24215. return $core.withContext(function($ctx1) {
  24216. //>>excludeEnd("ctx");
  24217. var obj = self['@jsObject'];
  24218. return aString in obj ? aBlock._value_(obj[aString]) : nil;
  24219. ;
  24220. return self;
  24221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24222. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:",{aString:aString,aBlock:aBlock},$globals.JSObjectProxy)});
  24223. //>>excludeEnd("ctx");
  24224. },
  24225. //>>excludeStart("ide", pragmas.excludeIdeData);
  24226. args: ["aString", "aBlock"],
  24227. source: "at: aString ifPresent: aBlock\x0a\x09\x22return the evaluation of aBlock with the value if the property is defined or return nil\x22\x0a\x09<\x0a\x09\x09var obj = self['@jsObject'];\x0a\x09\x09return aString in obj ? aBlock._value_(obj[aString]) : nil;\x0a\x09>",
  24228. referencedClasses: [],
  24229. //>>excludeEnd("ide");
  24230. messageSends: []
  24231. }),
  24232. $globals.JSObjectProxy);
  24233. $core.addMethod(
  24234. $core.method({
  24235. selector: "at:ifPresent:ifAbsent:",
  24236. protocol: 'accessing',
  24237. fn: function (aString,aBlock,anotherBlock){
  24238. var self=this;
  24239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24240. return $core.withContext(function($ctx1) {
  24241. //>>excludeEnd("ctx");
  24242. var obj = self['@jsObject'];
  24243. return aString in obj ? aBlock._value_(obj[aString]) : anotherBlock._value();
  24244. ;
  24245. return self;
  24246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24247. }, function($ctx1) {$ctx1.fill(self,"at:ifPresent:ifAbsent:",{aString:aString,aBlock:aBlock,anotherBlock:anotherBlock},$globals.JSObjectProxy)});
  24248. //>>excludeEnd("ctx");
  24249. },
  24250. //>>excludeStart("ide", pragmas.excludeIdeData);
  24251. args: ["aString", "aBlock", "anotherBlock"],
  24252. source: "at: aString ifPresent: aBlock ifAbsent: anotherBlock\x0a\x09\x22return the evaluation of aBlock with the value if the property is defined\x0a\x09or return value of anotherBlock\x22\x0a\x09<\x0a\x09\x09var obj = self['@jsObject'];\x0a\x09\x09return aString in obj ? aBlock._value_(obj[aString]) : anotherBlock._value();\x0a\x09>",
  24253. referencedClasses: [],
  24254. //>>excludeEnd("ide");
  24255. messageSends: []
  24256. }),
  24257. $globals.JSObjectProxy);
  24258. $core.addMethod(
  24259. $core.method({
  24260. selector: "at:put:",
  24261. protocol: 'accessing',
  24262. fn: function (aString,anObject){
  24263. var self=this;
  24264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24265. return $core.withContext(function($ctx1) {
  24266. //>>excludeEnd("ctx");
  24267. return self['@jsObject'][aString] = anObject;
  24268. return self;
  24269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24270. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aString:aString,anObject:anObject},$globals.JSObjectProxy)});
  24271. //>>excludeEnd("ctx");
  24272. },
  24273. //>>excludeStart("ide", pragmas.excludeIdeData);
  24274. args: ["aString", "anObject"],
  24275. source: "at: aString put: anObject\x0a\x09<return self['@jsObject'][aString] = anObject>",
  24276. referencedClasses: [],
  24277. //>>excludeEnd("ide");
  24278. messageSends: []
  24279. }),
  24280. $globals.JSObjectProxy);
  24281. $core.addMethod(
  24282. $core.method({
  24283. selector: "compareJSObjectWith:",
  24284. protocol: 'private',
  24285. fn: function (aJSObject){
  24286. var self=this;
  24287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24288. return $core.withContext(function($ctx1) {
  24289. //>>excludeEnd("ctx");
  24290. return self["@jsObject"] === aJSObject;
  24291. return self;
  24292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24293. }, function($ctx1) {$ctx1.fill(self,"compareJSObjectWith:",{aJSObject:aJSObject},$globals.JSObjectProxy)});
  24294. //>>excludeEnd("ctx");
  24295. },
  24296. //>>excludeStart("ide", pragmas.excludeIdeData);
  24297. args: ["aJSObject"],
  24298. source: "compareJSObjectWith: aJSObject\x0a \x09<return self[\x22@jsObject\x22] === aJSObject>",
  24299. referencedClasses: [],
  24300. //>>excludeEnd("ide");
  24301. messageSends: []
  24302. }),
  24303. $globals.JSObjectProxy);
  24304. $core.addMethod(
  24305. $core.method({
  24306. selector: "doesNotUnderstand:",
  24307. protocol: 'proxy',
  24308. fn: function (aMessage){
  24309. var self=this;
  24310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24311. return $core.withContext(function($ctx1) {
  24312. //>>excludeEnd("ctx");
  24313. var $2,$1,$receiver;
  24314. $2=self._lookupProperty_($recv($recv(aMessage)._selector())._asJavaScriptPropertyName());
  24315. if(($receiver = $2) == null || $receiver.isNil){
  24316. $1=(
  24317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24318. $ctx1.supercall = true,
  24319. //>>excludeEnd("ctx");
  24320. $globals.JSObjectProxy.superclass.fn.prototype._doesNotUnderstand_.apply($recv(self), [aMessage]));
  24321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24322. $ctx1.supercall = false;
  24323. //>>excludeEnd("ctx");;
  24324. } else {
  24325. var jsSelector;
  24326. jsSelector=$receiver;
  24327. $1=self._forwardMessage_withArguments_(jsSelector,$recv(aMessage)._arguments());
  24328. };
  24329. return $1;
  24330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24331. }, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},$globals.JSObjectProxy)});
  24332. //>>excludeEnd("ctx");
  24333. },
  24334. //>>excludeStart("ide", pragmas.excludeIdeData);
  24335. args: ["aMessage"],
  24336. source: "doesNotUnderstand: aMessage\x0a\x09^ (self lookupProperty: aMessage selector asJavaScriptPropertyName)\x0a\x09\x09ifNil: [ super doesNotUnderstand: aMessage ]\x0a\x09\x09ifNotNil: [ :jsSelector | \x0a\x09\x09\x09self \x0a\x09\x09\x09\x09forwardMessage: jsSelector \x0a\x09\x09\x09\x09withArguments: aMessage arguments ]",
  24337. referencedClasses: [],
  24338. //>>excludeEnd("ide");
  24339. messageSends: ["ifNil:ifNotNil:", "lookupProperty:", "asJavaScriptPropertyName", "selector", "doesNotUnderstand:", "forwardMessage:withArguments:", "arguments"]
  24340. }),
  24341. $globals.JSObjectProxy);
  24342. $core.addMethod(
  24343. $core.method({
  24344. selector: "forwardMessage:withArguments:",
  24345. protocol: 'proxy',
  24346. fn: function (aString,anArray){
  24347. var self=this;
  24348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24349. return $core.withContext(function($ctx1) {
  24350. //>>excludeEnd("ctx");
  24351. return $core.accessJavaScript(self._jsObject(), aString, anArray);
  24352. ;
  24353. return self;
  24354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24355. }, function($ctx1) {$ctx1.fill(self,"forwardMessage:withArguments:",{aString:aString,anArray:anArray},$globals.JSObjectProxy)});
  24356. //>>excludeEnd("ctx");
  24357. },
  24358. //>>excludeStart("ide", pragmas.excludeIdeData);
  24359. args: ["aString", "anArray"],
  24360. source: "forwardMessage: aString withArguments: anArray\x0a\x09<\x0a\x09\x09return $core.accessJavaScript(self._jsObject(), aString, anArray);\x0a\x09>",
  24361. referencedClasses: [],
  24362. //>>excludeEnd("ide");
  24363. messageSends: []
  24364. }),
  24365. $globals.JSObjectProxy);
  24366. $core.addMethod(
  24367. $core.method({
  24368. selector: "inspectOn:",
  24369. protocol: 'proxy',
  24370. fn: function (anInspector){
  24371. var self=this;
  24372. var variables;
  24373. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  24374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24375. return $core.withContext(function($ctx1) {
  24376. //>>excludeEnd("ctx");
  24377. variables=$recv($Dictionary())._new();
  24378. $recv(variables)._at_put_("#self",self._jsObject());
  24379. $recv(anInspector)._setLabel_(self._printString());
  24380. self._addObjectVariablesTo_(variables);
  24381. $recv(anInspector)._setVariables_(variables);
  24382. return self;
  24383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24384. }, function($ctx1) {$ctx1.fill(self,"inspectOn:",{anInspector:anInspector,variables:variables},$globals.JSObjectProxy)});
  24385. //>>excludeEnd("ctx");
  24386. },
  24387. //>>excludeStart("ide", pragmas.excludeIdeData);
  24388. args: ["anInspector"],
  24389. source: "inspectOn: anInspector\x0a\x09| variables |\x0a\x09variables := Dictionary new.\x0a\x09variables at: '#self' put: self jsObject.\x0a\x09anInspector setLabel: self printString.\x0a\x09self addObjectVariablesTo: variables.\x0a\x09anInspector setVariables: variables",
  24390. referencedClasses: ["Dictionary"],
  24391. //>>excludeEnd("ide");
  24392. messageSends: ["new", "at:put:", "jsObject", "setLabel:", "printString", "addObjectVariablesTo:", "setVariables:"]
  24393. }),
  24394. $globals.JSObjectProxy);
  24395. $core.addMethod(
  24396. $core.method({
  24397. selector: "jsObject",
  24398. protocol: 'accessing',
  24399. fn: function (){
  24400. var self=this;
  24401. var $1;
  24402. $1=self["@jsObject"];
  24403. return $1;
  24404. },
  24405. //>>excludeStart("ide", pragmas.excludeIdeData);
  24406. args: [],
  24407. source: "jsObject\x0a\x09^ jsObject",
  24408. referencedClasses: [],
  24409. //>>excludeEnd("ide");
  24410. messageSends: []
  24411. }),
  24412. $globals.JSObjectProxy);
  24413. $core.addMethod(
  24414. $core.method({
  24415. selector: "jsObject:",
  24416. protocol: 'accessing',
  24417. fn: function (aJSObject){
  24418. var self=this;
  24419. self["@jsObject"]=aJSObject;
  24420. return self;
  24421. },
  24422. //>>excludeStart("ide", pragmas.excludeIdeData);
  24423. args: ["aJSObject"],
  24424. source: "jsObject: aJSObject\x0a\x09jsObject := aJSObject",
  24425. referencedClasses: [],
  24426. //>>excludeEnd("ide");
  24427. messageSends: []
  24428. }),
  24429. $globals.JSObjectProxy);
  24430. $core.addMethod(
  24431. $core.method({
  24432. selector: "keysAndValuesDo:",
  24433. protocol: 'enumerating',
  24434. fn: function (aBlock){
  24435. var self=this;
  24436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24437. return $core.withContext(function($ctx1) {
  24438. //>>excludeEnd("ctx");
  24439. var o = self['@jsObject'];
  24440. for(var i in o) {
  24441. aBlock._value_value_(i, o[i]);
  24442. }
  24443. ;
  24444. return self;
  24445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24446. }, function($ctx1) {$ctx1.fill(self,"keysAndValuesDo:",{aBlock:aBlock},$globals.JSObjectProxy)});
  24447. //>>excludeEnd("ctx");
  24448. },
  24449. //>>excludeStart("ide", pragmas.excludeIdeData);
  24450. args: ["aBlock"],
  24451. source: "keysAndValuesDo: aBlock\x0a\x09<\x0a\x09\x09var o = self['@jsObject'];\x0a\x09\x09for(var i in o) {\x0a\x09\x09\x09aBlock._value_value_(i, o[i]);\x0a\x09\x09}\x0a\x09>",
  24452. referencedClasses: [],
  24453. //>>excludeEnd("ide");
  24454. messageSends: []
  24455. }),
  24456. $globals.JSObjectProxy);
  24457. $core.addMethod(
  24458. $core.method({
  24459. selector: "lookupProperty:",
  24460. protocol: 'accessing',
  24461. fn: function (aString){
  24462. var self=this;
  24463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24464. return $core.withContext(function($ctx1) {
  24465. //>>excludeEnd("ctx");
  24466. return aString in self._jsObject() ? aString : nil;
  24467. return self;
  24468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24469. }, function($ctx1) {$ctx1.fill(self,"lookupProperty:",{aString:aString},$globals.JSObjectProxy)});
  24470. //>>excludeEnd("ctx");
  24471. },
  24472. //>>excludeStart("ide", pragmas.excludeIdeData);
  24473. args: ["aString"],
  24474. source: "lookupProperty: aString\x0a\x09\x22Looks up a property in JS object.\x0a\x09Answer the property if it is present, or nil if it is not present.\x22\x0a\x09\x0a\x09<return aString in self._jsObject() ? aString : nil>",
  24475. referencedClasses: [],
  24476. //>>excludeEnd("ide");
  24477. messageSends: []
  24478. }),
  24479. $globals.JSObjectProxy);
  24480. $core.addMethod(
  24481. $core.method({
  24482. selector: "printOn:",
  24483. protocol: 'printing',
  24484. fn: function (aStream){
  24485. var self=this;
  24486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24487. return $core.withContext(function($ctx1) {
  24488. //>>excludeEnd("ctx");
  24489. $recv(aStream)._nextPutAll_(self._printString());
  24490. return self;
  24491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24492. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.JSObjectProxy)});
  24493. //>>excludeEnd("ctx");
  24494. },
  24495. //>>excludeStart("ide", pragmas.excludeIdeData);
  24496. args: ["aStream"],
  24497. source: "printOn: aStream\x0a\x09aStream nextPutAll: self printString",
  24498. referencedClasses: [],
  24499. //>>excludeEnd("ide");
  24500. messageSends: ["nextPutAll:", "printString"]
  24501. }),
  24502. $globals.JSObjectProxy);
  24503. $core.addMethod(
  24504. $core.method({
  24505. selector: "printString",
  24506. protocol: 'printing',
  24507. fn: function (){
  24508. var self=this;
  24509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24510. return $core.withContext(function($ctx1) {
  24511. //>>excludeEnd("ctx");
  24512. var js = self['@jsObject'];
  24513. return js.toString
  24514. ? js.toString()
  24515. : Object.prototype.toString.call(js)
  24516. ;
  24517. return self;
  24518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24519. }, function($ctx1) {$ctx1.fill(self,"printString",{},$globals.JSObjectProxy)});
  24520. //>>excludeEnd("ctx");
  24521. },
  24522. //>>excludeStart("ide", pragmas.excludeIdeData);
  24523. args: [],
  24524. source: "printString\x0a\x09<\x0a\x09\x09var js = self['@jsObject'];\x0a\x09\x09return js.toString\x0a\x09\x09\x09? js.toString()\x0a\x09\x09\x09: Object.prototype.toString.call(js)\x0a\x09>",
  24525. referencedClasses: [],
  24526. //>>excludeEnd("ide");
  24527. messageSends: []
  24528. }),
  24529. $globals.JSObjectProxy);
  24530. $core.addMethod(
  24531. $core.method({
  24532. selector: "on:",
  24533. protocol: 'instance creation',
  24534. fn: function (aJSObject){
  24535. var self=this;
  24536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24537. return $core.withContext(function($ctx1) {
  24538. //>>excludeEnd("ctx");
  24539. var $2,$3,$1;
  24540. $2=self._new();
  24541. $recv($2)._jsObject_(aJSObject);
  24542. $3=$recv($2)._yourself();
  24543. $1=$3;
  24544. return $1;
  24545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24546. }, function($ctx1) {$ctx1.fill(self,"on:",{aJSObject:aJSObject},$globals.JSObjectProxy.klass)});
  24547. //>>excludeEnd("ctx");
  24548. },
  24549. //>>excludeStart("ide", pragmas.excludeIdeData);
  24550. args: ["aJSObject"],
  24551. source: "on: aJSObject\x0a\x09^ self new\x0a\x09\x09jsObject: aJSObject;\x0a\x09\x09yourself",
  24552. referencedClasses: [],
  24553. //>>excludeEnd("ide");
  24554. messageSends: ["jsObject:", "new", "yourself"]
  24555. }),
  24556. $globals.JSObjectProxy.klass);
  24557. $core.addClass('NullProgressHandler', $globals.Object, [], 'Kernel-Infrastructure');
  24558. //>>excludeStart("ide", pragmas.excludeIdeData);
  24559. $globals.NullProgressHandler.comment="I am the default progress handler. I do not display any progress, and simply iterate over the collection.";
  24560. //>>excludeEnd("ide");
  24561. $core.addMethod(
  24562. $core.method({
  24563. selector: "do:on:displaying:",
  24564. protocol: 'progress handling',
  24565. fn: function (aBlock,aCollection,aString){
  24566. var self=this;
  24567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24568. return $core.withContext(function($ctx1) {
  24569. //>>excludeEnd("ctx");
  24570. $recv(aCollection)._do_(aBlock);
  24571. return self;
  24572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24573. }, function($ctx1) {$ctx1.fill(self,"do:on:displaying:",{aBlock:aBlock,aCollection:aCollection,aString:aString},$globals.NullProgressHandler)});
  24574. //>>excludeEnd("ctx");
  24575. },
  24576. //>>excludeStart("ide", pragmas.excludeIdeData);
  24577. args: ["aBlock", "aCollection", "aString"],
  24578. source: "do: aBlock on: aCollection displaying: aString\x0a\x09aCollection do: aBlock",
  24579. referencedClasses: [],
  24580. //>>excludeEnd("ide");
  24581. messageSends: ["do:"]
  24582. }),
  24583. $globals.NullProgressHandler);
  24584. $globals.NullProgressHandler.klass.iVarNames = ['current'];
  24585. $core.addMethod(
  24586. $core.method({
  24587. selector: "initialize",
  24588. protocol: 'initialization',
  24589. fn: function (){
  24590. var self=this;
  24591. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  24592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24593. return $core.withContext(function($ctx1) {
  24594. //>>excludeEnd("ctx");
  24595. $recv($ProgressHandler())._registerIfNone_(self._new());
  24596. return self;
  24597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24598. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.NullProgressHandler.klass)});
  24599. //>>excludeEnd("ctx");
  24600. },
  24601. //>>excludeStart("ide", pragmas.excludeIdeData);
  24602. args: [],
  24603. source: "initialize\x0a\x09ProgressHandler registerIfNone: self new",
  24604. referencedClasses: ["ProgressHandler"],
  24605. //>>excludeEnd("ide");
  24606. messageSends: ["registerIfNone:", "new"]
  24607. }),
  24608. $globals.NullProgressHandler.klass);
  24609. $core.addClass('Organizer', $globals.Object, [], 'Kernel-Infrastructure');
  24610. //>>excludeStart("ide", pragmas.excludeIdeData);
  24611. $globals.Organizer.comment="I represent categorization information. \x0a\x0a## API\x0a\x0aUse `#addElement:` and `#removeElement:` to manipulate instances.";
  24612. //>>excludeEnd("ide");
  24613. $core.addMethod(
  24614. $core.method({
  24615. selector: "addElement:",
  24616. protocol: 'accessing',
  24617. fn: function (anObject){
  24618. var self=this;
  24619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24620. return $core.withContext(function($ctx1) {
  24621. //>>excludeEnd("ctx");
  24622. self.elements.addElement(anObject);
  24623. return self;
  24624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24625. }, function($ctx1) {$ctx1.fill(self,"addElement:",{anObject:anObject},$globals.Organizer)});
  24626. //>>excludeEnd("ctx");
  24627. },
  24628. //>>excludeStart("ide", pragmas.excludeIdeData);
  24629. args: ["anObject"],
  24630. source: "addElement: anObject\x0a\x09<self.elements.addElement(anObject)>",
  24631. referencedClasses: [],
  24632. //>>excludeEnd("ide");
  24633. messageSends: []
  24634. }),
  24635. $globals.Organizer);
  24636. $core.addMethod(
  24637. $core.method({
  24638. selector: "elements",
  24639. protocol: 'accessing',
  24640. fn: function (){
  24641. var self=this;
  24642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24643. return $core.withContext(function($ctx1) {
  24644. //>>excludeEnd("ctx");
  24645. var $1;
  24646. $1=$recv(self._basicAt_("elements"))._copy();
  24647. return $1;
  24648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24649. }, function($ctx1) {$ctx1.fill(self,"elements",{},$globals.Organizer)});
  24650. //>>excludeEnd("ctx");
  24651. },
  24652. //>>excludeStart("ide", pragmas.excludeIdeData);
  24653. args: [],
  24654. source: "elements\x0a\x09^ (self basicAt: 'elements') copy",
  24655. referencedClasses: [],
  24656. //>>excludeEnd("ide");
  24657. messageSends: ["copy", "basicAt:"]
  24658. }),
  24659. $globals.Organizer);
  24660. $core.addMethod(
  24661. $core.method({
  24662. selector: "removeElement:",
  24663. protocol: 'accessing',
  24664. fn: function (anObject){
  24665. var self=this;
  24666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24667. return $core.withContext(function($ctx1) {
  24668. //>>excludeEnd("ctx");
  24669. self.elements.removeElement(anObject);
  24670. return self;
  24671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24672. }, function($ctx1) {$ctx1.fill(self,"removeElement:",{anObject:anObject},$globals.Organizer)});
  24673. //>>excludeEnd("ctx");
  24674. },
  24675. //>>excludeStart("ide", pragmas.excludeIdeData);
  24676. args: ["anObject"],
  24677. source: "removeElement: anObject\x0a\x09<self.elements.removeElement(anObject)>",
  24678. referencedClasses: [],
  24679. //>>excludeEnd("ide");
  24680. messageSends: []
  24681. }),
  24682. $globals.Organizer);
  24683. $core.addClass('ClassOrganizer', $globals.Organizer, [], 'Kernel-Infrastructure');
  24684. //>>excludeStart("ide", pragmas.excludeIdeData);
  24685. $globals.ClassOrganizer.comment="I am an organizer specific to classes. I hold method categorization information for classes.";
  24686. //>>excludeEnd("ide");
  24687. $core.addMethod(
  24688. $core.method({
  24689. selector: "addElement:",
  24690. protocol: 'accessing',
  24691. fn: function (aString){
  24692. var self=this;
  24693. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24694. function $ProtocolAdded(){return $globals.ProtocolAdded||(typeof ProtocolAdded=="undefined"?nil:ProtocolAdded)}
  24695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24696. return $core.withContext(function($ctx1) {
  24697. //>>excludeEnd("ctx");
  24698. var $1,$2;
  24699. (
  24700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24701. $ctx1.supercall = true,
  24702. //>>excludeEnd("ctx");
  24703. $globals.ClassOrganizer.superclass.fn.prototype._addElement_.apply($recv(self), [aString]));
  24704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24705. $ctx1.supercall = false;
  24706. //>>excludeEnd("ctx");;
  24707. $1=$recv($ProtocolAdded())._new();
  24708. $recv($1)._protocol_(aString);
  24709. $recv($1)._theClass_(self._theClass());
  24710. $2=$recv($1)._yourself();
  24711. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24712. return self;
  24713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24714. }, function($ctx1) {$ctx1.fill(self,"addElement:",{aString:aString},$globals.ClassOrganizer)});
  24715. //>>excludeEnd("ctx");
  24716. },
  24717. //>>excludeStart("ide", pragmas.excludeIdeData);
  24718. args: ["aString"],
  24719. source: "addElement: aString\x0a\x09super addElement: aString.\x0a\x0a\x09SystemAnnouncer current announce: (ProtocolAdded new\x0a\x09\x09protocol: aString;\x0a\x09\x09theClass: self theClass;\x0a\x09\x09yourself)",
  24720. referencedClasses: ["SystemAnnouncer", "ProtocolAdded"],
  24721. //>>excludeEnd("ide");
  24722. messageSends: ["addElement:", "announce:", "current", "protocol:", "new", "theClass:", "theClass", "yourself"]
  24723. }),
  24724. $globals.ClassOrganizer);
  24725. $core.addMethod(
  24726. $core.method({
  24727. selector: "removeElement:",
  24728. protocol: 'accessing',
  24729. fn: function (aString){
  24730. var self=this;
  24731. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24732. function $ProtocolRemoved(){return $globals.ProtocolRemoved||(typeof ProtocolRemoved=="undefined"?nil:ProtocolRemoved)}
  24733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24734. return $core.withContext(function($ctx1) {
  24735. //>>excludeEnd("ctx");
  24736. var $1,$2;
  24737. (
  24738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24739. $ctx1.supercall = true,
  24740. //>>excludeEnd("ctx");
  24741. $globals.ClassOrganizer.superclass.fn.prototype._removeElement_.apply($recv(self), [aString]));
  24742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24743. $ctx1.supercall = false;
  24744. //>>excludeEnd("ctx");;
  24745. $1=$recv($ProtocolRemoved())._new();
  24746. $recv($1)._protocol_(aString);
  24747. $recv($1)._theClass_(self._theClass());
  24748. $2=$recv($1)._yourself();
  24749. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24750. return self;
  24751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24752. }, function($ctx1) {$ctx1.fill(self,"removeElement:",{aString:aString},$globals.ClassOrganizer)});
  24753. //>>excludeEnd("ctx");
  24754. },
  24755. //>>excludeStart("ide", pragmas.excludeIdeData);
  24756. args: ["aString"],
  24757. source: "removeElement: aString\x0a\x09super removeElement: aString.\x0a\x0a\x09SystemAnnouncer current announce: (ProtocolRemoved new\x0a\x09\x09protocol: aString;\x0a\x09\x09theClass: self theClass;\x0a\x09\x09yourself)",
  24758. referencedClasses: ["SystemAnnouncer", "ProtocolRemoved"],
  24759. //>>excludeEnd("ide");
  24760. messageSends: ["removeElement:", "announce:", "current", "protocol:", "new", "theClass:", "theClass", "yourself"]
  24761. }),
  24762. $globals.ClassOrganizer);
  24763. $core.addMethod(
  24764. $core.method({
  24765. selector: "theClass",
  24766. protocol: 'accessing',
  24767. fn: function (){
  24768. var self=this;
  24769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24770. return $core.withContext(function($ctx1) {
  24771. //>>excludeEnd("ctx");
  24772. return self.theClass ;
  24773. return self;
  24774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24775. }, function($ctx1) {$ctx1.fill(self,"theClass",{},$globals.ClassOrganizer)});
  24776. //>>excludeEnd("ctx");
  24777. },
  24778. //>>excludeStart("ide", pragmas.excludeIdeData);
  24779. args: [],
  24780. source: "theClass\x0a\x09< return self.theClass >",
  24781. referencedClasses: [],
  24782. //>>excludeEnd("ide");
  24783. messageSends: []
  24784. }),
  24785. $globals.ClassOrganizer);
  24786. $core.addClass('PackageOrganizer', $globals.Organizer, [], 'Kernel-Infrastructure');
  24787. //>>excludeStart("ide", pragmas.excludeIdeData);
  24788. $globals.PackageOrganizer.comment="I am an organizer specific to packages. I hold classes categorization information.";
  24789. //>>excludeEnd("ide");
  24790. $core.addClass('Package', $globals.Object, ['transport', 'dirty'], 'Kernel-Infrastructure');
  24791. //>>excludeStart("ide", pragmas.excludeIdeData);
  24792. $globals.Package.comment="I am similar to a \x22class category\x22 typically found in other Smalltalks like Pharo or Squeak. Amber does not have class categories anymore, it had in the beginning but now each class in the system knows which package it belongs to.\x0a\x0aEach package has a name and can be queried for its classes, but it will then resort to a reverse scan of all classes to find them.\x0a\x0a## API\x0a\x0aPackages are manipulated through \x22Smalltalk current\x22, like for example finding one based on a name or with `Package class >> #name` directly:\x0a\x0a Smalltalk current packageAt: 'Kernel'\x0a Package named: 'Kernel'\x0a\x0aA package differs slightly from a Monticello package which can span multiple class categories using a naming convention based on hyphenation. But just as in Monticello a package supports \x22class extensions\x22 so a package can define behaviors in foreign classes using a naming convention for method categories where the category starts with an asterisk and then the name of the owning package follows.\x0a\x0aYou can fetch a package from the server:\x0a\x0a\x09Package load: 'Additional-Examples'";
  24793. //>>excludeEnd("ide");
  24794. $core.addMethod(
  24795. $core.method({
  24796. selector: "basicName:",
  24797. protocol: 'private',
  24798. fn: function (aString){
  24799. var self=this;
  24800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24801. return $core.withContext(function($ctx1) {
  24802. //>>excludeEnd("ctx");
  24803. self.pkgName = aString;
  24804. return self;
  24805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24806. }, function($ctx1) {$ctx1.fill(self,"basicName:",{aString:aString},$globals.Package)});
  24807. //>>excludeEnd("ctx");
  24808. },
  24809. //>>excludeStart("ide", pragmas.excludeIdeData);
  24810. args: ["aString"],
  24811. source: "basicName: aString\x0a\x09<self.pkgName = aString>",
  24812. referencedClasses: [],
  24813. //>>excludeEnd("ide");
  24814. messageSends: []
  24815. }),
  24816. $globals.Package);
  24817. $core.addMethod(
  24818. $core.method({
  24819. selector: "basicTransport",
  24820. protocol: 'private',
  24821. fn: function (){
  24822. var self=this;
  24823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24824. return $core.withContext(function($ctx1) {
  24825. //>>excludeEnd("ctx");
  24826. return self.transport;
  24827. return self;
  24828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24829. }, function($ctx1) {$ctx1.fill(self,"basicTransport",{},$globals.Package)});
  24830. //>>excludeEnd("ctx");
  24831. },
  24832. //>>excludeStart("ide", pragmas.excludeIdeData);
  24833. args: [],
  24834. source: "basicTransport\x0a\x09\x22Answer the transport literal JavaScript object as setup in the JavaScript file, if any\x22\x0a\x09\x0a\x09<return self.transport>",
  24835. referencedClasses: [],
  24836. //>>excludeEnd("ide");
  24837. messageSends: []
  24838. }),
  24839. $globals.Package);
  24840. $core.addMethod(
  24841. $core.method({
  24842. selector: "beClean",
  24843. protocol: 'accessing',
  24844. fn: function (){
  24845. var self=this;
  24846. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24847. function $PackageClean(){return $globals.PackageClean||(typeof PackageClean=="undefined"?nil:PackageClean)}
  24848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24849. return $core.withContext(function($ctx1) {
  24850. //>>excludeEnd("ctx");
  24851. var $1,$2;
  24852. self["@dirty"]=false;
  24853. $1=$recv($PackageClean())._new();
  24854. $recv($1)._package_(self);
  24855. $2=$recv($1)._yourself();
  24856. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24857. return self;
  24858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24859. }, function($ctx1) {$ctx1.fill(self,"beClean",{},$globals.Package)});
  24860. //>>excludeEnd("ctx");
  24861. },
  24862. //>>excludeStart("ide", pragmas.excludeIdeData);
  24863. args: [],
  24864. source: "beClean\x0a\x09dirty := false.\x0a\x09\x0a\x09SystemAnnouncer current announce: (PackageClean new\x0a\x09\x09package: self;\x0a\x09\x09yourself)",
  24865. referencedClasses: ["SystemAnnouncer", "PackageClean"],
  24866. //>>excludeEnd("ide");
  24867. messageSends: ["announce:", "current", "package:", "new", "yourself"]
  24868. }),
  24869. $globals.Package);
  24870. $core.addMethod(
  24871. $core.method({
  24872. selector: "beDirty",
  24873. protocol: 'accessing',
  24874. fn: function (){
  24875. var self=this;
  24876. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  24877. function $PackageDirty(){return $globals.PackageDirty||(typeof PackageDirty=="undefined"?nil:PackageDirty)}
  24878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24879. return $core.withContext(function($ctx1) {
  24880. //>>excludeEnd("ctx");
  24881. var $1,$2;
  24882. self["@dirty"]=true;
  24883. $1=$recv($PackageDirty())._new();
  24884. $recv($1)._package_(self);
  24885. $2=$recv($1)._yourself();
  24886. $recv($recv($SystemAnnouncer())._current())._announce_($2);
  24887. return self;
  24888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24889. }, function($ctx1) {$ctx1.fill(self,"beDirty",{},$globals.Package)});
  24890. //>>excludeEnd("ctx");
  24891. },
  24892. //>>excludeStart("ide", pragmas.excludeIdeData);
  24893. args: [],
  24894. source: "beDirty\x0a\x09dirty := true.\x0a\x09\x0a\x09SystemAnnouncer current announce: (PackageDirty new\x0a\x09\x09package: self;\x0a\x09\x09yourself)",
  24895. referencedClasses: ["SystemAnnouncer", "PackageDirty"],
  24896. //>>excludeEnd("ide");
  24897. messageSends: ["announce:", "current", "package:", "new", "yourself"]
  24898. }),
  24899. $globals.Package);
  24900. $core.addMethod(
  24901. $core.method({
  24902. selector: "classTemplate",
  24903. protocol: 'accessing',
  24904. fn: function (){
  24905. var self=this;
  24906. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  24907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24908. return $core.withContext(function($ctx1) {
  24909. //>>excludeEnd("ctx");
  24910. var $3,$4,$2,$5,$6,$7,$1;
  24911. $1=$recv($String())._streamContents_((function(stream){
  24912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24913. return $core.withContext(function($ctx2) {
  24914. //>>excludeEnd("ctx");
  24915. $recv(stream)._nextPutAll_("Object");
  24916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24917. $ctx2.sendIdx["nextPutAll:"]=1;
  24918. //>>excludeEnd("ctx");
  24919. $recv(stream)._nextPutAll_(" subclass: #NameOfSubclass");
  24920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24921. $ctx2.sendIdx["nextPutAll:"]=2;
  24922. //>>excludeEnd("ctx");
  24923. $3=$recv($String())._lf();
  24924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24925. $ctx2.sendIdx["lf"]=1;
  24926. //>>excludeEnd("ctx");
  24927. $4=$recv($String())._tab();
  24928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24929. $ctx2.sendIdx["tab"]=1;
  24930. //>>excludeEnd("ctx");
  24931. $2=$recv($3).__comma($4);
  24932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24933. $ctx2.sendIdx[","]=1;
  24934. //>>excludeEnd("ctx");
  24935. $recv(stream)._nextPutAll_($2);
  24936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24937. $ctx2.sendIdx["nextPutAll:"]=3;
  24938. //>>excludeEnd("ctx");
  24939. $5=$recv(stream)._nextPutAll_("instanceVariableNames: ''");
  24940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24941. $ctx2.sendIdx["nextPutAll:"]=4;
  24942. //>>excludeEnd("ctx");
  24943. $5;
  24944. $6=$recv("'".__comma($recv($String())._lf())).__comma($recv($String())._tab());
  24945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24946. $ctx2.sendIdx[","]=2;
  24947. //>>excludeEnd("ctx");
  24948. $recv(stream)._nextPutAll_($6);
  24949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24950. $ctx2.sendIdx["nextPutAll:"]=5;
  24951. //>>excludeEnd("ctx");
  24952. $recv(stream)._nextPutAll_("package: '");
  24953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24954. $ctx2.sendIdx["nextPutAll:"]=6;
  24955. //>>excludeEnd("ctx");
  24956. $recv(stream)._nextPutAll_(self._name());
  24957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24958. $ctx2.sendIdx["nextPutAll:"]=7;
  24959. //>>excludeEnd("ctx");
  24960. $7=$recv(stream)._nextPutAll_("'");
  24961. return $7;
  24962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24963. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  24964. //>>excludeEnd("ctx");
  24965. }));
  24966. return $1;
  24967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24968. }, function($ctx1) {$ctx1.fill(self,"classTemplate",{},$globals.Package)});
  24969. //>>excludeEnd("ctx");
  24970. },
  24971. //>>excludeStart("ide", pragmas.excludeIdeData);
  24972. args: [],
  24973. source: "classTemplate\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream\x0a\x09\x09\x09nextPutAll: 'Object';\x0a\x09\x09\x09nextPutAll: ' subclass: #NameOfSubclass';\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'instanceVariableNames: '''''.\x0a\x09\x09stream\x0a\x09\x09\x09nextPutAll: '''', String lf, String tab;\x0a\x09\x09\x09nextPutAll: 'package: ''';\x0a\x09\x09\x09nextPutAll: self name;\x0a\x09\x09\x09nextPutAll: '''' ]",
  24974. referencedClasses: ["String"],
  24975. //>>excludeEnd("ide");
  24976. messageSends: ["streamContents:", "nextPutAll:", ",", "lf", "tab", "name"]
  24977. }),
  24978. $globals.Package);
  24979. $core.addMethod(
  24980. $core.method({
  24981. selector: "classes",
  24982. protocol: 'classes',
  24983. fn: function (){
  24984. var self=this;
  24985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24986. return $core.withContext(function($ctx1) {
  24987. //>>excludeEnd("ctx");
  24988. var $1;
  24989. $1=$recv(self._organization())._elements();
  24990. return $1;
  24991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  24992. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.Package)});
  24993. //>>excludeEnd("ctx");
  24994. },
  24995. //>>excludeStart("ide", pragmas.excludeIdeData);
  24996. args: [],
  24997. source: "classes\x0a\x09^ self organization elements",
  24998. referencedClasses: [],
  24999. //>>excludeEnd("ide");
  25000. messageSends: ["elements", "organization"]
  25001. }),
  25002. $globals.Package);
  25003. $core.addMethod(
  25004. $core.method({
  25005. selector: "definition",
  25006. protocol: 'accessing',
  25007. fn: function (){
  25008. var self=this;
  25009. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  25010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25011. return $core.withContext(function($ctx1) {
  25012. //>>excludeEnd("ctx");
  25013. var $2,$4,$5,$3,$7,$6,$8,$9,$1;
  25014. $1=$recv($String())._streamContents_((function(stream){
  25015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25016. return $core.withContext(function($ctx2) {
  25017. //>>excludeEnd("ctx");
  25018. $2=$recv(self._class())._name();
  25019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25020. $ctx2.sendIdx["name"]=1;
  25021. //>>excludeEnd("ctx");
  25022. $recv(stream)._nextPutAll_($2);
  25023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25024. $ctx2.sendIdx["nextPutAll:"]=1;
  25025. //>>excludeEnd("ctx");
  25026. $4=$recv($String())._lf();
  25027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25028. $ctx2.sendIdx["lf"]=1;
  25029. //>>excludeEnd("ctx");
  25030. $5=$recv($String())._tab();
  25031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25032. $ctx2.sendIdx["tab"]=1;
  25033. //>>excludeEnd("ctx");
  25034. $3=$recv($4).__comma($5);
  25035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25036. $ctx2.sendIdx[","]=1;
  25037. //>>excludeEnd("ctx");
  25038. $recv(stream)._nextPutAll_($3);
  25039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25040. $ctx2.sendIdx["nextPutAll:"]=2;
  25041. //>>excludeEnd("ctx");
  25042. $recv(stream)._nextPutAll_(" named: ");
  25043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25044. $ctx2.sendIdx["nextPutAll:"]=3;
  25045. //>>excludeEnd("ctx");
  25046. $7="'".__comma(self._name());
  25047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25048. $ctx2.sendIdx[","]=3;
  25049. //>>excludeEnd("ctx");
  25050. $6=$recv($7).__comma("'");
  25051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25052. $ctx2.sendIdx[","]=2;
  25053. //>>excludeEnd("ctx");
  25054. $recv(stream)._nextPutAll_($6);
  25055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25056. $ctx2.sendIdx["nextPutAll:"]=4;
  25057. //>>excludeEnd("ctx");
  25058. $8=$recv($recv($String())._lf()).__comma($recv($String())._tab());
  25059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25060. $ctx2.sendIdx[","]=4;
  25061. //>>excludeEnd("ctx");
  25062. $recv(stream)._nextPutAll_($8);
  25063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25064. $ctx2.sendIdx["nextPutAll:"]=5;
  25065. //>>excludeEnd("ctx");
  25066. $recv(stream)._nextPutAll_(" transport: (");
  25067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25068. $ctx2.sendIdx["nextPutAll:"]=6;
  25069. //>>excludeEnd("ctx");
  25070. $9=$recv(stream)._nextPutAll_($recv($recv(self._transport())._definition()).__comma(")"));
  25071. return $9;
  25072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25073. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  25074. //>>excludeEnd("ctx");
  25075. }));
  25076. return $1;
  25077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25078. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.Package)});
  25079. //>>excludeEnd("ctx");
  25080. },
  25081. //>>excludeStart("ide", pragmas.excludeIdeData);
  25082. args: [],
  25083. source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream \x0a\x09\x09\x09nextPutAll: self class name;\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: ' named: ';\x0a\x09\x09\x09nextPutAll: '''', self name, '''';\x0a\x09\x09\x09nextPutAll: String lf, String tab;\x0a\x09\x09\x09nextPutAll: ' transport: (';\x0a\x09\x09\x09nextPutAll: self transport definition, ')' ]",
  25084. referencedClasses: ["String"],
  25085. //>>excludeEnd("ide");
  25086. messageSends: ["streamContents:", "nextPutAll:", "name", "class", ",", "lf", "tab", "definition", "transport"]
  25087. }),
  25088. $globals.Package);
  25089. $core.addMethod(
  25090. $core.method({
  25091. selector: "isDirty",
  25092. protocol: 'testing',
  25093. fn: function (){
  25094. var self=this;
  25095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25096. return $core.withContext(function($ctx1) {
  25097. //>>excludeEnd("ctx");
  25098. var $2,$1,$receiver;
  25099. $2=self["@dirty"];
  25100. if(($receiver = $2) == null || $receiver.isNil){
  25101. $1=false;
  25102. } else {
  25103. $1=$2;
  25104. };
  25105. return $1;
  25106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25107. }, function($ctx1) {$ctx1.fill(self,"isDirty",{},$globals.Package)});
  25108. //>>excludeEnd("ctx");
  25109. },
  25110. //>>excludeStart("ide", pragmas.excludeIdeData);
  25111. args: [],
  25112. source: "isDirty\x0a\x09^ dirty ifNil: [ false ]",
  25113. referencedClasses: [],
  25114. //>>excludeEnd("ide");
  25115. messageSends: ["ifNil:"]
  25116. }),
  25117. $globals.Package);
  25118. $core.addMethod(
  25119. $core.method({
  25120. selector: "isPackage",
  25121. protocol: 'testing',
  25122. fn: function (){
  25123. var self=this;
  25124. return true;
  25125. },
  25126. //>>excludeStart("ide", pragmas.excludeIdeData);
  25127. args: [],
  25128. source: "isPackage\x0a\x09^ true",
  25129. referencedClasses: [],
  25130. //>>excludeEnd("ide");
  25131. messageSends: []
  25132. }),
  25133. $globals.Package);
  25134. $core.addMethod(
  25135. $core.method({
  25136. selector: "loadDependencies",
  25137. protocol: 'dependencies',
  25138. fn: function (){
  25139. var self=this;
  25140. var classes,packages;
  25141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25142. return $core.withContext(function($ctx1) {
  25143. //>>excludeEnd("ctx");
  25144. var $2,$3,$1;
  25145. classes=self._loadDependencyClasses();
  25146. $2=$recv($recv(classes)._collect_((function(each){
  25147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25148. return $core.withContext(function($ctx2) {
  25149. //>>excludeEnd("ctx");
  25150. return $recv(each)._package();
  25151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25152. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  25153. //>>excludeEnd("ctx");
  25154. })))._asSet();
  25155. $recv($2)._remove_ifAbsent_(self,(function(){
  25156. }));
  25157. $3=$recv($2)._yourself();
  25158. $1=$3;
  25159. return $1;
  25160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25161. }, function($ctx1) {$ctx1.fill(self,"loadDependencies",{classes:classes,packages:packages},$globals.Package)});
  25162. //>>excludeEnd("ctx");
  25163. },
  25164. //>>excludeStart("ide", pragmas.excludeIdeData);
  25165. args: [],
  25166. source: "loadDependencies\x0a\x09\x22Returns list of packages that need to be loaded\x0a\x09before loading this package.\x22\x0a\x09\x0a\x09| classes packages |\x0a\x09classes := self loadDependencyClasses.\x0a\x09^ (classes collect: [ :each | each package ]) asSet\x0a\x09\x09remove: self ifAbsent: [];\x0a\x09\x09yourself",
  25167. referencedClasses: [],
  25168. //>>excludeEnd("ide");
  25169. messageSends: ["loadDependencyClasses", "remove:ifAbsent:", "asSet", "collect:", "package", "yourself"]
  25170. }),
  25171. $globals.Package);
  25172. $core.addMethod(
  25173. $core.method({
  25174. selector: "loadDependencyClasses",
  25175. protocol: 'dependencies',
  25176. fn: function (){
  25177. var self=this;
  25178. var starCategoryName;
  25179. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25181. return $core.withContext(function($ctx1) {
  25182. //>>excludeEnd("ctx");
  25183. var $4,$3,$2,$6,$5,$7,$1;
  25184. starCategoryName="*".__comma(self._name());
  25185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25186. $ctx1.sendIdx[","]=1;
  25187. //>>excludeEnd("ctx");
  25188. $4=self._classes();
  25189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25190. $ctx1.sendIdx["classes"]=1;
  25191. //>>excludeEnd("ctx");
  25192. $3=$recv($4)._collect_((function(each){
  25193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25194. return $core.withContext(function($ctx2) {
  25195. //>>excludeEnd("ctx");
  25196. return $recv(each)._superclass();
  25197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25198. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  25199. //>>excludeEnd("ctx");
  25200. }));
  25201. $2=$recv($3)._asSet();
  25202. $recv($2)._remove_ifAbsent_(nil,(function(){
  25203. }));
  25204. $recv($2)._addAll_($recv($recv($Smalltalk())._classes())._select_((function(each){
  25205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25206. return $core.withContext(function($ctx2) {
  25207. //>>excludeEnd("ctx");
  25208. $6=$recv(each)._protocols();
  25209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25210. $ctx2.sendIdx["protocols"]=1;
  25211. //>>excludeEnd("ctx");
  25212. $5=$recv($6).__comma($recv($recv(each)._class())._protocols());
  25213. return $recv($5)._includes_(starCategoryName);
  25214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25215. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  25216. //>>excludeEnd("ctx");
  25217. })));
  25218. $7=$recv($2)._yourself();
  25219. $1=$7;
  25220. return $1;
  25221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25222. }, function($ctx1) {$ctx1.fill(self,"loadDependencyClasses",{starCategoryName:starCategoryName},$globals.Package)});
  25223. //>>excludeEnd("ctx");
  25224. },
  25225. //>>excludeStart("ide", pragmas.excludeIdeData);
  25226. args: [],
  25227. source: "loadDependencyClasses\x0a\x09\x22Returns classes needed at the time of loading a package.\x0a\x09These are all that are used to subclass\x0a\x09and to define an extension method\x22\x0a\x09\x0a\x09| starCategoryName |\x0a\x09starCategoryName := '*', self name.\x0a\x09^ (self classes collect: [ :each | each superclass ]) asSet\x0a\x09\x09remove: nil ifAbsent: [];\x0a\x09\x09addAll: (Smalltalk classes select: [ :each | each protocols, each class protocols includes: starCategoryName ]);\x0a\x09\x09yourself",
  25228. referencedClasses: ["Smalltalk"],
  25229. //>>excludeEnd("ide");
  25230. messageSends: [",", "name", "remove:ifAbsent:", "asSet", "collect:", "classes", "superclass", "addAll:", "select:", "includes:", "protocols", "class", "yourself"]
  25231. }),
  25232. $globals.Package);
  25233. $core.addMethod(
  25234. $core.method({
  25235. selector: "name",
  25236. protocol: 'accessing',
  25237. fn: function (){
  25238. var self=this;
  25239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25240. return $core.withContext(function($ctx1) {
  25241. //>>excludeEnd("ctx");
  25242. return self.pkgName;
  25243. return self;
  25244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25245. }, function($ctx1) {$ctx1.fill(self,"name",{},$globals.Package)});
  25246. //>>excludeEnd("ctx");
  25247. },
  25248. //>>excludeStart("ide", pragmas.excludeIdeData);
  25249. args: [],
  25250. source: "name\x0a\x09<return self.pkgName>",
  25251. referencedClasses: [],
  25252. //>>excludeEnd("ide");
  25253. messageSends: []
  25254. }),
  25255. $globals.Package);
  25256. $core.addMethod(
  25257. $core.method({
  25258. selector: "name:",
  25259. protocol: 'accessing',
  25260. fn: function (aString){
  25261. var self=this;
  25262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25263. return $core.withContext(function($ctx1) {
  25264. //>>excludeEnd("ctx");
  25265. self._basicName_(aString);
  25266. self._beDirty();
  25267. return self;
  25268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25269. }, function($ctx1) {$ctx1.fill(self,"name:",{aString:aString},$globals.Package)});
  25270. //>>excludeEnd("ctx");
  25271. },
  25272. //>>excludeStart("ide", pragmas.excludeIdeData);
  25273. args: ["aString"],
  25274. source: "name: aString\x0a\x09self basicName: aString.\x0a\x09self beDirty",
  25275. referencedClasses: [],
  25276. //>>excludeEnd("ide");
  25277. messageSends: ["basicName:", "beDirty"]
  25278. }),
  25279. $globals.Package);
  25280. $core.addMethod(
  25281. $core.method({
  25282. selector: "organization",
  25283. protocol: 'accessing',
  25284. fn: function (){
  25285. var self=this;
  25286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25287. return $core.withContext(function($ctx1) {
  25288. //>>excludeEnd("ctx");
  25289. var $1;
  25290. $1=self._basicAt_("organization");
  25291. return $1;
  25292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25293. }, function($ctx1) {$ctx1.fill(self,"organization",{},$globals.Package)});
  25294. //>>excludeEnd("ctx");
  25295. },
  25296. //>>excludeStart("ide", pragmas.excludeIdeData);
  25297. args: [],
  25298. source: "organization\x0a\x09^ self basicAt: 'organization'",
  25299. referencedClasses: [],
  25300. //>>excludeEnd("ide");
  25301. messageSends: ["basicAt:"]
  25302. }),
  25303. $globals.Package);
  25304. $core.addMethod(
  25305. $core.method({
  25306. selector: "printOn:",
  25307. protocol: 'printing',
  25308. fn: function (aStream){
  25309. var self=this;
  25310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25311. return $core.withContext(function($ctx1) {
  25312. //>>excludeEnd("ctx");
  25313. var $1;
  25314. (
  25315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25316. $ctx1.supercall = true,
  25317. //>>excludeEnd("ctx");
  25318. $globals.Package.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  25319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25320. $ctx1.supercall = false;
  25321. //>>excludeEnd("ctx");;
  25322. $recv(aStream)._nextPutAll_(" (");
  25323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25324. $ctx1.sendIdx["nextPutAll:"]=1;
  25325. //>>excludeEnd("ctx");
  25326. $recv(aStream)._nextPutAll_(self._name());
  25327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25328. $ctx1.sendIdx["nextPutAll:"]=2;
  25329. //>>excludeEnd("ctx");
  25330. $1=$recv(aStream)._nextPutAll_(")");
  25331. return self;
  25332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25333. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.Package)});
  25334. //>>excludeEnd("ctx");
  25335. },
  25336. //>>excludeStart("ide", pragmas.excludeIdeData);
  25337. args: ["aStream"],
  25338. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream \x0a\x09\x09nextPutAll: ' (';\x0a\x09\x09nextPutAll: self name;\x0a\x09\x09nextPutAll: ')'",
  25339. referencedClasses: [],
  25340. //>>excludeEnd("ide");
  25341. messageSends: ["printOn:", "nextPutAll:", "name"]
  25342. }),
  25343. $globals.Package);
  25344. $core.addMethod(
  25345. $core.method({
  25346. selector: "setupClasses",
  25347. protocol: 'classes',
  25348. fn: function (){
  25349. var self=this;
  25350. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  25351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25352. return $core.withContext(function($ctx1) {
  25353. //>>excludeEnd("ctx");
  25354. var $1,$2;
  25355. $1=self._classes();
  25356. $recv($1)._do_((function(each){
  25357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25358. return $core.withContext(function($ctx2) {
  25359. //>>excludeEnd("ctx");
  25360. return $recv($recv($ClassBuilder())._new())._setupClass_(each);
  25361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25362. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  25363. //>>excludeEnd("ctx");
  25364. }));
  25365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25366. $ctx1.sendIdx["do:"]=1;
  25367. //>>excludeEnd("ctx");
  25368. $2=$recv($1)._do_((function(each){
  25369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25370. return $core.withContext(function($ctx2) {
  25371. //>>excludeEnd("ctx");
  25372. return $recv(each)._initialize();
  25373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25374. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  25375. //>>excludeEnd("ctx");
  25376. }));
  25377. return self;
  25378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25379. }, function($ctx1) {$ctx1.fill(self,"setupClasses",{},$globals.Package)});
  25380. //>>excludeEnd("ctx");
  25381. },
  25382. //>>excludeStart("ide", pragmas.excludeIdeData);
  25383. args: [],
  25384. source: "setupClasses\x0a\x09self classes\x0a\x09\x09do: [ :each | ClassBuilder new setupClass: each ];\x0a\x09\x09do: [ :each | each initialize ]",
  25385. referencedClasses: ["ClassBuilder"],
  25386. //>>excludeEnd("ide");
  25387. messageSends: ["do:", "classes", "setupClass:", "new", "initialize"]
  25388. }),
  25389. $globals.Package);
  25390. $core.addMethod(
  25391. $core.method({
  25392. selector: "sortedClasses",
  25393. protocol: 'classes',
  25394. fn: function (){
  25395. var self=this;
  25396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25397. return $core.withContext(function($ctx1) {
  25398. //>>excludeEnd("ctx");
  25399. var $1;
  25400. $1=$recv(self._class())._sortedClasses_(self._classes());
  25401. return $1;
  25402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25403. }, function($ctx1) {$ctx1.fill(self,"sortedClasses",{},$globals.Package)});
  25404. //>>excludeEnd("ctx");
  25405. },
  25406. //>>excludeStart("ide", pragmas.excludeIdeData);
  25407. args: [],
  25408. source: "sortedClasses\x0a\x09\x22Answer all classes in the receiver, sorted by superclass/subclasses and by class name for common subclasses (Issue #143).\x22\x0a\x0a\x09^ self class sortedClasses: self classes",
  25409. referencedClasses: [],
  25410. //>>excludeEnd("ide");
  25411. messageSends: ["sortedClasses:", "class", "classes"]
  25412. }),
  25413. $globals.Package);
  25414. $core.addMethod(
  25415. $core.method({
  25416. selector: "transport",
  25417. protocol: 'accessing',
  25418. fn: function (){
  25419. var self=this;
  25420. function $PackageTransport(){return $globals.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
  25421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25422. return $core.withContext(function($ctx1) {
  25423. //>>excludeEnd("ctx");
  25424. var $2,$3,$4,$1,$receiver;
  25425. $2=self["@transport"];
  25426. if(($receiver = $2) == null || $receiver.isNil){
  25427. $3=$recv($PackageTransport())._fromJson_(self._basicTransport());
  25428. $recv($3)._package_(self);
  25429. $4=$recv($3)._yourself();
  25430. self["@transport"]=$4;
  25431. $1=self["@transport"];
  25432. } else {
  25433. $1=$2;
  25434. };
  25435. return $1;
  25436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25437. }, function($ctx1) {$ctx1.fill(self,"transport",{},$globals.Package)});
  25438. //>>excludeEnd("ctx");
  25439. },
  25440. //>>excludeStart("ide", pragmas.excludeIdeData);
  25441. args: [],
  25442. source: "transport\x0a\x09^ transport ifNil: [ \x0a\x09\x09transport := (PackageTransport fromJson: self basicTransport)\x0a\x09\x09\x09package: self;\x0a\x09\x09\x09yourself ]",
  25443. referencedClasses: ["PackageTransport"],
  25444. //>>excludeEnd("ide");
  25445. messageSends: ["ifNil:", "package:", "fromJson:", "basicTransport", "yourself"]
  25446. }),
  25447. $globals.Package);
  25448. $core.addMethod(
  25449. $core.method({
  25450. selector: "transport:",
  25451. protocol: 'accessing',
  25452. fn: function (aPackageTransport){
  25453. var self=this;
  25454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25455. return $core.withContext(function($ctx1) {
  25456. //>>excludeEnd("ctx");
  25457. self["@transport"]=aPackageTransport;
  25458. $recv(aPackageTransport)._package_(self);
  25459. return self;
  25460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25461. }, function($ctx1) {$ctx1.fill(self,"transport:",{aPackageTransport:aPackageTransport},$globals.Package)});
  25462. //>>excludeEnd("ctx");
  25463. },
  25464. //>>excludeStart("ide", pragmas.excludeIdeData);
  25465. args: ["aPackageTransport"],
  25466. source: "transport: aPackageTransport\x0a\x09transport := aPackageTransport.\x0a\x09aPackageTransport package: self",
  25467. referencedClasses: [],
  25468. //>>excludeEnd("ide");
  25469. messageSends: ["package:"]
  25470. }),
  25471. $globals.Package);
  25472. $globals.Package.klass.iVarNames = ['defaultCommitPathJs','defaultCommitPathSt'];
  25473. $core.addMethod(
  25474. $core.method({
  25475. selector: "named:",
  25476. protocol: 'accessing',
  25477. fn: function (aPackageName){
  25478. var self=this;
  25479. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25481. return $core.withContext(function($ctx1) {
  25482. //>>excludeEnd("ctx");
  25483. var $1;
  25484. $1=$recv($Smalltalk())._packageAt_ifAbsent_(aPackageName,(function(){
  25485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25486. return $core.withContext(function($ctx2) {
  25487. //>>excludeEnd("ctx");
  25488. return $recv($Smalltalk())._createPackage_(aPackageName);
  25489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25490. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  25491. //>>excludeEnd("ctx");
  25492. }));
  25493. return $1;
  25494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25495. }, function($ctx1) {$ctx1.fill(self,"named:",{aPackageName:aPackageName},$globals.Package.klass)});
  25496. //>>excludeEnd("ctx");
  25497. },
  25498. //>>excludeStart("ide", pragmas.excludeIdeData);
  25499. args: ["aPackageName"],
  25500. source: "named: aPackageName\x0a\x09^ Smalltalk \x0a\x09\x09packageAt: aPackageName\x0a\x09\x09ifAbsent: [ \x0a\x09\x09\x09Smalltalk createPackage: aPackageName ]",
  25501. referencedClasses: ["Smalltalk"],
  25502. //>>excludeEnd("ide");
  25503. messageSends: ["packageAt:ifAbsent:", "createPackage:"]
  25504. }),
  25505. $globals.Package.klass);
  25506. $core.addMethod(
  25507. $core.method({
  25508. selector: "named:ifAbsent:",
  25509. protocol: 'accessing',
  25510. fn: function (aPackageName,aBlock){
  25511. var self=this;
  25512. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  25513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25514. return $core.withContext(function($ctx1) {
  25515. //>>excludeEnd("ctx");
  25516. var $1;
  25517. $1=$recv($Smalltalk())._packageAt_ifAbsent_(aPackageName,aBlock);
  25518. return $1;
  25519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25520. }, function($ctx1) {$ctx1.fill(self,"named:ifAbsent:",{aPackageName:aPackageName,aBlock:aBlock},$globals.Package.klass)});
  25521. //>>excludeEnd("ctx");
  25522. },
  25523. //>>excludeStart("ide", pragmas.excludeIdeData);
  25524. args: ["aPackageName", "aBlock"],
  25525. source: "named: aPackageName ifAbsent: aBlock\x0a\x09^ Smalltalk packageAt: aPackageName ifAbsent: aBlock",
  25526. referencedClasses: ["Smalltalk"],
  25527. //>>excludeEnd("ide");
  25528. messageSends: ["packageAt:ifAbsent:"]
  25529. }),
  25530. $globals.Package.klass);
  25531. $core.addMethod(
  25532. $core.method({
  25533. selector: "named:transport:",
  25534. protocol: 'accessing',
  25535. fn: function (aPackageName,aTransport){
  25536. var self=this;
  25537. var package_;
  25538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25539. return $core.withContext(function($ctx1) {
  25540. //>>excludeEnd("ctx");
  25541. var $1;
  25542. package_=self._named_(aPackageName);
  25543. $recv(package_)._transport_(aTransport);
  25544. $1=package_;
  25545. return $1;
  25546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25547. }, function($ctx1) {$ctx1.fill(self,"named:transport:",{aPackageName:aPackageName,aTransport:aTransport,package_:package_},$globals.Package.klass)});
  25548. //>>excludeEnd("ctx");
  25549. },
  25550. //>>excludeStart("ide", pragmas.excludeIdeData);
  25551. args: ["aPackageName", "aTransport"],
  25552. source: "named: aPackageName transport: aTransport\x0a\x09| package |\x0a\x09\x0a\x09package := self named: aPackageName.\x0a\x09package transport: aTransport.\x0a\x09\x0a\x09^ package",
  25553. referencedClasses: [],
  25554. //>>excludeEnd("ide");
  25555. messageSends: ["named:", "transport:"]
  25556. }),
  25557. $globals.Package.klass);
  25558. $core.addMethod(
  25559. $core.method({
  25560. selector: "sortedClasses:",
  25561. protocol: 'sorting',
  25562. fn: function (classes){
  25563. var self=this;
  25564. var children,others,nodes,expandedClasses;
  25565. function $ClassSorterNode(){return $globals.ClassSorterNode||(typeof ClassSorterNode=="undefined"?nil:ClassSorterNode)}
  25566. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  25567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25568. return $core.withContext(function($ctx1) {
  25569. //>>excludeEnd("ctx");
  25570. var $1,$3,$2,$4;
  25571. children=[];
  25572. others=[];
  25573. $recv(classes)._do_((function(each){
  25574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25575. return $core.withContext(function($ctx2) {
  25576. //>>excludeEnd("ctx");
  25577. $1=$recv(classes)._includes_($recv(each)._superclass());
  25578. if($core.assert($1)){
  25579. return $recv(others)._add_(each);
  25580. } else {
  25581. return $recv(children)._add_(each);
  25582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25583. $ctx2.sendIdx["add:"]=1;
  25584. //>>excludeEnd("ctx");
  25585. };
  25586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25587. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  25588. //>>excludeEnd("ctx");
  25589. }));
  25590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25591. $ctx1.sendIdx["do:"]=1;
  25592. //>>excludeEnd("ctx");
  25593. nodes=$recv(children)._collect_((function(each){
  25594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25595. return $core.withContext(function($ctx2) {
  25596. //>>excludeEnd("ctx");
  25597. return $recv($ClassSorterNode())._on_classes_level_(each,others,(0));
  25598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25599. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  25600. //>>excludeEnd("ctx");
  25601. }));
  25602. nodes=$recv(nodes)._sorted_((function(a,b){
  25603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25604. return $core.withContext(function($ctx2) {
  25605. //>>excludeEnd("ctx");
  25606. $3=$recv(a)._theClass();
  25607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25608. $ctx2.sendIdx["theClass"]=1;
  25609. //>>excludeEnd("ctx");
  25610. $2=$recv($3)._name();
  25611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25612. $ctx2.sendIdx["name"]=1;
  25613. //>>excludeEnd("ctx");
  25614. return $recv($2).__lt_eq($recv($recv(b)._theClass())._name());
  25615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25616. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,5)});
  25617. //>>excludeEnd("ctx");
  25618. }));
  25619. expandedClasses=$recv($Array())._new();
  25620. $recv(nodes)._do_((function(aNode){
  25621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25622. return $core.withContext(function($ctx2) {
  25623. //>>excludeEnd("ctx");
  25624. return $recv(aNode)._traverseClassesWith_(expandedClasses);
  25625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25626. }, function($ctx2) {$ctx2.fillBlock({aNode:aNode},$ctx1,6)});
  25627. //>>excludeEnd("ctx");
  25628. }));
  25629. $4=expandedClasses;
  25630. return $4;
  25631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25632. }, function($ctx1) {$ctx1.fill(self,"sortedClasses:",{classes:classes,children:children,others:others,nodes:nodes,expandedClasses:expandedClasses},$globals.Package.klass)});
  25633. //>>excludeEnd("ctx");
  25634. },
  25635. //>>excludeStart("ide", pragmas.excludeIdeData);
  25636. args: ["classes"],
  25637. source: "sortedClasses: classes\x0a\x09\x22Answer classes, sorted by superclass/subclasses and by class name for common subclasses (Issue #143)\x22\x0a\x0a\x09| children others nodes expandedClasses |\x0a\x09children := #().\x0a\x09others := #().\x0a\x09classes do: [ :each |\x0a\x09\x09(classes includes: each superclass)\x0a\x09\x09\x09ifFalse: [ children add: each ]\x0a\x09\x09\x09ifTrue: [ others add: each ]].\x0a\x09nodes := children collect: [ :each |\x0a\x09\x09ClassSorterNode on: each classes: others level: 0 ].\x0a\x09nodes := nodes sorted: [ :a :b | a theClass name <= b theClass name ].\x0a\x09expandedClasses := Array new.\x0a\x09nodes do: [ :aNode |\x0a\x09\x09aNode traverseClassesWith: expandedClasses ].\x0a\x09^ expandedClasses",
  25638. referencedClasses: ["ClassSorterNode", "Array"],
  25639. //>>excludeEnd("ide");
  25640. messageSends: ["do:", "ifFalse:ifTrue:", "includes:", "superclass", "add:", "collect:", "on:classes:level:", "sorted:", "<=", "name", "theClass", "new", "traverseClassesWith:"]
  25641. }),
  25642. $globals.Package.klass);
  25643. $core.addClass('PackageStateObserver', $globals.Object, [], 'Kernel-Infrastructure');
  25644. //>>excludeStart("ide", pragmas.excludeIdeData);
  25645. $globals.PackageStateObserver.comment="My current instance listens for any changes in the system that might affect the state of a package (being dirty).";
  25646. //>>excludeEnd("ide");
  25647. $core.addMethod(
  25648. $core.method({
  25649. selector: "announcer",
  25650. protocol: 'accessing',
  25651. fn: function (){
  25652. var self=this;
  25653. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  25654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25655. return $core.withContext(function($ctx1) {
  25656. //>>excludeEnd("ctx");
  25657. var $1;
  25658. $1=$recv($SystemAnnouncer())._current();
  25659. return $1;
  25660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25661. }, function($ctx1) {$ctx1.fill(self,"announcer",{},$globals.PackageStateObserver)});
  25662. //>>excludeEnd("ctx");
  25663. },
  25664. //>>excludeStart("ide", pragmas.excludeIdeData);
  25665. args: [],
  25666. source: "announcer\x0a\x09^ SystemAnnouncer current",
  25667. referencedClasses: ["SystemAnnouncer"],
  25668. //>>excludeEnd("ide");
  25669. messageSends: ["current"]
  25670. }),
  25671. $globals.PackageStateObserver);
  25672. $core.addMethod(
  25673. $core.method({
  25674. selector: "observeSystem",
  25675. protocol: 'actions',
  25676. fn: function (){
  25677. var self=this;
  25678. function $PackageAdded(){return $globals.PackageAdded||(typeof PackageAdded=="undefined"?nil:PackageAdded)}
  25679. function $ClassAnnouncement(){return $globals.ClassAnnouncement||(typeof ClassAnnouncement=="undefined"?nil:ClassAnnouncement)}
  25680. function $MethodAnnouncement(){return $globals.MethodAnnouncement||(typeof MethodAnnouncement=="undefined"?nil:MethodAnnouncement)}
  25681. function $ProtocolAnnouncement(){return $globals.ProtocolAnnouncement||(typeof ProtocolAnnouncement=="undefined"?nil:ProtocolAnnouncement)}
  25682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25683. return $core.withContext(function($ctx1) {
  25684. //>>excludeEnd("ctx");
  25685. var $1,$2;
  25686. $1=self._announcer();
  25687. $recv($1)._on_send_to_($PackageAdded(),"onPackageAdded:",self);
  25688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25689. $ctx1.sendIdx["on:send:to:"]=1;
  25690. //>>excludeEnd("ctx");
  25691. $recv($1)._on_send_to_($ClassAnnouncement(),"onClassModification:",self);
  25692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25693. $ctx1.sendIdx["on:send:to:"]=2;
  25694. //>>excludeEnd("ctx");
  25695. $recv($1)._on_send_to_($MethodAnnouncement(),"onMethodModification:",self);
  25696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25697. $ctx1.sendIdx["on:send:to:"]=3;
  25698. //>>excludeEnd("ctx");
  25699. $2=$recv($1)._on_send_to_($ProtocolAnnouncement(),"onProtocolModification:",self);
  25700. return self;
  25701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25702. }, function($ctx1) {$ctx1.fill(self,"observeSystem",{},$globals.PackageStateObserver)});
  25703. //>>excludeEnd("ctx");
  25704. },
  25705. //>>excludeStart("ide", pragmas.excludeIdeData);
  25706. args: [],
  25707. source: "observeSystem\x0a\x09self announcer\x0a\x09\x09on: PackageAdded\x0a\x09\x09send: #onPackageAdded:\x0a\x09\x09to: self;\x0a\x09\x09\x0a\x09\x09on: ClassAnnouncement\x0a\x09\x09send: #onClassModification:\x0a\x09\x09to: self;\x0a\x09\x09\x0a\x09\x09on: MethodAnnouncement\x0a\x09\x09send: #onMethodModification:\x0a\x09\x09to: self;\x0a\x09\x09\x0a\x09\x09on: ProtocolAnnouncement\x0a\x09\x09send: #onProtocolModification:\x0a\x09\x09to: self",
  25708. referencedClasses: ["PackageAdded", "ClassAnnouncement", "MethodAnnouncement", "ProtocolAnnouncement"],
  25709. //>>excludeEnd("ide");
  25710. messageSends: ["on:send:to:", "announcer"]
  25711. }),
  25712. $globals.PackageStateObserver);
  25713. $core.addMethod(
  25714. $core.method({
  25715. selector: "onClassModification:",
  25716. protocol: 'reactions',
  25717. fn: function (anAnnouncement){
  25718. var self=this;
  25719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25720. return $core.withContext(function($ctx1) {
  25721. //>>excludeEnd("ctx");
  25722. var $1,$receiver;
  25723. $1=$recv(anAnnouncement)._theClass();
  25724. if(($receiver = $1) == null || $receiver.isNil){
  25725. $1;
  25726. } else {
  25727. var theClass;
  25728. theClass=$receiver;
  25729. $recv($recv(theClass)._package())._beDirty();
  25730. };
  25731. return self;
  25732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25733. }, function($ctx1) {$ctx1.fill(self,"onClassModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25734. //>>excludeEnd("ctx");
  25735. },
  25736. //>>excludeStart("ide", pragmas.excludeIdeData);
  25737. args: ["anAnnouncement"],
  25738. source: "onClassModification: anAnnouncement\x0a\x09anAnnouncement theClass ifNotNil: [ :theClass | theClass package beDirty ]",
  25739. referencedClasses: [],
  25740. //>>excludeEnd("ide");
  25741. messageSends: ["ifNotNil:", "theClass", "beDirty", "package"]
  25742. }),
  25743. $globals.PackageStateObserver);
  25744. $core.addMethod(
  25745. $core.method({
  25746. selector: "onMethodModification:",
  25747. protocol: 'reactions',
  25748. fn: function (anAnnouncement){
  25749. var self=this;
  25750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25751. return $core.withContext(function($ctx1) {
  25752. //>>excludeEnd("ctx");
  25753. var $1,$receiver;
  25754. $1=$recv($recv(anAnnouncement)._method())._package();
  25755. if(($receiver = $1) == null || $receiver.isNil){
  25756. $1;
  25757. } else {
  25758. var package_;
  25759. package_=$receiver;
  25760. $recv(package_)._beDirty();
  25761. };
  25762. return self;
  25763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25764. }, function($ctx1) {$ctx1.fill(self,"onMethodModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25765. //>>excludeEnd("ctx");
  25766. },
  25767. //>>excludeStart("ide", pragmas.excludeIdeData);
  25768. args: ["anAnnouncement"],
  25769. source: "onMethodModification: anAnnouncement\x0a\x09anAnnouncement method package ifNotNil: [ :package | package beDirty ]",
  25770. referencedClasses: [],
  25771. //>>excludeEnd("ide");
  25772. messageSends: ["ifNotNil:", "package", "method", "beDirty"]
  25773. }),
  25774. $globals.PackageStateObserver);
  25775. $core.addMethod(
  25776. $core.method({
  25777. selector: "onPackageAdded:",
  25778. protocol: 'reactions',
  25779. fn: function (anAnnouncement){
  25780. var self=this;
  25781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25782. return $core.withContext(function($ctx1) {
  25783. //>>excludeEnd("ctx");
  25784. $recv($recv(anAnnouncement)._package())._beDirty();
  25785. return self;
  25786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25787. }, function($ctx1) {$ctx1.fill(self,"onPackageAdded:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25788. //>>excludeEnd("ctx");
  25789. },
  25790. //>>excludeStart("ide", pragmas.excludeIdeData);
  25791. args: ["anAnnouncement"],
  25792. source: "onPackageAdded: anAnnouncement\x0a\x09anAnnouncement package beDirty",
  25793. referencedClasses: [],
  25794. //>>excludeEnd("ide");
  25795. messageSends: ["beDirty", "package"]
  25796. }),
  25797. $globals.PackageStateObserver);
  25798. $core.addMethod(
  25799. $core.method({
  25800. selector: "onProtocolModification:",
  25801. protocol: 'reactions',
  25802. fn: function (anAnnouncement){
  25803. var self=this;
  25804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25805. return $core.withContext(function($ctx1) {
  25806. //>>excludeEnd("ctx");
  25807. var $1,$receiver;
  25808. $1=$recv(anAnnouncement)._package();
  25809. if(($receiver = $1) == null || $receiver.isNil){
  25810. $1;
  25811. } else {
  25812. var package_;
  25813. package_=$receiver;
  25814. $recv(package_)._beDirty();
  25815. };
  25816. return self;
  25817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25818. }, function($ctx1) {$ctx1.fill(self,"onProtocolModification:",{anAnnouncement:anAnnouncement},$globals.PackageStateObserver)});
  25819. //>>excludeEnd("ctx");
  25820. },
  25821. //>>excludeStart("ide", pragmas.excludeIdeData);
  25822. args: ["anAnnouncement"],
  25823. source: "onProtocolModification: anAnnouncement\x0a\x09anAnnouncement package ifNotNil: [ :package | package beDirty ]",
  25824. referencedClasses: [],
  25825. //>>excludeEnd("ide");
  25826. messageSends: ["ifNotNil:", "package", "beDirty"]
  25827. }),
  25828. $globals.PackageStateObserver);
  25829. $globals.PackageStateObserver.klass.iVarNames = ['current'];
  25830. $core.addMethod(
  25831. $core.method({
  25832. selector: "current",
  25833. protocol: 'accessing',
  25834. fn: function (){
  25835. var self=this;
  25836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25837. return $core.withContext(function($ctx1) {
  25838. //>>excludeEnd("ctx");
  25839. var $2,$1,$receiver;
  25840. $2=self["@current"];
  25841. if(($receiver = $2) == null || $receiver.isNil){
  25842. self["@current"]=self._new();
  25843. $1=self["@current"];
  25844. } else {
  25845. $1=$2;
  25846. };
  25847. return $1;
  25848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25849. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.PackageStateObserver.klass)});
  25850. //>>excludeEnd("ctx");
  25851. },
  25852. //>>excludeStart("ide", pragmas.excludeIdeData);
  25853. args: [],
  25854. source: "current\x0a\x09^ current ifNil: [ current := self new ]",
  25855. referencedClasses: [],
  25856. //>>excludeEnd("ide");
  25857. messageSends: ["ifNil:", "new"]
  25858. }),
  25859. $globals.PackageStateObserver.klass);
  25860. $core.addMethod(
  25861. $core.method({
  25862. selector: "initialize",
  25863. protocol: 'initialization',
  25864. fn: function (){
  25865. var self=this;
  25866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25867. return $core.withContext(function($ctx1) {
  25868. //>>excludeEnd("ctx");
  25869. $recv(self._current())._observeSystem();
  25870. return self;
  25871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25872. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.PackageStateObserver.klass)});
  25873. //>>excludeEnd("ctx");
  25874. },
  25875. //>>excludeStart("ide", pragmas.excludeIdeData);
  25876. args: [],
  25877. source: "initialize\x0a\x09self current observeSystem",
  25878. referencedClasses: [],
  25879. //>>excludeEnd("ide");
  25880. messageSends: ["observeSystem", "current"]
  25881. }),
  25882. $globals.PackageStateObserver.klass);
  25883. $core.addClass('PlatformInterface', $globals.Object, [], 'Kernel-Infrastructure');
  25884. //>>excludeStart("ide", pragmas.excludeIdeData);
  25885. $globals.PlatformInterface.comment="I am single entry point to UI and environment interface.\x0aMy `initialize` tries several options (for now, browser environment only) to set myself up.\x0a\x0a## API\x0a\x0a PlatformInterface alert: 'Hey, there is a problem'.\x0a PlatformInterface confirm: 'Affirmative?'.\x0a PlatformInterface prompt: 'Your name:'.\x0a\x0a PlatformInterface ajax: #{\x0a 'url' -> '/patch.js'. 'type' -> 'GET'. dataType->'script'\x0a }.";
  25886. //>>excludeEnd("ide");
  25887. $globals.PlatformInterface.klass.iVarNames = ['worker'];
  25888. $core.addMethod(
  25889. $core.method({
  25890. selector: "ajax:",
  25891. protocol: 'actions',
  25892. fn: function (anObject){
  25893. var self=this;
  25894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25895. return $core.withContext(function($ctx1) {
  25896. //>>excludeEnd("ctx");
  25897. var $2,$1,$receiver;
  25898. $2=self["@worker"];
  25899. if(($receiver = $2) == null || $receiver.isNil){
  25900. $1=self._error_("ajax: not available");
  25901. } else {
  25902. $1=$recv(self["@worker"])._ajax_(anObject);
  25903. };
  25904. return $1;
  25905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25906. }, function($ctx1) {$ctx1.fill(self,"ajax:",{anObject:anObject},$globals.PlatformInterface.klass)});
  25907. //>>excludeEnd("ctx");
  25908. },
  25909. //>>excludeStart("ide", pragmas.excludeIdeData);
  25910. args: ["anObject"],
  25911. source: "ajax: anObject\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker ajax: anObject ]\x0a\x09\x09ifNil: [ self error: 'ajax: not available' ]",
  25912. referencedClasses: [],
  25913. //>>excludeEnd("ide");
  25914. messageSends: ["ifNotNil:ifNil:", "ajax:", "error:"]
  25915. }),
  25916. $globals.PlatformInterface.klass);
  25917. $core.addMethod(
  25918. $core.method({
  25919. selector: "alert:",
  25920. protocol: 'actions',
  25921. fn: function (aString){
  25922. var self=this;
  25923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25924. return $core.withContext(function($ctx1) {
  25925. //>>excludeEnd("ctx");
  25926. var $2,$1,$receiver;
  25927. $2=self["@worker"];
  25928. if(($receiver = $2) == null || $receiver.isNil){
  25929. $1=self._error_("alert: not available");
  25930. } else {
  25931. $1=$recv(self["@worker"])._alert_(aString);
  25932. };
  25933. return $1;
  25934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25935. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString},$globals.PlatformInterface.klass)});
  25936. //>>excludeEnd("ctx");
  25937. },
  25938. //>>excludeStart("ide", pragmas.excludeIdeData);
  25939. args: ["aString"],
  25940. source: "alert: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker alert: aString ]\x0a\x09\x09ifNil: [ self error: 'alert: not available' ]",
  25941. referencedClasses: [],
  25942. //>>excludeEnd("ide");
  25943. messageSends: ["ifNotNil:ifNil:", "alert:", "error:"]
  25944. }),
  25945. $globals.PlatformInterface.klass);
  25946. $core.addMethod(
  25947. $core.method({
  25948. selector: "confirm:",
  25949. protocol: 'actions',
  25950. fn: function (aString){
  25951. var self=this;
  25952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25953. return $core.withContext(function($ctx1) {
  25954. //>>excludeEnd("ctx");
  25955. var $2,$1,$receiver;
  25956. $2=self["@worker"];
  25957. if(($receiver = $2) == null || $receiver.isNil){
  25958. $1=self._error_("confirm: not available");
  25959. } else {
  25960. $1=$recv(self["@worker"])._confirm_(aString);
  25961. };
  25962. return $1;
  25963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25964. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString},$globals.PlatformInterface.klass)});
  25965. //>>excludeEnd("ctx");
  25966. },
  25967. //>>excludeStart("ide", pragmas.excludeIdeData);
  25968. args: ["aString"],
  25969. source: "confirm: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker confirm: aString ]\x0a\x09\x09ifNil: [ self error: 'confirm: not available' ]",
  25970. referencedClasses: [],
  25971. //>>excludeEnd("ide");
  25972. messageSends: ["ifNotNil:ifNil:", "confirm:", "error:"]
  25973. }),
  25974. $globals.PlatformInterface.klass);
  25975. $core.addMethod(
  25976. $core.method({
  25977. selector: "existsGlobal:",
  25978. protocol: 'actions',
  25979. fn: function (aString){
  25980. var self=this;
  25981. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  25982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25983. return $core.withContext(function($ctx1) {
  25984. //>>excludeEnd("ctx");
  25985. var $1;
  25986. $1=$recv($recv($PlatformInterface())._globals())._at_ifPresent_ifAbsent_(aString,(function(){
  25987. return true;
  25988. }),(function(){
  25989. return false;
  25990. }));
  25991. return $1;
  25992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  25993. }, function($ctx1) {$ctx1.fill(self,"existsGlobal:",{aString:aString},$globals.PlatformInterface.klass)});
  25994. //>>excludeEnd("ctx");
  25995. },
  25996. //>>excludeStart("ide", pragmas.excludeIdeData);
  25997. args: ["aString"],
  25998. source: "existsGlobal: aString\x0a\x09^ PlatformInterface globals \x0a\x09\x09at: aString \x0a\x09\x09ifPresent: [ true ] \x0a\x09\x09ifAbsent: [ false ]",
  25999. referencedClasses: ["PlatformInterface"],
  26000. //>>excludeEnd("ide");
  26001. messageSends: ["at:ifPresent:ifAbsent:", "globals"]
  26002. }),
  26003. $globals.PlatformInterface.klass);
  26004. $core.addMethod(
  26005. $core.method({
  26006. selector: "globals",
  26007. protocol: 'accessing',
  26008. fn: function (){
  26009. var self=this;
  26010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26011. return $core.withContext(function($ctx1) {
  26012. //>>excludeEnd("ctx");
  26013. return (new Function('return this'))();;
  26014. return self;
  26015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26016. }, function($ctx1) {$ctx1.fill(self,"globals",{},$globals.PlatformInterface.klass)});
  26017. //>>excludeEnd("ctx");
  26018. },
  26019. //>>excludeStart("ide", pragmas.excludeIdeData);
  26020. args: [],
  26021. source: "globals\x0a\x09<return (new Function('return this'))();>",
  26022. referencedClasses: [],
  26023. //>>excludeEnd("ide");
  26024. messageSends: []
  26025. }),
  26026. $globals.PlatformInterface.klass);
  26027. $core.addMethod(
  26028. $core.method({
  26029. selector: "initialize",
  26030. protocol: 'initialization',
  26031. fn: function (){
  26032. var self=this;
  26033. var candidate;
  26034. function $BrowserInterface(){return $globals.BrowserInterface||(typeof BrowserInterface=="undefined"?nil:BrowserInterface)}
  26035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26036. return $core.withContext(function($ctx1) {
  26037. //>>excludeEnd("ctx");
  26038. var $1,$receiver;
  26039. (
  26040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26041. $ctx1.supercall = true,
  26042. //>>excludeEnd("ctx");
  26043. $globals.PlatformInterface.klass.superclass.fn.prototype._initialize.apply($recv(self), []));
  26044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26045. $ctx1.supercall = false;
  26046. //>>excludeEnd("ctx");;
  26047. if(($receiver = $BrowserInterface()) == null || $receiver.isNil){
  26048. $BrowserInterface();
  26049. } else {
  26050. candidate=$recv($BrowserInterface())._new();
  26051. candidate;
  26052. $1=$recv(candidate)._isAvailable();
  26053. if($core.assert($1)){
  26054. self._setWorker_(candidate);
  26055. return self;
  26056. };
  26057. };
  26058. return self;
  26059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26060. }, function($ctx1) {$ctx1.fill(self,"initialize",{candidate:candidate},$globals.PlatformInterface.klass)});
  26061. //>>excludeEnd("ctx");
  26062. },
  26063. //>>excludeStart("ide", pragmas.excludeIdeData);
  26064. args: [],
  26065. source: "initialize\x0a\x09| candidate |\x0a\x09\x0a\x09super initialize.\x0a\x09\x0a\x09BrowserInterface ifNotNil: [\x0a\x09\x09candidate := BrowserInterface new.\x0a\x09\x09candidate isAvailable ifTrue: [ self setWorker: candidate. ^ self ]\x0a\x09]",
  26066. referencedClasses: ["BrowserInterface"],
  26067. //>>excludeEnd("ide");
  26068. messageSends: ["initialize", "ifNotNil:", "new", "ifTrue:", "isAvailable", "setWorker:"]
  26069. }),
  26070. $globals.PlatformInterface.klass);
  26071. $core.addMethod(
  26072. $core.method({
  26073. selector: "prompt:",
  26074. protocol: 'actions',
  26075. fn: function (aString){
  26076. var self=this;
  26077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26078. return $core.withContext(function($ctx1) {
  26079. //>>excludeEnd("ctx");
  26080. var $2,$1,$receiver;
  26081. $2=self["@worker"];
  26082. if(($receiver = $2) == null || $receiver.isNil){
  26083. $1=self._error_("prompt: not available");
  26084. } else {
  26085. $1=$recv(self["@worker"])._prompt_(aString);
  26086. };
  26087. return $1;
  26088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26089. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString},$globals.PlatformInterface.klass)});
  26090. //>>excludeEnd("ctx");
  26091. },
  26092. //>>excludeStart("ide", pragmas.excludeIdeData);
  26093. args: ["aString"],
  26094. source: "prompt: aString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker prompt: aString ]\x0a\x09\x09ifNil: [ self error: 'prompt: not available' ]",
  26095. referencedClasses: [],
  26096. //>>excludeEnd("ide");
  26097. messageSends: ["ifNotNil:ifNil:", "prompt:", "error:"]
  26098. }),
  26099. $globals.PlatformInterface.klass);
  26100. $core.addMethod(
  26101. $core.method({
  26102. selector: "prompt:default:",
  26103. protocol: 'actions',
  26104. fn: function (aString,defaultString){
  26105. var self=this;
  26106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26107. return $core.withContext(function($ctx1) {
  26108. //>>excludeEnd("ctx");
  26109. var $2,$1,$receiver;
  26110. $2=self["@worker"];
  26111. if(($receiver = $2) == null || $receiver.isNil){
  26112. $1=self._error_("prompt: not available");
  26113. } else {
  26114. $1=$recv(self["@worker"])._prompt_default_(aString,defaultString);
  26115. };
  26116. return $1;
  26117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26118. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString},$globals.PlatformInterface.klass)});
  26119. //>>excludeEnd("ctx");
  26120. },
  26121. //>>excludeStart("ide", pragmas.excludeIdeData);
  26122. args: ["aString", "defaultString"],
  26123. source: "prompt: aString default: defaultString\x0a\x09^ worker\x0a\x09\x09ifNotNil: [ worker prompt: aString default: defaultString ]\x0a\x09\x09ifNil: [ self error: 'prompt: not available' ]",
  26124. referencedClasses: [],
  26125. //>>excludeEnd("ide");
  26126. messageSends: ["ifNotNil:ifNil:", "prompt:default:", "error:"]
  26127. }),
  26128. $globals.PlatformInterface.klass);
  26129. $core.addMethod(
  26130. $core.method({
  26131. selector: "setWorker:",
  26132. protocol: 'accessing',
  26133. fn: function (anObject){
  26134. var self=this;
  26135. self["@worker"]=anObject;
  26136. return self;
  26137. },
  26138. //>>excludeStart("ide", pragmas.excludeIdeData);
  26139. args: ["anObject"],
  26140. source: "setWorker: anObject\x0a\x09worker := anObject",
  26141. referencedClasses: [],
  26142. //>>excludeEnd("ide");
  26143. messageSends: []
  26144. }),
  26145. $globals.PlatformInterface.klass);
  26146. $core.addClass('Service', $globals.Object, [], 'Kernel-Infrastructure');
  26147. //>>excludeStart("ide", pragmas.excludeIdeData);
  26148. $globals.Service.comment="I implement the basic behavior for class registration to a service.\x0a\x0aSee the `Transcript` class for a concrete service.\x0a\x0a## API\x0a\x0aUse class-side methods `#register:` and `#registerIfNone:` to register classes to a specific service.";
  26149. //>>excludeEnd("ide");
  26150. $globals.Service.klass.iVarNames = ['current'];
  26151. $core.addMethod(
  26152. $core.method({
  26153. selector: "current",
  26154. protocol: 'accessing',
  26155. fn: function (){
  26156. var self=this;
  26157. var $1;
  26158. $1=self["@current"];
  26159. return $1;
  26160. },
  26161. //>>excludeStart("ide", pragmas.excludeIdeData);
  26162. args: [],
  26163. source: "current\x0a\x09^ current",
  26164. referencedClasses: [],
  26165. //>>excludeEnd("ide");
  26166. messageSends: []
  26167. }),
  26168. $globals.Service.klass);
  26169. $core.addMethod(
  26170. $core.method({
  26171. selector: "new",
  26172. protocol: 'instance creation',
  26173. fn: function (){
  26174. var self=this;
  26175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26176. return $core.withContext(function($ctx1) {
  26177. //>>excludeEnd("ctx");
  26178. self._shouldNotImplement();
  26179. return self;
  26180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26181. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Service.klass)});
  26182. //>>excludeEnd("ctx");
  26183. },
  26184. //>>excludeStart("ide", pragmas.excludeIdeData);
  26185. args: [],
  26186. source: "new\x0a\x09self shouldNotImplement",
  26187. referencedClasses: [],
  26188. //>>excludeEnd("ide");
  26189. messageSends: ["shouldNotImplement"]
  26190. }),
  26191. $globals.Service.klass);
  26192. $core.addMethod(
  26193. $core.method({
  26194. selector: "register:",
  26195. protocol: 'registration',
  26196. fn: function (anObject){
  26197. var self=this;
  26198. self["@current"]=anObject;
  26199. return self;
  26200. },
  26201. //>>excludeStart("ide", pragmas.excludeIdeData);
  26202. args: ["anObject"],
  26203. source: "register: anObject\x0a\x09current := anObject",
  26204. referencedClasses: [],
  26205. //>>excludeEnd("ide");
  26206. messageSends: []
  26207. }),
  26208. $globals.Service.klass);
  26209. $core.addMethod(
  26210. $core.method({
  26211. selector: "registerIfNone:",
  26212. protocol: 'registration',
  26213. fn: function (anObject){
  26214. var self=this;
  26215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26216. return $core.withContext(function($ctx1) {
  26217. //>>excludeEnd("ctx");
  26218. var $1,$receiver;
  26219. $1=self._current();
  26220. if(($receiver = $1) == null || $receiver.isNil){
  26221. self._register_(anObject);
  26222. } else {
  26223. $1;
  26224. };
  26225. return self;
  26226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26227. }, function($ctx1) {$ctx1.fill(self,"registerIfNone:",{anObject:anObject},$globals.Service.klass)});
  26228. //>>excludeEnd("ctx");
  26229. },
  26230. //>>excludeStart("ide", pragmas.excludeIdeData);
  26231. args: ["anObject"],
  26232. source: "registerIfNone: anObject\x0a\x09self current ifNil: [ self register: anObject ]",
  26233. referencedClasses: [],
  26234. //>>excludeEnd("ide");
  26235. messageSends: ["ifNil:", "current", "register:"]
  26236. }),
  26237. $globals.Service.klass);
  26238. $core.addClass('ErrorHandler', $globals.Service, [], 'Kernel-Infrastructure');
  26239. //>>excludeStart("ide", pragmas.excludeIdeData);
  26240. $globals.ErrorHandler.comment="I am the service used to handle Smalltalk errors.\x0aSee `boot.js` `handleError()` function.\x0a\x0aRegistered service instances must implement `#handleError:` to perform an action on the thrown exception.";
  26241. //>>excludeEnd("ide");
  26242. $core.addMethod(
  26243. $core.method({
  26244. selector: "handleError:",
  26245. protocol: 'error handling',
  26246. fn: function (anError){
  26247. var self=this;
  26248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26249. return $core.withContext(function($ctx1) {
  26250. //>>excludeEnd("ctx");
  26251. self._handleUnhandledError_(anError);
  26252. return self;
  26253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26254. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.ErrorHandler.klass)});
  26255. //>>excludeEnd("ctx");
  26256. },
  26257. //>>excludeStart("ide", pragmas.excludeIdeData);
  26258. args: ["anError"],
  26259. source: "handleError: anError\x0a\x09self handleUnhandledError: anError",
  26260. referencedClasses: [],
  26261. //>>excludeEnd("ide");
  26262. messageSends: ["handleUnhandledError:"]
  26263. }),
  26264. $globals.ErrorHandler.klass);
  26265. $core.addMethod(
  26266. $core.method({
  26267. selector: "handleUnhandledError:",
  26268. protocol: 'error handling',
  26269. fn: function (anError){
  26270. var self=this;
  26271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26272. return $core.withContext(function($ctx1) {
  26273. //>>excludeEnd("ctx");
  26274. var $1,$2;
  26275. $1=$recv(anError)._wasHandled();
  26276. if($core.assert($1)){
  26277. return self;
  26278. };
  26279. $2=$recv(self._current())._handleError_(anError);
  26280. return $2;
  26281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26282. }, function($ctx1) {$ctx1.fill(self,"handleUnhandledError:",{anError:anError},$globals.ErrorHandler.klass)});
  26283. //>>excludeEnd("ctx");
  26284. },
  26285. //>>excludeStart("ide", pragmas.excludeIdeData);
  26286. args: ["anError"],
  26287. source: "handleUnhandledError: anError\x0a\x09anError wasHandled ifTrue: [ ^ self ].\x0a\x09\x0a\x09^ self current handleError: anError",
  26288. referencedClasses: [],
  26289. //>>excludeEnd("ide");
  26290. messageSends: ["ifTrue:", "wasHandled", "handleError:", "current"]
  26291. }),
  26292. $globals.ErrorHandler.klass);
  26293. $core.addClass('Finder', $globals.Service, [], 'Kernel-Infrastructure');
  26294. //>>excludeStart("ide", pragmas.excludeIdeData);
  26295. $globals.Finder.comment="I am the service responsible for finding classes/methods.\x0a__There is no default finder.__\x0a\x0a## API\x0a\x0aUse `#browse` on an object to find it.";
  26296. //>>excludeEnd("ide");
  26297. $core.addMethod(
  26298. $core.method({
  26299. selector: "findClass:",
  26300. protocol: 'finding',
  26301. fn: function (aClass){
  26302. var self=this;
  26303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26304. return $core.withContext(function($ctx1) {
  26305. //>>excludeEnd("ctx");
  26306. var $1;
  26307. $1=$recv(self._current())._findClass_(aClass);
  26308. return $1;
  26309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26310. }, function($ctx1) {$ctx1.fill(self,"findClass:",{aClass:aClass},$globals.Finder.klass)});
  26311. //>>excludeEnd("ctx");
  26312. },
  26313. //>>excludeStart("ide", pragmas.excludeIdeData);
  26314. args: ["aClass"],
  26315. source: "findClass: aClass\x0a\x09^ self current findClass: aClass",
  26316. referencedClasses: [],
  26317. //>>excludeEnd("ide");
  26318. messageSends: ["findClass:", "current"]
  26319. }),
  26320. $globals.Finder.klass);
  26321. $core.addMethod(
  26322. $core.method({
  26323. selector: "findMethod:",
  26324. protocol: 'finding',
  26325. fn: function (aCompiledMethod){
  26326. var self=this;
  26327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26328. return $core.withContext(function($ctx1) {
  26329. //>>excludeEnd("ctx");
  26330. var $1;
  26331. $1=$recv(self._current())._findMethod_(aCompiledMethod);
  26332. return $1;
  26333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26334. }, function($ctx1) {$ctx1.fill(self,"findMethod:",{aCompiledMethod:aCompiledMethod},$globals.Finder.klass)});
  26335. //>>excludeEnd("ctx");
  26336. },
  26337. //>>excludeStart("ide", pragmas.excludeIdeData);
  26338. args: ["aCompiledMethod"],
  26339. source: "findMethod: aCompiledMethod\x0a\x09^ self current findMethod: aCompiledMethod",
  26340. referencedClasses: [],
  26341. //>>excludeEnd("ide");
  26342. messageSends: ["findMethod:", "current"]
  26343. }),
  26344. $globals.Finder.klass);
  26345. $core.addMethod(
  26346. $core.method({
  26347. selector: "findString:",
  26348. protocol: 'finding',
  26349. fn: function (aString){
  26350. var self=this;
  26351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26352. return $core.withContext(function($ctx1) {
  26353. //>>excludeEnd("ctx");
  26354. var $1;
  26355. $1=$recv(self._current())._findString_(aString);
  26356. return $1;
  26357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26358. }, function($ctx1) {$ctx1.fill(self,"findString:",{aString:aString},$globals.Finder.klass)});
  26359. //>>excludeEnd("ctx");
  26360. },
  26361. //>>excludeStart("ide", pragmas.excludeIdeData);
  26362. args: ["aString"],
  26363. source: "findString: aString\x0a\x09^ self current findString: aString",
  26364. referencedClasses: [],
  26365. //>>excludeEnd("ide");
  26366. messageSends: ["findString:", "current"]
  26367. }),
  26368. $globals.Finder.klass);
  26369. $core.addClass('Inspector', $globals.Service, [], 'Kernel-Infrastructure');
  26370. //>>excludeStart("ide", pragmas.excludeIdeData);
  26371. $globals.Inspector.comment="I am the service responsible for inspecting objects.\x0a\x0aThe default inspector object is the transcript.";
  26372. //>>excludeEnd("ide");
  26373. $core.addMethod(
  26374. $core.method({
  26375. selector: "inspect:",
  26376. protocol: 'inspecting',
  26377. fn: function (anObject){
  26378. var self=this;
  26379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26380. return $core.withContext(function($ctx1) {
  26381. //>>excludeEnd("ctx");
  26382. var $1;
  26383. $1=$recv(self._current())._inspect_(anObject);
  26384. return $1;
  26385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26386. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Inspector.klass)});
  26387. //>>excludeEnd("ctx");
  26388. },
  26389. //>>excludeStart("ide", pragmas.excludeIdeData);
  26390. args: ["anObject"],
  26391. source: "inspect: anObject\x0a\x09^ self current inspect: anObject",
  26392. referencedClasses: [],
  26393. //>>excludeEnd("ide");
  26394. messageSends: ["inspect:", "current"]
  26395. }),
  26396. $globals.Inspector.klass);
  26397. $core.addClass('ProgressHandler', $globals.Service, [], 'Kernel-Infrastructure');
  26398. //>>excludeStart("ide", pragmas.excludeIdeData);
  26399. $globals.ProgressHandler.comment="I am used to manage progress in collection iterations, see `SequenceableCollection >> #do:displayingProgress:`.\x0a\x0aRegistered instances must implement `#do:on:displaying:`.\x0a\x0aThe default behavior is to simply iterate over the collection, using `NullProgressHandler`.";
  26400. //>>excludeEnd("ide");
  26401. $core.addMethod(
  26402. $core.method({
  26403. selector: "do:on:displaying:",
  26404. protocol: 'progress handling',
  26405. fn: function (aBlock,aCollection,aString){
  26406. var self=this;
  26407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26408. return $core.withContext(function($ctx1) {
  26409. //>>excludeEnd("ctx");
  26410. $recv(self._current())._do_on_displaying_(aBlock,aCollection,aString);
  26411. return self;
  26412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26413. }, function($ctx1) {$ctx1.fill(self,"do:on:displaying:",{aBlock:aBlock,aCollection:aCollection,aString:aString},$globals.ProgressHandler.klass)});
  26414. //>>excludeEnd("ctx");
  26415. },
  26416. //>>excludeStart("ide", pragmas.excludeIdeData);
  26417. args: ["aBlock", "aCollection", "aString"],
  26418. source: "do: aBlock on: aCollection displaying: aString\x0a\x09self current do: aBlock on: aCollection displaying: aString",
  26419. referencedClasses: [],
  26420. //>>excludeEnd("ide");
  26421. messageSends: ["do:on:displaying:", "current"]
  26422. }),
  26423. $globals.ProgressHandler.klass);
  26424. $core.addClass('Transcript', $globals.Service, [], 'Kernel-Infrastructure');
  26425. //>>excludeStart("ide", pragmas.excludeIdeData);
  26426. $globals.Transcript.comment="I am a facade for Transcript actions.\x0a\x0aI delegate actions to the currently registered transcript.\x0a\x0a## API\x0a\x0a Transcript \x0a show: 'hello world';\x0a cr;\x0a show: anObject.";
  26427. //>>excludeEnd("ide");
  26428. $core.addMethod(
  26429. $core.method({
  26430. selector: "clear",
  26431. protocol: 'printing',
  26432. fn: function (){
  26433. var self=this;
  26434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26435. return $core.withContext(function($ctx1) {
  26436. //>>excludeEnd("ctx");
  26437. $recv(self._current())._clear();
  26438. return self;
  26439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26440. }, function($ctx1) {$ctx1.fill(self,"clear",{},$globals.Transcript.klass)});
  26441. //>>excludeEnd("ctx");
  26442. },
  26443. //>>excludeStart("ide", pragmas.excludeIdeData);
  26444. args: [],
  26445. source: "clear\x0a\x09self current clear",
  26446. referencedClasses: [],
  26447. //>>excludeEnd("ide");
  26448. messageSends: ["clear", "current"]
  26449. }),
  26450. $globals.Transcript.klass);
  26451. $core.addMethod(
  26452. $core.method({
  26453. selector: "cr",
  26454. protocol: 'printing',
  26455. fn: function (){
  26456. var self=this;
  26457. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  26458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26459. return $core.withContext(function($ctx1) {
  26460. //>>excludeEnd("ctx");
  26461. $recv(self._current())._show_($recv($String())._cr());
  26462. return self;
  26463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26464. }, function($ctx1) {$ctx1.fill(self,"cr",{},$globals.Transcript.klass)});
  26465. //>>excludeEnd("ctx");
  26466. },
  26467. //>>excludeStart("ide", pragmas.excludeIdeData);
  26468. args: [],
  26469. source: "cr\x0a\x09self current show: String cr",
  26470. referencedClasses: ["String"],
  26471. //>>excludeEnd("ide");
  26472. messageSends: ["show:", "current", "cr"]
  26473. }),
  26474. $globals.Transcript.klass);
  26475. $core.addMethod(
  26476. $core.method({
  26477. selector: "inspect:",
  26478. protocol: 'printing',
  26479. fn: function (anObject){
  26480. var self=this;
  26481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26482. return $core.withContext(function($ctx1) {
  26483. //>>excludeEnd("ctx");
  26484. self._show_(anObject);
  26485. return self;
  26486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26487. }, function($ctx1) {$ctx1.fill(self,"inspect:",{anObject:anObject},$globals.Transcript.klass)});
  26488. //>>excludeEnd("ctx");
  26489. },
  26490. //>>excludeStart("ide", pragmas.excludeIdeData);
  26491. args: ["anObject"],
  26492. source: "inspect: anObject\x0a\x09self show: anObject",
  26493. referencedClasses: [],
  26494. //>>excludeEnd("ide");
  26495. messageSends: ["show:"]
  26496. }),
  26497. $globals.Transcript.klass);
  26498. $core.addMethod(
  26499. $core.method({
  26500. selector: "open",
  26501. protocol: 'instance creation',
  26502. fn: function (){
  26503. var self=this;
  26504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26505. return $core.withContext(function($ctx1) {
  26506. //>>excludeEnd("ctx");
  26507. $recv(self._current())._open();
  26508. return self;
  26509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26510. }, function($ctx1) {$ctx1.fill(self,"open",{},$globals.Transcript.klass)});
  26511. //>>excludeEnd("ctx");
  26512. },
  26513. //>>excludeStart("ide", pragmas.excludeIdeData);
  26514. args: [],
  26515. source: "open\x0a\x09self current open",
  26516. referencedClasses: [],
  26517. //>>excludeEnd("ide");
  26518. messageSends: ["open", "current"]
  26519. }),
  26520. $globals.Transcript.klass);
  26521. $core.addMethod(
  26522. $core.method({
  26523. selector: "show:",
  26524. protocol: 'printing',
  26525. fn: function (anObject){
  26526. var self=this;
  26527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26528. return $core.withContext(function($ctx1) {
  26529. //>>excludeEnd("ctx");
  26530. $recv(self._current())._show_(anObject);
  26531. return self;
  26532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26533. }, function($ctx1) {$ctx1.fill(self,"show:",{anObject:anObject},$globals.Transcript.klass)});
  26534. //>>excludeEnd("ctx");
  26535. },
  26536. //>>excludeStart("ide", pragmas.excludeIdeData);
  26537. args: ["anObject"],
  26538. source: "show: anObject\x0a\x09self current show: anObject",
  26539. referencedClasses: [],
  26540. //>>excludeEnd("ide");
  26541. messageSends: ["show:", "current"]
  26542. }),
  26543. $globals.Transcript.klass);
  26544. $core.addClass('Setting', $globals.Object, ['key', 'value', 'defaultValue'], 'Kernel-Infrastructure');
  26545. //>>excludeStart("ide", pragmas.excludeIdeData);
  26546. $globals.Setting.comment="I represent a setting **stored** at `Smalltalk settings`. \x0aIn the current implementation, `Smalltalk settings` is an object persisted in the localStorage.\x0a\x0a## API\x0a\x0aA `Setting` value can be read using `value` and set using `value:`.\x0a\x0aSettings are accessed with `'key' asSetting` or `'key' asSettingIfAbsent: aDefaultValue`.\x0a\x0aTo read the value of a setting you can also use the convenience:\x0a\x0a`theValueSet := 'any.characteristic' settingValue` \x0a\x0aor with a default using:\x0a\x0a `theEnsuredValueSet := 'any.characteristic' settingValueIfAbsent: true`";
  26547. //>>excludeEnd("ide");
  26548. $core.addMethod(
  26549. $core.method({
  26550. selector: "defaultValue",
  26551. protocol: 'accessing',
  26552. fn: function (){
  26553. var self=this;
  26554. var $1;
  26555. $1=self["@defaultValue"];
  26556. return $1;
  26557. },
  26558. //>>excludeStart("ide", pragmas.excludeIdeData);
  26559. args: [],
  26560. source: "defaultValue\x0a\x09^ defaultValue",
  26561. referencedClasses: [],
  26562. //>>excludeEnd("ide");
  26563. messageSends: []
  26564. }),
  26565. $globals.Setting);
  26566. $core.addMethod(
  26567. $core.method({
  26568. selector: "defaultValue:",
  26569. protocol: 'accessing',
  26570. fn: function (aStringifiableObject){
  26571. var self=this;
  26572. self["@defaultValue"]=aStringifiableObject;
  26573. return self;
  26574. },
  26575. //>>excludeStart("ide", pragmas.excludeIdeData);
  26576. args: ["aStringifiableObject"],
  26577. source: "defaultValue: aStringifiableObject\x0a\x09defaultValue := aStringifiableObject",
  26578. referencedClasses: [],
  26579. //>>excludeEnd("ide");
  26580. messageSends: []
  26581. }),
  26582. $globals.Setting);
  26583. $core.addMethod(
  26584. $core.method({
  26585. selector: "key",
  26586. protocol: 'accessing',
  26587. fn: function (){
  26588. var self=this;
  26589. var $1;
  26590. $1=self["@key"];
  26591. return $1;
  26592. },
  26593. //>>excludeStart("ide", pragmas.excludeIdeData);
  26594. args: [],
  26595. source: "key\x0a\x09^ key",
  26596. referencedClasses: [],
  26597. //>>excludeEnd("ide");
  26598. messageSends: []
  26599. }),
  26600. $globals.Setting);
  26601. $core.addMethod(
  26602. $core.method({
  26603. selector: "key:",
  26604. protocol: 'accessing',
  26605. fn: function (aString){
  26606. var self=this;
  26607. self["@key"]=aString;
  26608. return self;
  26609. },
  26610. //>>excludeStart("ide", pragmas.excludeIdeData);
  26611. args: ["aString"],
  26612. source: "key: aString\x0a\x09key := aString",
  26613. referencedClasses: [],
  26614. //>>excludeEnd("ide");
  26615. messageSends: []
  26616. }),
  26617. $globals.Setting);
  26618. $core.addMethod(
  26619. $core.method({
  26620. selector: "value",
  26621. protocol: 'accessing',
  26622. fn: function (){
  26623. var self=this;
  26624. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  26625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26626. return $core.withContext(function($ctx1) {
  26627. //>>excludeEnd("ctx");
  26628. var $1;
  26629. $1=$recv($recv($Smalltalk())._settings())._at_ifAbsent_(self._key(),(function(){
  26630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26631. return $core.withContext(function($ctx2) {
  26632. //>>excludeEnd("ctx");
  26633. return self._defaultValue();
  26634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26635. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  26636. //>>excludeEnd("ctx");
  26637. }));
  26638. return $1;
  26639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26640. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.Setting)});
  26641. //>>excludeEnd("ctx");
  26642. },
  26643. //>>excludeStart("ide", pragmas.excludeIdeData);
  26644. args: [],
  26645. source: "value\x0a\x09^ Smalltalk settings at: self key ifAbsent: [ self defaultValue ]",
  26646. referencedClasses: ["Smalltalk"],
  26647. //>>excludeEnd("ide");
  26648. messageSends: ["at:ifAbsent:", "settings", "key", "defaultValue"]
  26649. }),
  26650. $globals.Setting);
  26651. $core.addMethod(
  26652. $core.method({
  26653. selector: "value:",
  26654. protocol: 'accessing',
  26655. fn: function (aStringifiableObject){
  26656. var self=this;
  26657. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  26658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26659. return $core.withContext(function($ctx1) {
  26660. //>>excludeEnd("ctx");
  26661. var $1;
  26662. $1=$recv($recv($Smalltalk())._settings())._at_put_(self._key(),aStringifiableObject);
  26663. return $1;
  26664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26665. }, function($ctx1) {$ctx1.fill(self,"value:",{aStringifiableObject:aStringifiableObject},$globals.Setting)});
  26666. //>>excludeEnd("ctx");
  26667. },
  26668. //>>excludeStart("ide", pragmas.excludeIdeData);
  26669. args: ["aStringifiableObject"],
  26670. source: "value: aStringifiableObject\x0a\x09^ Smalltalk settings at: self key put: aStringifiableObject",
  26671. referencedClasses: ["Smalltalk"],
  26672. //>>excludeEnd("ide");
  26673. messageSends: ["at:put:", "settings", "key"]
  26674. }),
  26675. $globals.Setting);
  26676. $core.addMethod(
  26677. $core.method({
  26678. selector: "at:ifAbsent:",
  26679. protocol: 'instance creation',
  26680. fn: function (aString,aDefaultValue){
  26681. var self=this;
  26682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26683. return $core.withContext(function($ctx1) {
  26684. //>>excludeEnd("ctx");
  26685. var $2,$3,$1;
  26686. $2=(
  26687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26688. $ctx1.supercall = true,
  26689. //>>excludeEnd("ctx");
  26690. $globals.Setting.klass.superclass.fn.prototype._new.apply($recv(self), []));
  26691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26692. $ctx1.supercall = false;
  26693. //>>excludeEnd("ctx");;
  26694. $recv($2)._key_(aString);
  26695. $recv($2)._defaultValue_(aDefaultValue);
  26696. $3=$recv($2)._yourself();
  26697. $1=$3;
  26698. return $1;
  26699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26700. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aString:aString,aDefaultValue:aDefaultValue},$globals.Setting.klass)});
  26701. //>>excludeEnd("ctx");
  26702. },
  26703. //>>excludeStart("ide", pragmas.excludeIdeData);
  26704. args: ["aString", "aDefaultValue"],
  26705. source: "at: aString ifAbsent: aDefaultValue\x0a\x09\x0a\x09^ super new\x0a\x09\x09key: aString;\x0a\x09\x09defaultValue: aDefaultValue;\x0a\x09\x09yourself",
  26706. referencedClasses: [],
  26707. //>>excludeEnd("ide");
  26708. messageSends: ["key:", "new", "defaultValue:", "yourself"]
  26709. }),
  26710. $globals.Setting.klass);
  26711. $core.addMethod(
  26712. $core.method({
  26713. selector: "new",
  26714. protocol: 'instance creation',
  26715. fn: function (){
  26716. var self=this;
  26717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26718. return $core.withContext(function($ctx1) {
  26719. //>>excludeEnd("ctx");
  26720. self._shouldNotImplement();
  26721. return self;
  26722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26723. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.Setting.klass)});
  26724. //>>excludeEnd("ctx");
  26725. },
  26726. //>>excludeStart("ide", pragmas.excludeIdeData);
  26727. args: [],
  26728. source: "new\x0a\x09self shouldNotImplement",
  26729. referencedClasses: [],
  26730. //>>excludeEnd("ide");
  26731. messageSends: ["shouldNotImplement"]
  26732. }),
  26733. $globals.Setting.klass);
  26734. $core.addClass('SmalltalkImage', $globals.Object, [], 'Kernel-Infrastructure');
  26735. //>>excludeStart("ide", pragmas.excludeIdeData);
  26736. $globals.SmalltalkImage.comment="I represent the Smalltalk system, wrapping\x0aoperations of variable `$core` declared in `support/boot.js`.\x0a\x0a## API\x0a\x0aI have only one instance, accessed with global variable `Smalltalk`.\x0a\x0a## Classes\x0a\x0aClasses can be accessed using the following methods:\x0a\x0a- `#classes` answers the full list of Smalltalk classes in the system\x0a- `#globals #at:` answers a specific global (usually, a class) or `nil`\x0a\x0a## Packages\x0a\x0aPackages can be accessed using the following methods:\x0a\x0a- `#packages` answers the full list of packages\x0a- `#packageAt:` answers a specific package or `nil`\x0a\x0a## Parsing\x0a\x0aThe `#parse:` method is used to parse Amber source code.\x0aIt requires the `Compiler` package and the `support/parser.js` parser file in order to work.";
  26737. //>>excludeEnd("ide");
  26738. $core.addMethod(
  26739. $core.method({
  26740. selector: "addGlobalJsVariable:",
  26741. protocol: 'globals',
  26742. fn: function (aString){
  26743. var self=this;
  26744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26745. return $core.withContext(function($ctx1) {
  26746. //>>excludeEnd("ctx");
  26747. $recv(self._globalJsVariables())._add_(aString);
  26748. return self;
  26749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26750. }, function($ctx1) {$ctx1.fill(self,"addGlobalJsVariable:",{aString:aString},$globals.SmalltalkImage)});
  26751. //>>excludeEnd("ctx");
  26752. },
  26753. //>>excludeStart("ide", pragmas.excludeIdeData);
  26754. args: ["aString"],
  26755. source: "addGlobalJsVariable: aString\x0a\x09self globalJsVariables add: aString",
  26756. referencedClasses: [],
  26757. //>>excludeEnd("ide");
  26758. messageSends: ["add:", "globalJsVariables"]
  26759. }),
  26760. $globals.SmalltalkImage);
  26761. $core.addMethod(
  26762. $core.method({
  26763. selector: "amdRequire",
  26764. protocol: 'accessing amd',
  26765. fn: function (){
  26766. var self=this;
  26767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26768. return $core.withContext(function($ctx1) {
  26769. //>>excludeEnd("ctx");
  26770. var $1;
  26771. $1=$recv(self._core())._at_("amdRequire");
  26772. return $1;
  26773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26774. }, function($ctx1) {$ctx1.fill(self,"amdRequire",{},$globals.SmalltalkImage)});
  26775. //>>excludeEnd("ctx");
  26776. },
  26777. //>>excludeStart("ide", pragmas.excludeIdeData);
  26778. args: [],
  26779. source: "amdRequire\x0a\x09^ self core at: 'amdRequire'",
  26780. referencedClasses: [],
  26781. //>>excludeEnd("ide");
  26782. messageSends: ["at:", "core"]
  26783. }),
  26784. $globals.SmalltalkImage);
  26785. $core.addMethod(
  26786. $core.method({
  26787. selector: "asSmalltalkException:",
  26788. protocol: 'error handling',
  26789. fn: function (anObject){
  26790. var self=this;
  26791. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  26792. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  26793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26794. return $core.withContext(function($ctx1) {
  26795. //>>excludeEnd("ctx");
  26796. var $2,$1;
  26797. $2=$recv(self._isSmalltalkObject_(anObject))._and_((function(){
  26798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26799. return $core.withContext(function($ctx2) {
  26800. //>>excludeEnd("ctx");
  26801. return $recv(anObject)._isKindOf_($Error());
  26802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26803. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  26804. //>>excludeEnd("ctx");
  26805. }));
  26806. if($core.assert($2)){
  26807. $1=anObject;
  26808. } else {
  26809. $1=$recv($JavaScriptException())._on_(anObject);
  26810. };
  26811. return $1;
  26812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26813. }, function($ctx1) {$ctx1.fill(self,"asSmalltalkException:",{anObject:anObject},$globals.SmalltalkImage)});
  26814. //>>excludeEnd("ctx");
  26815. },
  26816. //>>excludeStart("ide", pragmas.excludeIdeData);
  26817. args: ["anObject"],
  26818. source: "asSmalltalkException: anObject\x0a\x09\x22A JavaScript exception may be thrown.\x0a\x09We then need to convert it back to a Smalltalk object\x22\x0a\x09\x0a\x09^ ((self isSmalltalkObject: anObject) and: [ anObject isKindOf: Error ])\x0a\x09\x09ifTrue: [ anObject ]\x0a\x09\x09ifFalse: [ JavaScriptException on: anObject ]",
  26819. referencedClasses: ["Error", "JavaScriptException"],
  26820. //>>excludeEnd("ide");
  26821. messageSends: ["ifTrue:ifFalse:", "and:", "isSmalltalkObject:", "isKindOf:", "on:"]
  26822. }),
  26823. $globals.SmalltalkImage);
  26824. $core.addMethod(
  26825. $core.method({
  26826. selector: "at:",
  26827. protocol: 'accessing',
  26828. fn: function (aString){
  26829. var self=this;
  26830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26831. return $core.withContext(function($ctx1) {
  26832. //>>excludeEnd("ctx");
  26833. var $1;
  26834. self._deprecatedAPI();
  26835. $1=$recv(self._globals())._at_(aString);
  26836. return $1;
  26837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26838. }, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.SmalltalkImage)});
  26839. //>>excludeEnd("ctx");
  26840. },
  26841. //>>excludeStart("ide", pragmas.excludeIdeData);
  26842. args: ["aString"],
  26843. source: "at: aString\x0a\x09self deprecatedAPI.\x0a\x09^ self globals at: aString",
  26844. referencedClasses: [],
  26845. //>>excludeEnd("ide");
  26846. messageSends: ["deprecatedAPI", "at:", "globals"]
  26847. }),
  26848. $globals.SmalltalkImage);
  26849. $core.addMethod(
  26850. $core.method({
  26851. selector: "at:ifAbsent:",
  26852. protocol: 'accessing',
  26853. fn: function (aKey,aBlock){
  26854. var self=this;
  26855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26856. return $core.withContext(function($ctx1) {
  26857. //>>excludeEnd("ctx");
  26858. var $1;
  26859. self._deprecatedAPI();
  26860. $1=$recv(self._globals())._at_ifAbsent_(aKey,aBlock);
  26861. return $1;
  26862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26863. }, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock},$globals.SmalltalkImage)});
  26864. //>>excludeEnd("ctx");
  26865. },
  26866. //>>excludeStart("ide", pragmas.excludeIdeData);
  26867. args: ["aKey", "aBlock"],
  26868. source: "at: aKey ifAbsent: aBlock\x0a\x09self deprecatedAPI.\x0a\x09^ self globals at: aKey ifAbsent: aBlock",
  26869. referencedClasses: [],
  26870. //>>excludeEnd("ide");
  26871. messageSends: ["deprecatedAPI", "at:ifAbsent:", "globals"]
  26872. }),
  26873. $globals.SmalltalkImage);
  26874. $core.addMethod(
  26875. $core.method({
  26876. selector: "at:put:",
  26877. protocol: 'accessing',
  26878. fn: function (aString,anObject){
  26879. var self=this;
  26880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26881. return $core.withContext(function($ctx1) {
  26882. //>>excludeEnd("ctx");
  26883. var $1;
  26884. self._deprecatedAPI();
  26885. $1=$recv(self._globals())._at_put_(aString,anObject);
  26886. return $1;
  26887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26888. }, function($ctx1) {$ctx1.fill(self,"at:put:",{aString:aString,anObject:anObject},$globals.SmalltalkImage)});
  26889. //>>excludeEnd("ctx");
  26890. },
  26891. //>>excludeStart("ide", pragmas.excludeIdeData);
  26892. args: ["aString", "anObject"],
  26893. source: "at: aString put: anObject\x0a\x09self deprecatedAPI.\x0a\x09^ self globals at: aString put: anObject",
  26894. referencedClasses: [],
  26895. //>>excludeEnd("ide");
  26896. messageSends: ["deprecatedAPI", "at:put:", "globals"]
  26897. }),
  26898. $globals.SmalltalkImage);
  26899. $core.addMethod(
  26900. $core.method({
  26901. selector: "basicCreatePackage:",
  26902. protocol: 'private',
  26903. fn: function (packageName){
  26904. var self=this;
  26905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26906. return $core.withContext(function($ctx1) {
  26907. //>>excludeEnd("ctx");
  26908. return $core.addPackage(packageName);
  26909. return self;
  26910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26911. }, function($ctx1) {$ctx1.fill(self,"basicCreatePackage:",{packageName:packageName},$globals.SmalltalkImage)});
  26912. //>>excludeEnd("ctx");
  26913. },
  26914. //>>excludeStart("ide", pragmas.excludeIdeData);
  26915. args: ["packageName"],
  26916. source: "basicCreatePackage: packageName\x0a\x09\x22Create and bind a new bare package with given name and return it.\x22\x0a\x09<return $core.addPackage(packageName)>",
  26917. referencedClasses: [],
  26918. //>>excludeEnd("ide");
  26919. messageSends: []
  26920. }),
  26921. $globals.SmalltalkImage);
  26922. $core.addMethod(
  26923. $core.method({
  26924. selector: "basicParse:",
  26925. protocol: 'private',
  26926. fn: function (aString){
  26927. var self=this;
  26928. function $SmalltalkParser(){return $globals.SmalltalkParser||(typeof SmalltalkParser=="undefined"?nil:SmalltalkParser)}
  26929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26930. return $core.withContext(function($ctx1) {
  26931. //>>excludeEnd("ctx");
  26932. var $1;
  26933. $1=$recv($SmalltalkParser())._parse_(aString);
  26934. return $1;
  26935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26936. }, function($ctx1) {$ctx1.fill(self,"basicParse:",{aString:aString},$globals.SmalltalkImage)});
  26937. //>>excludeEnd("ctx");
  26938. },
  26939. //>>excludeStart("ide", pragmas.excludeIdeData);
  26940. args: ["aString"],
  26941. source: "basicParse: aString\x0a\x09^ SmalltalkParser parse: aString",
  26942. referencedClasses: ["SmalltalkParser"],
  26943. //>>excludeEnd("ide");
  26944. messageSends: ["parse:"]
  26945. }),
  26946. $globals.SmalltalkImage);
  26947. $core.addMethod(
  26948. $core.method({
  26949. selector: "classes",
  26950. protocol: 'classes',
  26951. fn: function (){
  26952. var self=this;
  26953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26954. return $core.withContext(function($ctx1) {
  26955. //>>excludeEnd("ctx");
  26956. return $core.classes();
  26957. return self;
  26958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26959. }, function($ctx1) {$ctx1.fill(self,"classes",{},$globals.SmalltalkImage)});
  26960. //>>excludeEnd("ctx");
  26961. },
  26962. //>>excludeStart("ide", pragmas.excludeIdeData);
  26963. args: [],
  26964. source: "classes\x0a\x09<return $core.classes()>",
  26965. referencedClasses: [],
  26966. //>>excludeEnd("ide");
  26967. messageSends: []
  26968. }),
  26969. $globals.SmalltalkImage);
  26970. $core.addMethod(
  26971. $core.method({
  26972. selector: "core",
  26973. protocol: 'accessing',
  26974. fn: function (){
  26975. var self=this;
  26976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26977. return $core.withContext(function($ctx1) {
  26978. //>>excludeEnd("ctx");
  26979. return $core;
  26980. return self;
  26981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26982. }, function($ctx1) {$ctx1.fill(self,"core",{},$globals.SmalltalkImage)});
  26983. //>>excludeEnd("ctx");
  26984. },
  26985. //>>excludeStart("ide", pragmas.excludeIdeData);
  26986. args: [],
  26987. source: "core\x0a\x09<return $core>",
  26988. referencedClasses: [],
  26989. //>>excludeEnd("ide");
  26990. messageSends: []
  26991. }),
  26992. $globals.SmalltalkImage);
  26993. $core.addMethod(
  26994. $core.method({
  26995. selector: "createPackage:",
  26996. protocol: 'packages',
  26997. fn: function (packageName){
  26998. var self=this;
  26999. var package_,announcement;
  27000. function $PackageAdded(){return $globals.PackageAdded||(typeof PackageAdded=="undefined"?nil:PackageAdded)}
  27001. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  27002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27003. return $core.withContext(function($ctx1) {
  27004. //>>excludeEnd("ctx");
  27005. var $1,$2,$3;
  27006. package_=self._basicCreatePackage_(packageName);
  27007. $1=$recv($PackageAdded())._new();
  27008. $recv($1)._package_(package_);
  27009. $2=$recv($1)._yourself();
  27010. announcement=$2;
  27011. $recv($recv($SystemAnnouncer())._current())._announce_(announcement);
  27012. $3=package_;
  27013. return $3;
  27014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27015. }, function($ctx1) {$ctx1.fill(self,"createPackage:",{packageName:packageName,package_:package_,announcement:announcement},$globals.SmalltalkImage)});
  27016. //>>excludeEnd("ctx");
  27017. },
  27018. //>>excludeStart("ide", pragmas.excludeIdeData);
  27019. args: ["packageName"],
  27020. source: "createPackage: packageName\x0a\x09| package announcement |\x0a\x09\x0a\x09package := self basicCreatePackage: packageName.\x0a\x09\x0a\x09announcement := PackageAdded new\x0a\x09\x09package: package;\x0a\x09\x09yourself.\x0a\x09\x09\x0a\x09SystemAnnouncer current announce: announcement.\x0a\x09\x0a\x09^ package",
  27021. referencedClasses: ["PackageAdded", "SystemAnnouncer"],
  27022. //>>excludeEnd("ide");
  27023. messageSends: ["basicCreatePackage:", "package:", "new", "yourself", "announce:", "current"]
  27024. }),
  27025. $globals.SmalltalkImage);
  27026. $core.addMethod(
  27027. $core.method({
  27028. selector: "createPackage:properties:",
  27029. protocol: 'private',
  27030. fn: function (packageName,aDict){
  27031. var self=this;
  27032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27033. return $core.withContext(function($ctx1) {
  27034. //>>excludeEnd("ctx");
  27035. var $1,$2;
  27036. self._deprecatedAPI();
  27037. $1=$recv(aDict)._isEmpty();
  27038. if(!$core.assert($1)){
  27039. self._error_("createPackage:properties: called with nonempty properties");
  27040. };
  27041. $2=self._createPackage_(packageName);
  27042. return $2;
  27043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27044. }, function($ctx1) {$ctx1.fill(self,"createPackage:properties:",{packageName:packageName,aDict:aDict},$globals.SmalltalkImage)});
  27045. //>>excludeEnd("ctx");
  27046. },
  27047. //>>excludeStart("ide", pragmas.excludeIdeData);
  27048. args: ["packageName", "aDict"],
  27049. source: "createPackage: packageName properties: aDict\x0a\x09\x22Needed to import .st files: they begin with this call.\x22\x0a\x09self deprecatedAPI.\x0a\x09\x0a\x09aDict isEmpty ifFalse: [ self error: 'createPackage:properties: called with nonempty properties' ].\x0a\x09^ self createPackage: packageName",
  27050. referencedClasses: [],
  27051. //>>excludeEnd("ide");
  27052. messageSends: ["deprecatedAPI", "ifFalse:", "isEmpty", "error:", "createPackage:"]
  27053. }),
  27054. $globals.SmalltalkImage);
  27055. $core.addMethod(
  27056. $core.method({
  27057. selector: "current",
  27058. protocol: 'accessing',
  27059. fn: function (){
  27060. var self=this;
  27061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27062. return $core.withContext(function($ctx1) {
  27063. //>>excludeEnd("ctx");
  27064. self._deprecatedAPI();
  27065. return self;
  27066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27067. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SmalltalkImage)});
  27068. //>>excludeEnd("ctx");
  27069. },
  27070. //>>excludeStart("ide", pragmas.excludeIdeData);
  27071. args: [],
  27072. source: "current\x0a\x09\x22Backward compatibility for Smalltalk current ...\x22\x0a\x09self deprecatedAPI.\x0a\x09^ self",
  27073. referencedClasses: [],
  27074. //>>excludeEnd("ide");
  27075. messageSends: ["deprecatedAPI"]
  27076. }),
  27077. $globals.SmalltalkImage);
  27078. $core.addMethod(
  27079. $core.method({
  27080. selector: "defaultAmdNamespace",
  27081. protocol: 'accessing amd',
  27082. fn: function (){
  27083. var self=this;
  27084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27085. return $core.withContext(function($ctx1) {
  27086. //>>excludeEnd("ctx");
  27087. var $1;
  27088. $1="transport.defaultAmdNamespace"._settingValue();
  27089. return $1;
  27090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27091. }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace",{},$globals.SmalltalkImage)});
  27092. //>>excludeEnd("ctx");
  27093. },
  27094. //>>excludeStart("ide", pragmas.excludeIdeData);
  27095. args: [],
  27096. source: "defaultAmdNamespace\x0a\x09^ 'transport.defaultAmdNamespace' settingValue",
  27097. referencedClasses: [],
  27098. //>>excludeEnd("ide");
  27099. messageSends: ["settingValue"]
  27100. }),
  27101. $globals.SmalltalkImage);
  27102. $core.addMethod(
  27103. $core.method({
  27104. selector: "defaultAmdNamespace:",
  27105. protocol: 'accessing amd',
  27106. fn: function (aString){
  27107. var self=this;
  27108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27109. return $core.withContext(function($ctx1) {
  27110. //>>excludeEnd("ctx");
  27111. "transport.defaultAmdNamespace"._settingValue_(aString);
  27112. return self;
  27113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27114. }, function($ctx1) {$ctx1.fill(self,"defaultAmdNamespace:",{aString:aString},$globals.SmalltalkImage)});
  27115. //>>excludeEnd("ctx");
  27116. },
  27117. //>>excludeStart("ide", pragmas.excludeIdeData);
  27118. args: ["aString"],
  27119. source: "defaultAmdNamespace: aString\x0a\x09'transport.defaultAmdNamespace' settingValue: aString",
  27120. referencedClasses: [],
  27121. //>>excludeEnd("ide");
  27122. messageSends: ["settingValue:"]
  27123. }),
  27124. $globals.SmalltalkImage);
  27125. $core.addMethod(
  27126. $core.method({
  27127. selector: "deleteClass:",
  27128. protocol: 'private',
  27129. fn: function (aClass){
  27130. var self=this;
  27131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27132. return $core.withContext(function($ctx1) {
  27133. //>>excludeEnd("ctx");
  27134. $core.removeClass(aClass);
  27135. return self;
  27136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27137. }, function($ctx1) {$ctx1.fill(self,"deleteClass:",{aClass:aClass},$globals.SmalltalkImage)});
  27138. //>>excludeEnd("ctx");
  27139. },
  27140. //>>excludeStart("ide", pragmas.excludeIdeData);
  27141. args: ["aClass"],
  27142. source: "deleteClass: aClass\x0a\x09\x22Deletes a class by deleting its binding only. Use #removeClass instead\x22\x0a\x09\x0a\x09<$core.removeClass(aClass)>",
  27143. referencedClasses: [],
  27144. //>>excludeEnd("ide");
  27145. messageSends: []
  27146. }),
  27147. $globals.SmalltalkImage);
  27148. $core.addMethod(
  27149. $core.method({
  27150. selector: "deleteGlobalJsVariable:",
  27151. protocol: 'globals',
  27152. fn: function (aString){
  27153. var self=this;
  27154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27155. return $core.withContext(function($ctx1) {
  27156. //>>excludeEnd("ctx");
  27157. $recv(self._globalJsVariables())._remove_ifAbsent_(aString,(function(){
  27158. }));
  27159. return self;
  27160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27161. }, function($ctx1) {$ctx1.fill(self,"deleteGlobalJsVariable:",{aString:aString},$globals.SmalltalkImage)});
  27162. //>>excludeEnd("ctx");
  27163. },
  27164. //>>excludeStart("ide", pragmas.excludeIdeData);
  27165. args: ["aString"],
  27166. source: "deleteGlobalJsVariable: aString\x0a\x09self globalJsVariables remove: aString ifAbsent:[]",
  27167. referencedClasses: [],
  27168. //>>excludeEnd("ide");
  27169. messageSends: ["remove:ifAbsent:", "globalJsVariables"]
  27170. }),
  27171. $globals.SmalltalkImage);
  27172. $core.addMethod(
  27173. $core.method({
  27174. selector: "deletePackage:",
  27175. protocol: 'private',
  27176. fn: function (packageName){
  27177. var self=this;
  27178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27179. return $core.withContext(function($ctx1) {
  27180. //>>excludeEnd("ctx");
  27181. delete $core.packages[packageName];
  27182. return self;
  27183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27184. }, function($ctx1) {$ctx1.fill(self,"deletePackage:",{packageName:packageName},$globals.SmalltalkImage)});
  27185. //>>excludeEnd("ctx");
  27186. },
  27187. //>>excludeStart("ide", pragmas.excludeIdeData);
  27188. args: ["packageName"],
  27189. source: "deletePackage: packageName\x0a\x09\x22Deletes a package by deleting its binding, but does not check if it contains classes etc.\x0a\x09To remove a package, use #removePackage instead.\x22\x0a\x0a\x09<delete $core.packages[packageName]>",
  27190. referencedClasses: [],
  27191. //>>excludeEnd("ide");
  27192. messageSends: []
  27193. }),
  27194. $globals.SmalltalkImage);
  27195. $core.addMethod(
  27196. $core.method({
  27197. selector: "globalJsVariables",
  27198. protocol: 'globals',
  27199. fn: function (){
  27200. var self=this;
  27201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27202. return $core.withContext(function($ctx1) {
  27203. //>>excludeEnd("ctx");
  27204. return $core.globalJsVariables;
  27205. return self;
  27206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27207. }, function($ctx1) {$ctx1.fill(self,"globalJsVariables",{},$globals.SmalltalkImage)});
  27208. //>>excludeEnd("ctx");
  27209. },
  27210. //>>excludeStart("ide", pragmas.excludeIdeData);
  27211. args: [],
  27212. source: "globalJsVariables\x0a\x09\x22Array of global JavaScript variables\x22\x0a\x09<return $core.globalJsVariables>",
  27213. referencedClasses: [],
  27214. //>>excludeEnd("ide");
  27215. messageSends: []
  27216. }),
  27217. $globals.SmalltalkImage);
  27218. $core.addMethod(
  27219. $core.method({
  27220. selector: "globals",
  27221. protocol: 'accessing',
  27222. fn: function (){
  27223. var self=this;
  27224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27225. return $core.withContext(function($ctx1) {
  27226. //>>excludeEnd("ctx");
  27227. return $globals;
  27228. return self;
  27229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27230. }, function($ctx1) {$ctx1.fill(self,"globals",{},$globals.SmalltalkImage)});
  27231. //>>excludeEnd("ctx");
  27232. },
  27233. //>>excludeStart("ide", pragmas.excludeIdeData);
  27234. args: [],
  27235. source: "globals\x0a\x09<return $globals>",
  27236. referencedClasses: [],
  27237. //>>excludeEnd("ide");
  27238. messageSends: []
  27239. }),
  27240. $globals.SmalltalkImage);
  27241. $core.addMethod(
  27242. $core.method({
  27243. selector: "includesKey:",
  27244. protocol: 'accessing',
  27245. fn: function (aKey){
  27246. var self=this;
  27247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27248. return $core.withContext(function($ctx1) {
  27249. //>>excludeEnd("ctx");
  27250. return $core.hasOwnProperty(aKey);
  27251. return self;
  27252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27253. }, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey},$globals.SmalltalkImage)});
  27254. //>>excludeEnd("ctx");
  27255. },
  27256. //>>excludeStart("ide", pragmas.excludeIdeData);
  27257. args: ["aKey"],
  27258. source: "includesKey: aKey\x0a\x09<return $core.hasOwnProperty(aKey)>",
  27259. referencedClasses: [],
  27260. //>>excludeEnd("ide");
  27261. messageSends: []
  27262. }),
  27263. $globals.SmalltalkImage);
  27264. $core.addMethod(
  27265. $core.method({
  27266. selector: "isSmalltalkObject:",
  27267. protocol: 'testing',
  27268. fn: function (anObject){
  27269. var self=this;
  27270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27271. return $core.withContext(function($ctx1) {
  27272. //>>excludeEnd("ctx");
  27273. return typeof anObject.klass !== 'undefined';
  27274. return self;
  27275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27276. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkObject:",{anObject:anObject},$globals.SmalltalkImage)});
  27277. //>>excludeEnd("ctx");
  27278. },
  27279. //>>excludeStart("ide", pragmas.excludeIdeData);
  27280. args: ["anObject"],
  27281. source: "isSmalltalkObject: anObject\x0a\x09\x22Consider anObject a Smalltalk object if it has a 'klass' property.\x0a\x09Note that this may be unaccurate\x22\x0a\x09\x0a\x09<return typeof anObject.klass !== 'undefined'>",
  27282. referencedClasses: [],
  27283. //>>excludeEnd("ide");
  27284. messageSends: []
  27285. }),
  27286. $globals.SmalltalkImage);
  27287. $core.addMethod(
  27288. $core.method({
  27289. selector: "packageAt:",
  27290. protocol: 'packages',
  27291. fn: function (packageName){
  27292. var self=this;
  27293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27294. return $core.withContext(function($ctx1) {
  27295. //>>excludeEnd("ctx");
  27296. return $core.packages[packageName];
  27297. return self;
  27298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27299. }, function($ctx1) {$ctx1.fill(self,"packageAt:",{packageName:packageName},$globals.SmalltalkImage)});
  27300. //>>excludeEnd("ctx");
  27301. },
  27302. //>>excludeStart("ide", pragmas.excludeIdeData);
  27303. args: ["packageName"],
  27304. source: "packageAt: packageName\x0a\x09<return $core.packages[packageName]>",
  27305. referencedClasses: [],
  27306. //>>excludeEnd("ide");
  27307. messageSends: []
  27308. }),
  27309. $globals.SmalltalkImage);
  27310. $core.addMethod(
  27311. $core.method({
  27312. selector: "packageAt:ifAbsent:",
  27313. protocol: 'packages',
  27314. fn: function (packageName,aBlock){
  27315. var self=this;
  27316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27317. return $core.withContext(function($ctx1) {
  27318. //>>excludeEnd("ctx");
  27319. var $2,$1;
  27320. $2=self._packageAt_(packageName);
  27321. $1=$recv($2)._ifNil_(aBlock);
  27322. return $1;
  27323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27324. }, function($ctx1) {$ctx1.fill(self,"packageAt:ifAbsent:",{packageName:packageName,aBlock:aBlock},$globals.SmalltalkImage)});
  27325. //>>excludeEnd("ctx");
  27326. },
  27327. //>>excludeStart("ide", pragmas.excludeIdeData);
  27328. args: ["packageName", "aBlock"],
  27329. source: "packageAt: packageName ifAbsent: aBlock\x0a\x09^ (self packageAt: packageName) ifNil: aBlock",
  27330. referencedClasses: [],
  27331. //>>excludeEnd("ide");
  27332. messageSends: ["ifNil:", "packageAt:"]
  27333. }),
  27334. $globals.SmalltalkImage);
  27335. $core.addMethod(
  27336. $core.method({
  27337. selector: "packages",
  27338. protocol: 'packages',
  27339. fn: function (){
  27340. var self=this;
  27341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27342. return $core.withContext(function($ctx1) {
  27343. //>>excludeEnd("ctx");
  27344. return Object.keys($core.packages).map(function(k) {
  27345. return $core.packages[k];
  27346. })
  27347. ;
  27348. return self;
  27349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27350. }, function($ctx1) {$ctx1.fill(self,"packages",{},$globals.SmalltalkImage)});
  27351. //>>excludeEnd("ctx");
  27352. },
  27353. //>>excludeStart("ide", pragmas.excludeIdeData);
  27354. args: [],
  27355. source: "packages\x0a\x09\x22Return all Package instances in the system.\x22\x0a\x0a\x09<\x0a\x09\x09return Object.keys($core.packages).map(function(k) {\x0a\x09\x09\x09return $core.packages[k];\x0a\x09\x09})\x0a\x09>",
  27356. referencedClasses: [],
  27357. //>>excludeEnd("ide");
  27358. messageSends: []
  27359. }),
  27360. $globals.SmalltalkImage);
  27361. $core.addMethod(
  27362. $core.method({
  27363. selector: "parse:",
  27364. protocol: 'accessing',
  27365. fn: function (aString){
  27366. var self=this;
  27367. var result;
  27368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27369. return $core.withContext(function($ctx1) {
  27370. //>>excludeEnd("ctx");
  27371. var $2,$3,$1;
  27372. $recv((function(){
  27373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27374. return $core.withContext(function($ctx2) {
  27375. //>>excludeEnd("ctx");
  27376. result=self._basicParse_(aString);
  27377. return result;
  27378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27379. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  27380. //>>excludeEnd("ctx");
  27381. }))._tryCatch_((function(ex){
  27382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27383. return $core.withContext(function($ctx2) {
  27384. //>>excludeEnd("ctx");
  27385. return $recv(self._parseError_parsing_(ex,aString))._signal();
  27386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27387. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  27388. //>>excludeEnd("ctx");
  27389. }));
  27390. $2=result;
  27391. $recv($2)._source_(aString);
  27392. $3=$recv($2)._yourself();
  27393. $1=$3;
  27394. return $1;
  27395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27396. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString,result:result},$globals.SmalltalkImage)});
  27397. //>>excludeEnd("ctx");
  27398. },
  27399. //>>excludeStart("ide", pragmas.excludeIdeData);
  27400. args: ["aString"],
  27401. source: "parse: aString\x0a\x09| result |\x0a\x09\x0a\x09[ result := self basicParse: aString ] \x0a\x09\x09tryCatch: [ :ex | (self parseError: ex parsing: aString) signal ].\x0a\x09\x09\x0a\x09^ result\x0a\x09\x09source: aString;\x0a\x09\x09yourself",
  27402. referencedClasses: [],
  27403. //>>excludeEnd("ide");
  27404. messageSends: ["tryCatch:", "basicParse:", "signal", "parseError:parsing:", "source:", "yourself"]
  27405. }),
  27406. $globals.SmalltalkImage);
  27407. $core.addMethod(
  27408. $core.method({
  27409. selector: "parseError:parsing:",
  27410. protocol: 'error handling',
  27411. fn: function (anException,aString){
  27412. var self=this;
  27413. function $ParseError(){return $globals.ParseError||(typeof ParseError=="undefined"?nil:ParseError)}
  27414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27415. return $core.withContext(function($ctx1) {
  27416. //>>excludeEnd("ctx");
  27417. var $2,$8,$7,$6,$9,$5,$4,$3,$1;
  27418. $2=$recv($ParseError())._new();
  27419. $8=$recv(anException)._basicAt_("line");
  27420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27421. $ctx1.sendIdx["basicAt:"]=1;
  27422. //>>excludeEnd("ctx");
  27423. $7="Parse error on line ".__comma($8);
  27424. $6=$recv($7).__comma(" column ");
  27425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27426. $ctx1.sendIdx[","]=4;
  27427. //>>excludeEnd("ctx");
  27428. $9=$recv(anException)._basicAt_("column");
  27429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27430. $ctx1.sendIdx["basicAt:"]=2;
  27431. //>>excludeEnd("ctx");
  27432. $5=$recv($6).__comma($9);
  27433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27434. $ctx1.sendIdx[","]=3;
  27435. //>>excludeEnd("ctx");
  27436. $4=$recv($5).__comma(" : Unexpected character ");
  27437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27438. $ctx1.sendIdx[","]=2;
  27439. //>>excludeEnd("ctx");
  27440. $3=$recv($4).__comma($recv(anException)._basicAt_("found"));
  27441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27442. $ctx1.sendIdx[","]=1;
  27443. //>>excludeEnd("ctx");
  27444. $1=$recv($2)._messageText_($3);
  27445. return $1;
  27446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27447. }, function($ctx1) {$ctx1.fill(self,"parseError:parsing:",{anException:anException,aString:aString},$globals.SmalltalkImage)});
  27448. //>>excludeEnd("ctx");
  27449. },
  27450. //>>excludeStart("ide", pragmas.excludeIdeData);
  27451. args: ["anException", "aString"],
  27452. source: "parseError: anException parsing: aString\x0a\x09^ ParseError new messageText: 'Parse error on line ', (anException basicAt: 'line') ,' column ' , (anException basicAt: 'column') ,' : Unexpected character ', (anException basicAt: 'found')",
  27453. referencedClasses: ["ParseError"],
  27454. //>>excludeEnd("ide");
  27455. messageSends: ["messageText:", "new", ",", "basicAt:"]
  27456. }),
  27457. $globals.SmalltalkImage);
  27458. $core.addMethod(
  27459. $core.method({
  27460. selector: "pseudoVariableNames",
  27461. protocol: 'accessing',
  27462. fn: function (){
  27463. var self=this;
  27464. var $1;
  27465. $1=["self", "super", "nil", "true", "false", "thisContext"];
  27466. return $1;
  27467. },
  27468. //>>excludeStart("ide", pragmas.excludeIdeData);
  27469. args: [],
  27470. source: "pseudoVariableNames\x0a\x09^ #('self' 'super' 'nil' 'true' 'false' 'thisContext')",
  27471. referencedClasses: [],
  27472. //>>excludeEnd("ide");
  27473. messageSends: []
  27474. }),
  27475. $globals.SmalltalkImage);
  27476. $core.addMethod(
  27477. $core.method({
  27478. selector: "readJSObject:",
  27479. protocol: 'accessing',
  27480. fn: function (anObject){
  27481. var self=this;
  27482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27483. return $core.withContext(function($ctx1) {
  27484. //>>excludeEnd("ctx");
  27485. return $core.readJSObject(anObject);
  27486. return self;
  27487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27488. }, function($ctx1) {$ctx1.fill(self,"readJSObject:",{anObject:anObject},$globals.SmalltalkImage)});
  27489. //>>excludeEnd("ctx");
  27490. },
  27491. //>>excludeStart("ide", pragmas.excludeIdeData);
  27492. args: ["anObject"],
  27493. source: "readJSObject: anObject\x0a\x09<return $core.readJSObject(anObject)>",
  27494. referencedClasses: [],
  27495. //>>excludeEnd("ide");
  27496. messageSends: []
  27497. }),
  27498. $globals.SmalltalkImage);
  27499. $core.addMethod(
  27500. $core.method({
  27501. selector: "removeClass:",
  27502. protocol: 'classes',
  27503. fn: function (aClass){
  27504. var self=this;
  27505. function $SystemAnnouncer(){return $globals.SystemAnnouncer||(typeof SystemAnnouncer=="undefined"?nil:SystemAnnouncer)}
  27506. function $ClassRemoved(){return $globals.ClassRemoved||(typeof ClassRemoved=="undefined"?nil:ClassRemoved)}
  27507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27508. return $core.withContext(function($ctx1) {
  27509. //>>excludeEnd("ctx");
  27510. var $1,$2,$3;
  27511. $1=$recv(aClass)._isMetaclass();
  27512. if($core.assert($1)){
  27513. self._error_($recv($recv(aClass)._asString()).__comma(" is a Metaclass and cannot be removed!"));
  27514. };
  27515. self._deleteClass_(aClass);
  27516. $2=$recv($ClassRemoved())._new();
  27517. $recv($2)._theClass_(aClass);
  27518. $3=$recv($2)._yourself();
  27519. $recv($recv($SystemAnnouncer())._current())._announce_($3);
  27520. return self;
  27521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27522. }, function($ctx1) {$ctx1.fill(self,"removeClass:",{aClass:aClass},$globals.SmalltalkImage)});
  27523. //>>excludeEnd("ctx");
  27524. },
  27525. //>>excludeStart("ide", pragmas.excludeIdeData);
  27526. args: ["aClass"],
  27527. source: "removeClass: aClass\x0a\x09aClass isMetaclass ifTrue: [ self error: aClass asString, ' is a Metaclass and cannot be removed!' ].\x0a\x09\x0a\x09self deleteClass: aClass.\x0a\x09\x0a\x09SystemAnnouncer current\x0a\x09\x09announce: (ClassRemoved new\x0a\x09\x09\x09theClass: aClass;\x0a\x09\x09\x09yourself)",
  27528. referencedClasses: ["SystemAnnouncer", "ClassRemoved"],
  27529. //>>excludeEnd("ide");
  27530. messageSends: ["ifTrue:", "isMetaclass", "error:", ",", "asString", "deleteClass:", "announce:", "current", "theClass:", "new", "yourself"]
  27531. }),
  27532. $globals.SmalltalkImage);
  27533. $core.addMethod(
  27534. $core.method({
  27535. selector: "removePackage:",
  27536. protocol: 'packages',
  27537. fn: function (packageName){
  27538. var self=this;
  27539. var pkg;
  27540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27541. return $core.withContext(function($ctx1) {
  27542. //>>excludeEnd("ctx");
  27543. pkg=self._packageAt_ifAbsent_(packageName,(function(){
  27544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27545. return $core.withContext(function($ctx2) {
  27546. //>>excludeEnd("ctx");
  27547. return self._error_("Missing package: ".__comma(packageName));
  27548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27549. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  27550. //>>excludeEnd("ctx");
  27551. }));
  27552. $recv($recv(pkg)._classes())._do_((function(each){
  27553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27554. return $core.withContext(function($ctx2) {
  27555. //>>excludeEnd("ctx");
  27556. return self._removeClass_(each);
  27557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27558. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  27559. //>>excludeEnd("ctx");
  27560. }));
  27561. self._deletePackage_(packageName);
  27562. return self;
  27563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27564. }, function($ctx1) {$ctx1.fill(self,"removePackage:",{packageName:packageName,pkg:pkg},$globals.SmalltalkImage)});
  27565. //>>excludeEnd("ctx");
  27566. },
  27567. //>>excludeStart("ide", pragmas.excludeIdeData);
  27568. args: ["packageName"],
  27569. source: "removePackage: packageName\x0a\x09\x22Removes a package and all its classes.\x22\x0a\x0a\x09| pkg |\x0a\x09pkg := self packageAt: packageName ifAbsent: [ self error: 'Missing package: ', packageName ].\x0a\x09pkg classes do: [ :each |\x0a\x09\x09\x09self removeClass: each ].\x0a\x09self deletePackage: packageName",
  27570. referencedClasses: [],
  27571. //>>excludeEnd("ide");
  27572. messageSends: ["packageAt:ifAbsent:", "error:", ",", "do:", "classes", "removeClass:", "deletePackage:"]
  27573. }),
  27574. $globals.SmalltalkImage);
  27575. $core.addMethod(
  27576. $core.method({
  27577. selector: "renamePackage:to:",
  27578. protocol: 'packages',
  27579. fn: function (packageName,newName){
  27580. var self=this;
  27581. var pkg;
  27582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27583. return $core.withContext(function($ctx1) {
  27584. //>>excludeEnd("ctx");
  27585. var $1,$2,$receiver;
  27586. pkg=self._packageAt_ifAbsent_(packageName,(function(){
  27587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27588. return $core.withContext(function($ctx2) {
  27589. //>>excludeEnd("ctx");
  27590. $1="Missing package: ".__comma(packageName);
  27591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27592. $ctx2.sendIdx[","]=1;
  27593. //>>excludeEnd("ctx");
  27594. return self._error_($1);
  27595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27596. $ctx2.sendIdx["error:"]=1;
  27597. //>>excludeEnd("ctx");
  27598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27599. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  27600. //>>excludeEnd("ctx");
  27601. }));
  27602. $2=self._packageAt_(newName);
  27603. if(($receiver = $2) == null || $receiver.isNil){
  27604. $2;
  27605. } else {
  27606. self._error_("Already exists a package called: ".__comma(newName));
  27607. };
  27608. $recv(self._at_("packages"))._at_put_(newName,pkg);
  27609. $recv(pkg)._name_(newName);
  27610. self._deletePackage_(packageName);
  27611. return self;
  27612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27613. }, function($ctx1) {$ctx1.fill(self,"renamePackage:to:",{packageName:packageName,newName:newName,pkg:pkg},$globals.SmalltalkImage)});
  27614. //>>excludeEnd("ctx");
  27615. },
  27616. //>>excludeStart("ide", pragmas.excludeIdeData);
  27617. args: ["packageName", "newName"],
  27618. source: "renamePackage: packageName to: newName\x0a\x09\x22Rename a package.\x22\x0a\x0a\x09| pkg |\x0a\x09pkg := self packageAt: packageName ifAbsent: [ self error: 'Missing package: ', packageName ].\x0a\x09(self packageAt: newName) ifNotNil: [ self error: 'Already exists a package called: ', newName ].\x0a\x09(self at: 'packages') at: newName put: pkg.\x0a\x09pkg name: newName.\x0a\x09self deletePackage: packageName.",
  27619. referencedClasses: [],
  27620. //>>excludeEnd("ide");
  27621. messageSends: ["packageAt:ifAbsent:", "error:", ",", "ifNotNil:", "packageAt:", "at:put:", "at:", "name:", "deletePackage:"]
  27622. }),
  27623. $globals.SmalltalkImage);
  27624. $core.addMethod(
  27625. $core.method({
  27626. selector: "reservedWords",
  27627. protocol: 'accessing',
  27628. fn: function (){
  27629. var self=this;
  27630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27631. return $core.withContext(function($ctx1) {
  27632. //>>excludeEnd("ctx");
  27633. return $core.reservedWords;
  27634. return self;
  27635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27636. }, function($ctx1) {$ctx1.fill(self,"reservedWords",{},$globals.SmalltalkImage)});
  27637. //>>excludeEnd("ctx");
  27638. },
  27639. //>>excludeStart("ide", pragmas.excludeIdeData);
  27640. args: [],
  27641. source: "reservedWords\x0a\x09\x22JavaScript reserved words\x22\x0a\x09<return $core.reservedWords>",
  27642. referencedClasses: [],
  27643. //>>excludeEnd("ide");
  27644. messageSends: []
  27645. }),
  27646. $globals.SmalltalkImage);
  27647. $core.addMethod(
  27648. $core.method({
  27649. selector: "settings",
  27650. protocol: 'accessing',
  27651. fn: function (){
  27652. var self=this;
  27653. function $SmalltalkSettings(){return $globals.SmalltalkSettings||(typeof SmalltalkSettings=="undefined"?nil:SmalltalkSettings)}
  27654. return $SmalltalkSettings();
  27655. },
  27656. //>>excludeStart("ide", pragmas.excludeIdeData);
  27657. args: [],
  27658. source: "settings\x0a\x09^ SmalltalkSettings",
  27659. referencedClasses: ["SmalltalkSettings"],
  27660. //>>excludeEnd("ide");
  27661. messageSends: []
  27662. }),
  27663. $globals.SmalltalkImage);
  27664. $core.addMethod(
  27665. $core.method({
  27666. selector: "version",
  27667. protocol: 'accessing',
  27668. fn: function (){
  27669. var self=this;
  27670. return "0.14.0-pre";
  27671. },
  27672. //>>excludeStart("ide", pragmas.excludeIdeData);
  27673. args: [],
  27674. source: "version\x0a\x09\x22Answer the version string of Amber\x22\x0a\x09\x0a\x09^ '0.14.0-pre'",
  27675. referencedClasses: [],
  27676. //>>excludeEnd("ide");
  27677. messageSends: []
  27678. }),
  27679. $globals.SmalltalkImage);
  27680. $core.addMethod(
  27681. $core.method({
  27682. selector: "vm",
  27683. protocol: 'accessing',
  27684. fn: function (){
  27685. var self=this;
  27686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27687. return $core.withContext(function($ctx1) {
  27688. //>>excludeEnd("ctx");
  27689. var $1;
  27690. self._deprecatedAPI_("Use #core");
  27691. $1=self._core();
  27692. return $1;
  27693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27694. }, function($ctx1) {$ctx1.fill(self,"vm",{},$globals.SmalltalkImage)});
  27695. //>>excludeEnd("ctx");
  27696. },
  27697. //>>excludeStart("ide", pragmas.excludeIdeData);
  27698. args: [],
  27699. source: "vm\x0a\x09self deprecatedAPI: 'Use #core'.\x0a\x09^self core",
  27700. referencedClasses: [],
  27701. //>>excludeEnd("ide");
  27702. messageSends: ["deprecatedAPI:", "core"]
  27703. }),
  27704. $globals.SmalltalkImage);
  27705. $globals.SmalltalkImage.klass.iVarNames = ['current'];
  27706. $core.addMethod(
  27707. $core.method({
  27708. selector: "current",
  27709. protocol: 'instance creation',
  27710. fn: function (){
  27711. var self=this;
  27712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27713. return $core.withContext(function($ctx1) {
  27714. //>>excludeEnd("ctx");
  27715. var $2,$1,$receiver;
  27716. $2=self["@current"];
  27717. if(($receiver = $2) == null || $receiver.isNil){
  27718. self["@current"]=(
  27719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27720. $ctx1.supercall = true,
  27721. //>>excludeEnd("ctx");
  27722. $globals.SmalltalkImage.klass.superclass.fn.prototype._new.apply($recv(self), []));
  27723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27724. $ctx1.supercall = false;
  27725. //>>excludeEnd("ctx");;
  27726. $1=self["@current"];
  27727. } else {
  27728. self._deprecatedAPI();
  27729. $1=self["@current"];
  27730. };
  27731. return $1;
  27732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27733. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SmalltalkImage.klass)});
  27734. //>>excludeEnd("ctx");
  27735. },
  27736. //>>excludeStart("ide", pragmas.excludeIdeData);
  27737. args: [],
  27738. source: "current\x0a\x09^ current ifNil: [ current := super new ] ifNotNil: [ self deprecatedAPI. current ]",
  27739. referencedClasses: [],
  27740. //>>excludeEnd("ide");
  27741. messageSends: ["ifNil:ifNotNil:", "new", "deprecatedAPI"]
  27742. }),
  27743. $globals.SmalltalkImage.klass);
  27744. $core.addMethod(
  27745. $core.method({
  27746. selector: "initialize",
  27747. protocol: 'initialization',
  27748. fn: function (){
  27749. var self=this;
  27750. var st;
  27751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27752. return $core.withContext(function($ctx1) {
  27753. //>>excludeEnd("ctx");
  27754. st=self._current();
  27755. $recv($recv(st)._globals())._at_put_("Smalltalk",st);
  27756. return self;
  27757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27758. }, function($ctx1) {$ctx1.fill(self,"initialize",{st:st},$globals.SmalltalkImage.klass)});
  27759. //>>excludeEnd("ctx");
  27760. },
  27761. //>>excludeStart("ide", pragmas.excludeIdeData);
  27762. args: [],
  27763. source: "initialize\x0a\x09| st |\x0a\x09st := self current.\x0a\x09st globals at: 'Smalltalk' put: st",
  27764. referencedClasses: [],
  27765. //>>excludeEnd("ide");
  27766. messageSends: ["current", "at:put:", "globals"]
  27767. }),
  27768. $globals.SmalltalkImage.klass);
  27769. $core.addMethod(
  27770. $core.method({
  27771. selector: "new",
  27772. protocol: 'instance creation',
  27773. fn: function (){
  27774. var self=this;
  27775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27776. return $core.withContext(function($ctx1) {
  27777. //>>excludeEnd("ctx");
  27778. self._shouldNotImplement();
  27779. return self;
  27780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27781. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.SmalltalkImage.klass)});
  27782. //>>excludeEnd("ctx");
  27783. },
  27784. //>>excludeStart("ide", pragmas.excludeIdeData);
  27785. args: [],
  27786. source: "new\x0a\x09self shouldNotImplement",
  27787. referencedClasses: [],
  27788. //>>excludeEnd("ide");
  27789. messageSends: ["shouldNotImplement"]
  27790. }),
  27791. $globals.SmalltalkImage.klass);
  27792. $core.addMethod(
  27793. $core.method({
  27794. selector: "do:displayingProgress:",
  27795. protocol: '*Kernel-Infrastructure',
  27796. fn: function (aBlock,aString){
  27797. var self=this;
  27798. function $ProgressHandler(){return $globals.ProgressHandler||(typeof ProgressHandler=="undefined"?nil:ProgressHandler)}
  27799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27800. return $core.withContext(function($ctx1) {
  27801. //>>excludeEnd("ctx");
  27802. $recv($ProgressHandler())._do_on_displaying_(aBlock,self,aString);
  27803. return self;
  27804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27805. }, function($ctx1) {$ctx1.fill(self,"do:displayingProgress:",{aBlock:aBlock,aString:aString},$globals.SequenceableCollection)});
  27806. //>>excludeEnd("ctx");
  27807. },
  27808. //>>excludeStart("ide", pragmas.excludeIdeData);
  27809. args: ["aBlock", "aString"],
  27810. source: "do: aBlock displayingProgress: aString\x0a\x09ProgressHandler \x0a\x09\x09do: aBlock \x0a\x09\x09on: self \x0a\x09\x09displaying: aString",
  27811. referencedClasses: ["ProgressHandler"],
  27812. //>>excludeEnd("ide");
  27813. messageSends: ["do:on:displaying:"]
  27814. }),
  27815. $globals.SequenceableCollection);
  27816. $core.addMethod(
  27817. $core.method({
  27818. selector: "asJavaScriptPropertyName",
  27819. protocol: '*Kernel-Infrastructure',
  27820. fn: function (){
  27821. var self=this;
  27822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27823. return $core.withContext(function($ctx1) {
  27824. //>>excludeEnd("ctx");
  27825. return $core.st2prop(self);
  27826. return self;
  27827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27828. }, function($ctx1) {$ctx1.fill(self,"asJavaScriptPropertyName",{},$globals.String)});
  27829. //>>excludeEnd("ctx");
  27830. },
  27831. //>>excludeStart("ide", pragmas.excludeIdeData);
  27832. args: [],
  27833. source: "asJavaScriptPropertyName\x0a<return $core.st2prop(self)>",
  27834. referencedClasses: [],
  27835. //>>excludeEnd("ide");
  27836. messageSends: []
  27837. }),
  27838. $globals.String);
  27839. $core.addMethod(
  27840. $core.method({
  27841. selector: "asJavaScriptSelector",
  27842. protocol: '*Kernel-Infrastructure',
  27843. fn: function (){
  27844. var self=this;
  27845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27846. return $core.withContext(function($ctx1) {
  27847. //>>excludeEnd("ctx");
  27848. var $1;
  27849. $1=self._asJavaScriptPropertyName();
  27850. return $1;
  27851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27852. }, function($ctx1) {$ctx1.fill(self,"asJavaScriptSelector",{},$globals.String)});
  27853. //>>excludeEnd("ctx");
  27854. },
  27855. //>>excludeStart("ide", pragmas.excludeIdeData);
  27856. args: [],
  27857. source: "asJavaScriptSelector\x0a\x09\x22Cannot add next line as it breaks commit:\x0a\x09self deprecatedAPI: 'Use #asJavaScriptPropertyName'.\x22\x0a\x09^ self asJavaScriptPropertyName",
  27858. referencedClasses: [],
  27859. //>>excludeEnd("ide");
  27860. messageSends: ["asJavaScriptPropertyName"]
  27861. }),
  27862. $globals.String);
  27863. $core.addMethod(
  27864. $core.method({
  27865. selector: "asSetting",
  27866. protocol: '*Kernel-Infrastructure',
  27867. fn: function (){
  27868. var self=this;
  27869. function $Setting(){return $globals.Setting||(typeof Setting=="undefined"?nil:Setting)}
  27870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27871. return $core.withContext(function($ctx1) {
  27872. //>>excludeEnd("ctx");
  27873. var $1;
  27874. $1=$recv($Setting())._at_ifAbsent_(self,nil);
  27875. return $1;
  27876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27877. }, function($ctx1) {$ctx1.fill(self,"asSetting",{},$globals.String)});
  27878. //>>excludeEnd("ctx");
  27879. },
  27880. //>>excludeStart("ide", pragmas.excludeIdeData);
  27881. args: [],
  27882. source: "asSetting\x0a\x09\x22Answer aSetting dedicated to locally store a value using this string as key.\x0a\x09Nil will be the default value.\x22\x0a\x09^ Setting at: self ifAbsent: nil",
  27883. referencedClasses: ["Setting"],
  27884. //>>excludeEnd("ide");
  27885. messageSends: ["at:ifAbsent:"]
  27886. }),
  27887. $globals.String);
  27888. $core.addMethod(
  27889. $core.method({
  27890. selector: "asSettingIfAbsent:",
  27891. protocol: '*Kernel-Infrastructure',
  27892. fn: function (aDefaultValue){
  27893. var self=this;
  27894. function $Setting(){return $globals.Setting||(typeof Setting=="undefined"?nil:Setting)}
  27895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27896. return $core.withContext(function($ctx1) {
  27897. //>>excludeEnd("ctx");
  27898. var $1;
  27899. $1=$recv($Setting())._at_ifAbsent_(self,aDefaultValue);
  27900. return $1;
  27901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27902. }, function($ctx1) {$ctx1.fill(self,"asSettingIfAbsent:",{aDefaultValue:aDefaultValue},$globals.String)});
  27903. //>>excludeEnd("ctx");
  27904. },
  27905. //>>excludeStart("ide", pragmas.excludeIdeData);
  27906. args: ["aDefaultValue"],
  27907. source: "asSettingIfAbsent: aDefaultValue\x0a\x09\x22Answer aSetting dedicated to locally store a value using this string as key.\x0a\x09Make this setting to have aDefaultValue.\x22\x0a\x09^ Setting at: self ifAbsent: aDefaultValue",
  27908. referencedClasses: ["Setting"],
  27909. //>>excludeEnd("ide");
  27910. messageSends: ["at:ifAbsent:"]
  27911. }),
  27912. $globals.String);
  27913. $core.addMethod(
  27914. $core.method({
  27915. selector: "settingValue",
  27916. protocol: '*Kernel-Infrastructure',
  27917. fn: function (){
  27918. var self=this;
  27919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27920. return $core.withContext(function($ctx1) {
  27921. //>>excludeEnd("ctx");
  27922. var $1;
  27923. $1=$recv(self._asSetting())._value();
  27924. return $1;
  27925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27926. }, function($ctx1) {$ctx1.fill(self,"settingValue",{},$globals.String)});
  27927. //>>excludeEnd("ctx");
  27928. },
  27929. //>>excludeStart("ide", pragmas.excludeIdeData);
  27930. args: [],
  27931. source: "settingValue\x0a\x09^ self asSetting value",
  27932. referencedClasses: [],
  27933. //>>excludeEnd("ide");
  27934. messageSends: ["value", "asSetting"]
  27935. }),
  27936. $globals.String);
  27937. $core.addMethod(
  27938. $core.method({
  27939. selector: "settingValue:",
  27940. protocol: '*Kernel-Infrastructure',
  27941. fn: function (aValue){
  27942. var self=this;
  27943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27944. return $core.withContext(function($ctx1) {
  27945. //>>excludeEnd("ctx");
  27946. var $1;
  27947. $1=$recv(self._asSetting())._value_(aValue);
  27948. return $1;
  27949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27950. }, function($ctx1) {$ctx1.fill(self,"settingValue:",{aValue:aValue},$globals.String)});
  27951. //>>excludeEnd("ctx");
  27952. },
  27953. //>>excludeStart("ide", pragmas.excludeIdeData);
  27954. args: ["aValue"],
  27955. source: "settingValue: aValue\x0a\x09\x22Sets the value of the setting that will be locally stored using this string as key.\x0a\x09Note that aValue can be any object that can be stringifyed\x22\x0a\x09^ self asSetting value: aValue",
  27956. referencedClasses: [],
  27957. //>>excludeEnd("ide");
  27958. messageSends: ["value:", "asSetting"]
  27959. }),
  27960. $globals.String);
  27961. $core.addMethod(
  27962. $core.method({
  27963. selector: "settingValueIfAbsent:",
  27964. protocol: '*Kernel-Infrastructure',
  27965. fn: function (aDefaultValue){
  27966. var self=this;
  27967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27968. return $core.withContext(function($ctx1) {
  27969. //>>excludeEnd("ctx");
  27970. var $1;
  27971. $1=$recv(self._asSettingIfAbsent_(aDefaultValue))._value();
  27972. return $1;
  27973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  27974. }, function($ctx1) {$ctx1.fill(self,"settingValueIfAbsent:",{aDefaultValue:aDefaultValue},$globals.String)});
  27975. //>>excludeEnd("ctx");
  27976. },
  27977. //>>excludeStart("ide", pragmas.excludeIdeData);
  27978. args: ["aDefaultValue"],
  27979. source: "settingValueIfAbsent: aDefaultValue\x0a\x09\x22Answer the value of the locally stored setting using this string as key.\x0a\x09Use aDefaultValue in case no setting is found\x22\x0a\x09^ (self asSettingIfAbsent: aDefaultValue) value",
  27980. referencedClasses: [],
  27981. //>>excludeEnd("ide");
  27982. messageSends: ["value", "asSettingIfAbsent:"]
  27983. }),
  27984. $globals.String);
  27985. });
  27986. define("amber_core/Kernel-Exceptions", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  27987. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  27988. var smalltalk=$core,_st=$recv,globals=$globals;
  27989. $core.addPackage('Kernel-Exceptions');
  27990. $core.packages["Kernel-Exceptions"].transport = {"type":"amd","amdNamespace":"amber_core"};
  27991. $core.addClass('Error', $globals.Object, ['messageText'], 'Kernel-Exceptions');
  27992. //>>excludeStart("ide", pragmas.excludeIdeData);
  27993. $globals.Error.comment="From the ANSI standard:\x0a\x0aThis protocol describes the behavior of instances of class `Error`.\x0aThese are used to represent error conditions that prevent the normal continuation of processing.\x0aActual error exceptions used by an application may be subclasses of this class.\x0aAs `Error` is explicitly specified to be subclassable, conforming implementations must implement its behavior in a non-fragile manner.";
  27994. //>>excludeEnd("ide");
  27995. $core.addMethod(
  27996. $core.method({
  27997. selector: "beHandled",
  27998. protocol: 'accessing',
  27999. fn: function (){
  28000. var self=this;
  28001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28002. return $core.withContext(function($ctx1) {
  28003. //>>excludeEnd("ctx");
  28004. self.amberHandled = true;
  28005. return self;
  28006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28007. }, function($ctx1) {$ctx1.fill(self,"beHandled",{},$globals.Error)});
  28008. //>>excludeEnd("ctx");
  28009. },
  28010. //>>excludeStart("ide", pragmas.excludeIdeData);
  28011. args: [],
  28012. source: "beHandled\x0a\x09<self.amberHandled = true>",
  28013. referencedClasses: [],
  28014. //>>excludeEnd("ide");
  28015. messageSends: []
  28016. }),
  28017. $globals.Error);
  28018. $core.addMethod(
  28019. $core.method({
  28020. selector: "beUnhandled",
  28021. protocol: 'accessing',
  28022. fn: function (){
  28023. var self=this;
  28024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28025. return $core.withContext(function($ctx1) {
  28026. //>>excludeEnd("ctx");
  28027. self.amberHandled = false;
  28028. return self;
  28029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28030. }, function($ctx1) {$ctx1.fill(self,"beUnhandled",{},$globals.Error)});
  28031. //>>excludeEnd("ctx");
  28032. },
  28033. //>>excludeStart("ide", pragmas.excludeIdeData);
  28034. args: [],
  28035. source: "beUnhandled\x0a\x09<self.amberHandled = false>",
  28036. referencedClasses: [],
  28037. //>>excludeEnd("ide");
  28038. messageSends: []
  28039. }),
  28040. $globals.Error);
  28041. $core.addMethod(
  28042. $core.method({
  28043. selector: "context",
  28044. protocol: 'accessing',
  28045. fn: function (){
  28046. var self=this;
  28047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28048. return $core.withContext(function($ctx1) {
  28049. //>>excludeEnd("ctx");
  28050. return self.context;
  28051. return self;
  28052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28053. }, function($ctx1) {$ctx1.fill(self,"context",{},$globals.Error)});
  28054. //>>excludeEnd("ctx");
  28055. },
  28056. //>>excludeStart("ide", pragmas.excludeIdeData);
  28057. args: [],
  28058. source: "context\x0a\x09<return self.context>",
  28059. referencedClasses: [],
  28060. //>>excludeEnd("ide");
  28061. messageSends: []
  28062. }),
  28063. $globals.Error);
  28064. $core.addMethod(
  28065. $core.method({
  28066. selector: "initialize",
  28067. protocol: 'initialization',
  28068. fn: function (){
  28069. var self=this;
  28070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28071. return $core.withContext(function($ctx1) {
  28072. //>>excludeEnd("ctx");
  28073. self._messageText_("Errorclass: ".__comma($recv(self._class())._name()));
  28074. return self;
  28075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28076. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Error)});
  28077. //>>excludeEnd("ctx");
  28078. },
  28079. //>>excludeStart("ide", pragmas.excludeIdeData);
  28080. args: [],
  28081. source: "initialize\x0a\x09self messageText: 'Errorclass: ', (self class name).",
  28082. referencedClasses: [],
  28083. //>>excludeEnd("ide");
  28084. messageSends: ["messageText:", ",", "name", "class"]
  28085. }),
  28086. $globals.Error);
  28087. $core.addMethod(
  28088. $core.method({
  28089. selector: "isSmalltalkError",
  28090. protocol: 'testing',
  28091. fn: function (){
  28092. var self=this;
  28093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28094. return $core.withContext(function($ctx1) {
  28095. //>>excludeEnd("ctx");
  28096. return self.smalltalkError === true;
  28097. return self;
  28098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28099. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkError",{},$globals.Error)});
  28100. //>>excludeEnd("ctx");
  28101. },
  28102. //>>excludeStart("ide", pragmas.excludeIdeData);
  28103. args: [],
  28104. source: "isSmalltalkError\x0a\x09<return self.smalltalkError === true>",
  28105. referencedClasses: [],
  28106. //>>excludeEnd("ide");
  28107. messageSends: []
  28108. }),
  28109. $globals.Error);
  28110. $core.addMethod(
  28111. $core.method({
  28112. selector: "jsStack",
  28113. protocol: 'accessing',
  28114. fn: function (){
  28115. var self=this;
  28116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28117. return $core.withContext(function($ctx1) {
  28118. //>>excludeEnd("ctx");
  28119. return self.stack;
  28120. return self;
  28121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28122. }, function($ctx1) {$ctx1.fill(self,"jsStack",{},$globals.Error)});
  28123. //>>excludeEnd("ctx");
  28124. },
  28125. //>>excludeStart("ide", pragmas.excludeIdeData);
  28126. args: [],
  28127. source: "jsStack\x0a\x09<return self.stack>",
  28128. referencedClasses: [],
  28129. //>>excludeEnd("ide");
  28130. messageSends: []
  28131. }),
  28132. $globals.Error);
  28133. $core.addMethod(
  28134. $core.method({
  28135. selector: "messageText",
  28136. protocol: 'accessing',
  28137. fn: function (){
  28138. var self=this;
  28139. var $1;
  28140. $1=self["@messageText"];
  28141. return $1;
  28142. },
  28143. //>>excludeStart("ide", pragmas.excludeIdeData);
  28144. args: [],
  28145. source: "messageText\x0a\x09^ messageText",
  28146. referencedClasses: [],
  28147. //>>excludeEnd("ide");
  28148. messageSends: []
  28149. }),
  28150. $globals.Error);
  28151. $core.addMethod(
  28152. $core.method({
  28153. selector: "messageText:",
  28154. protocol: 'accessing',
  28155. fn: function (aString){
  28156. var self=this;
  28157. self["@messageText"]=aString;
  28158. return self;
  28159. },
  28160. //>>excludeStart("ide", pragmas.excludeIdeData);
  28161. args: ["aString"],
  28162. source: "messageText: aString\x0a\x09messageText := aString",
  28163. referencedClasses: [],
  28164. //>>excludeEnd("ide");
  28165. messageSends: []
  28166. }),
  28167. $globals.Error);
  28168. $core.addMethod(
  28169. $core.method({
  28170. selector: "resignal",
  28171. protocol: 'signaling',
  28172. fn: function (){
  28173. var self=this;
  28174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28175. return $core.withContext(function($ctx1) {
  28176. //>>excludeEnd("ctx");
  28177. self.amberHandled = false;
  28178. throw(self);
  28179. ;
  28180. return self;
  28181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28182. }, function($ctx1) {$ctx1.fill(self,"resignal",{},$globals.Error)});
  28183. //>>excludeEnd("ctx");
  28184. },
  28185. //>>excludeStart("ide", pragmas.excludeIdeData);
  28186. args: [],
  28187. source: "resignal\x0a\x09\x22Resignal the receiver without changing its exception context\x22\x0a\x09\x0a\x09<\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09throw(self);\x0a\x09>",
  28188. referencedClasses: [],
  28189. //>>excludeEnd("ide");
  28190. messageSends: []
  28191. }),
  28192. $globals.Error);
  28193. $core.addMethod(
  28194. $core.method({
  28195. selector: "signal",
  28196. protocol: 'signaling',
  28197. fn: function (){
  28198. var self=this;
  28199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28200. return $core.withContext(function($ctx1) {
  28201. //>>excludeEnd("ctx");
  28202. self.amberHandled = false;
  28203. self.context = $core.getThisContext();
  28204. self.smalltalkError = true;
  28205. throw self;
  28206. ;
  28207. return self;
  28208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28209. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error)});
  28210. //>>excludeEnd("ctx");
  28211. },
  28212. //>>excludeStart("ide", pragmas.excludeIdeData);
  28213. args: [],
  28214. source: "signal\x0a\x09<\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09self.context = $core.getThisContext(); \x0a\x09\x09self.smalltalkError = true;\x0a\x09\x09throw self;\x0a\x09>",
  28215. referencedClasses: [],
  28216. //>>excludeEnd("ide");
  28217. messageSends: []
  28218. }),
  28219. $globals.Error);
  28220. $core.addMethod(
  28221. $core.method({
  28222. selector: "signal:",
  28223. protocol: 'signaling',
  28224. fn: function (aString){
  28225. var self=this;
  28226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28227. return $core.withContext(function($ctx1) {
  28228. //>>excludeEnd("ctx");
  28229. self._messageText_(aString);
  28230. self._signal();
  28231. return self;
  28232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28233. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error)});
  28234. //>>excludeEnd("ctx");
  28235. },
  28236. //>>excludeStart("ide", pragmas.excludeIdeData);
  28237. args: ["aString"],
  28238. source: "signal: aString\x0a\x09self messageText: aString.\x0a\x09self signal",
  28239. referencedClasses: [],
  28240. //>>excludeEnd("ide");
  28241. messageSends: ["messageText:", "signal"]
  28242. }),
  28243. $globals.Error);
  28244. $core.addMethod(
  28245. $core.method({
  28246. selector: "signalerContext",
  28247. protocol: 'accessing',
  28248. fn: function (){
  28249. var self=this;
  28250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28251. return $core.withContext(function($ctx1) {
  28252. //>>excludeEnd("ctx");
  28253. var $1;
  28254. $1=self._signalerContextFrom_(self._context());
  28255. return $1;
  28256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28257. }, function($ctx1) {$ctx1.fill(self,"signalerContext",{},$globals.Error)});
  28258. //>>excludeEnd("ctx");
  28259. },
  28260. //>>excludeStart("ide", pragmas.excludeIdeData);
  28261. args: [],
  28262. source: "signalerContext\x0a\x09^ self signalerContextFrom: self context",
  28263. referencedClasses: [],
  28264. //>>excludeEnd("ide");
  28265. messageSends: ["signalerContextFrom:", "context"]
  28266. }),
  28267. $globals.Error);
  28268. $core.addMethod(
  28269. $core.method({
  28270. selector: "signalerContextFrom:",
  28271. protocol: 'accessing',
  28272. fn: function (aContext){
  28273. var self=this;
  28274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28275. return $core.withContext(function($ctx1) {
  28276. //>>excludeEnd("ctx");
  28277. var $4,$3,$2,$1;
  28278. $1=$recv(aContext)._findContextSuchThat_((function(context){
  28279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28280. return $core.withContext(function($ctx2) {
  28281. //>>excludeEnd("ctx");
  28282. $4=$recv(context)._receiver();
  28283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28284. $ctx2.sendIdx["receiver"]=1;
  28285. //>>excludeEnd("ctx");
  28286. $3=$recv($4).__eq_eq(self);
  28287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28288. $ctx2.sendIdx["=="]=1;
  28289. //>>excludeEnd("ctx");
  28290. $2=$recv($3)._or_((function(){
  28291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28292. return $core.withContext(function($ctx3) {
  28293. //>>excludeEnd("ctx");
  28294. return $recv($recv(context)._receiver()).__eq_eq(self._class());
  28295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28296. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  28297. //>>excludeEnd("ctx");
  28298. }));
  28299. return $recv($2)._not();
  28300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28301. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  28302. //>>excludeEnd("ctx");
  28303. }));
  28304. return $1;
  28305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28306. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Error)});
  28307. //>>excludeEnd("ctx");
  28308. },
  28309. //>>excludeStart("ide", pragmas.excludeIdeData);
  28310. args: ["aContext"],
  28311. source: "signalerContextFrom: aContext\x0a\x09\x22Find the first sender of signal(:), the first context which is neither \x0a\x09for an instance method nor for a class side method of Exception (or subclass).\x0a\x09This will make sure that the same context is found for both, `Error signal` \x0a\x09and `Error new signal`\x22\x0a\x0a\x09^ aContext findContextSuchThat: [ :context |\x0a\x09\x09(context receiver == self \x0a\x09\x09or: [ context receiver == self class ]) not ]",
  28312. referencedClasses: [],
  28313. //>>excludeEnd("ide");
  28314. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class"]
  28315. }),
  28316. $globals.Error);
  28317. $core.addMethod(
  28318. $core.method({
  28319. selector: "wasHandled",
  28320. protocol: 'testing',
  28321. fn: function (){
  28322. var self=this;
  28323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28324. return $core.withContext(function($ctx1) {
  28325. //>>excludeEnd("ctx");
  28326. return self.amberHandled || false;
  28327. return self;
  28328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28329. }, function($ctx1) {$ctx1.fill(self,"wasHandled",{},$globals.Error)});
  28330. //>>excludeEnd("ctx");
  28331. },
  28332. //>>excludeStart("ide", pragmas.excludeIdeData);
  28333. args: [],
  28334. source: "wasHandled\x0a\x09<return self.amberHandled || false>",
  28335. referencedClasses: [],
  28336. //>>excludeEnd("ide");
  28337. messageSends: []
  28338. }),
  28339. $globals.Error);
  28340. $core.addMethod(
  28341. $core.method({
  28342. selector: "heliosClass",
  28343. protocol: 'helios',
  28344. fn: function (){
  28345. var self=this;
  28346. return "exception";
  28347. },
  28348. //>>excludeStart("ide", pragmas.excludeIdeData);
  28349. args: [],
  28350. source: "heliosClass\x0a\x09^ 'exception'",
  28351. referencedClasses: [],
  28352. //>>excludeEnd("ide");
  28353. messageSends: []
  28354. }),
  28355. $globals.Error.klass);
  28356. $core.addMethod(
  28357. $core.method({
  28358. selector: "signal",
  28359. protocol: 'instance creation',
  28360. fn: function (){
  28361. var self=this;
  28362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28363. return $core.withContext(function($ctx1) {
  28364. //>>excludeEnd("ctx");
  28365. var $1;
  28366. $1=$recv(self._new())._signal();
  28367. return $1;
  28368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28369. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error.klass)});
  28370. //>>excludeEnd("ctx");
  28371. },
  28372. //>>excludeStart("ide", pragmas.excludeIdeData);
  28373. args: [],
  28374. source: "signal\x0a\x09^ self new signal",
  28375. referencedClasses: [],
  28376. //>>excludeEnd("ide");
  28377. messageSends: ["signal", "new"]
  28378. }),
  28379. $globals.Error.klass);
  28380. $core.addMethod(
  28381. $core.method({
  28382. selector: "signal:",
  28383. protocol: 'instance creation',
  28384. fn: function (aString){
  28385. var self=this;
  28386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28387. return $core.withContext(function($ctx1) {
  28388. //>>excludeEnd("ctx");
  28389. var $1;
  28390. $1=$recv(self._new())._signal_(aString);
  28391. return $1;
  28392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28393. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error.klass)});
  28394. //>>excludeEnd("ctx");
  28395. },
  28396. //>>excludeStart("ide", pragmas.excludeIdeData);
  28397. args: ["aString"],
  28398. source: "signal: aString\x0a\x09^ self new\x0a\x09\x09signal: aString",
  28399. referencedClasses: [],
  28400. //>>excludeEnd("ide");
  28401. messageSends: ["signal:", "new"]
  28402. }),
  28403. $globals.Error.klass);
  28404. $core.addClass('Halt', $globals.Error, [], 'Kernel-Exceptions');
  28405. //>>excludeStart("ide", pragmas.excludeIdeData);
  28406. $globals.Halt.comment="I am provided to support `Object>>#halt`.";
  28407. //>>excludeEnd("ide");
  28408. $core.addMethod(
  28409. $core.method({
  28410. selector: "messageText",
  28411. protocol: 'accessing',
  28412. fn: function (){
  28413. var self=this;
  28414. return "Halt encountered";
  28415. },
  28416. //>>excludeStart("ide", pragmas.excludeIdeData);
  28417. args: [],
  28418. source: "messageText\x0a\x09^ 'Halt encountered'",
  28419. referencedClasses: [],
  28420. //>>excludeEnd("ide");
  28421. messageSends: []
  28422. }),
  28423. $globals.Halt);
  28424. $core.addMethod(
  28425. $core.method({
  28426. selector: "signalerContextFrom:",
  28427. protocol: 'accessing',
  28428. fn: function (aContext){
  28429. var self=this;
  28430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28431. return $core.withContext(function($ctx1) {
  28432. //>>excludeEnd("ctx");
  28433. var $4,$3,$2,$1;
  28434. $1=$recv(aContext)._findContextSuchThat_((function(context){
  28435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28436. return $core.withContext(function($ctx2) {
  28437. //>>excludeEnd("ctx");
  28438. $4=$recv(context)._receiver();
  28439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28440. $ctx2.sendIdx["receiver"]=1;
  28441. //>>excludeEnd("ctx");
  28442. $3=$recv($4).__eq_eq(self);
  28443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28444. $ctx2.sendIdx["=="]=1;
  28445. //>>excludeEnd("ctx");
  28446. $2=$recv($3)._or_((function(){
  28447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28448. return $core.withContext(function($ctx3) {
  28449. //>>excludeEnd("ctx");
  28450. return $recv($recv($recv(context)._receiver()).__eq_eq(self._class()))._or_((function(){
  28451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28452. return $core.withContext(function($ctx4) {
  28453. //>>excludeEnd("ctx");
  28454. return $recv($recv($recv(context)._method())._selector()).__eq("halt");
  28455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28456. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  28457. //>>excludeEnd("ctx");
  28458. }));
  28459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28460. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  28461. //>>excludeEnd("ctx");
  28462. }));
  28463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28464. $ctx2.sendIdx["or:"]=1;
  28465. //>>excludeEnd("ctx");
  28466. return $recv($2)._not();
  28467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28468. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  28469. //>>excludeEnd("ctx");
  28470. }));
  28471. return $1;
  28472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28473. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Halt)});
  28474. //>>excludeEnd("ctx");
  28475. },
  28476. //>>excludeStart("ide", pragmas.excludeIdeData);
  28477. args: ["aContext"],
  28478. source: "signalerContextFrom: aContext\x0a\x09\x22specialized version to find the proper context to open the debugger on.\x0a\x09This will find the first context whose method is no longer on `Halt` or \x0a\x09`Halt class` nor is `#halt` method itself.\x22\x0a\x09\x0a\x09^ aContext findContextSuchThat: [ :context |\x0a\x09\x09(context receiver == self \x0a\x09\x09or: [ (context receiver == self class) \x0a\x09\x09or: [ context method selector = #halt ]]) not ]",
  28479. referencedClasses: [],
  28480. //>>excludeEnd("ide");
  28481. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class", "=", "selector", "method"]
  28482. }),
  28483. $globals.Halt);
  28484. $core.addClass('JavaScriptException', $globals.Error, ['exception'], 'Kernel-Exceptions');
  28485. //>>excludeStart("ide", pragmas.excludeIdeData);
  28486. $globals.JavaScriptException.comment="A JavaScriptException is thrown when a non-Smalltalk exception occurs while in the Smalltalk stack.\x0aSee `boot.js` `inContext()` and `BlockClosure >> on:do:`";
  28487. //>>excludeEnd("ide");
  28488. $core.addMethod(
  28489. $core.method({
  28490. selector: "context:",
  28491. protocol: 'accessing',
  28492. fn: function (aMethodContext){
  28493. var self=this;
  28494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28495. return $core.withContext(function($ctx1) {
  28496. //>>excludeEnd("ctx");
  28497. self.context = aMethodContext;
  28498. return self;
  28499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28500. }, function($ctx1) {$ctx1.fill(self,"context:",{aMethodContext:aMethodContext},$globals.JavaScriptException)});
  28501. //>>excludeEnd("ctx");
  28502. },
  28503. //>>excludeStart("ide", pragmas.excludeIdeData);
  28504. args: ["aMethodContext"],
  28505. source: "context: aMethodContext\x0a\x09\x22Set the context from the outside.\x0a\x09See boot.js `inContext()` exception handling\x22\x0a\x09\x0a\x09<self.context = aMethodContext>",
  28506. referencedClasses: [],
  28507. //>>excludeEnd("ide");
  28508. messageSends: []
  28509. }),
  28510. $globals.JavaScriptException);
  28511. $core.addMethod(
  28512. $core.method({
  28513. selector: "exception",
  28514. protocol: 'accessing',
  28515. fn: function (){
  28516. var self=this;
  28517. var $1;
  28518. $1=self["@exception"];
  28519. return $1;
  28520. },
  28521. //>>excludeStart("ide", pragmas.excludeIdeData);
  28522. args: [],
  28523. source: "exception\x0a\x09^ exception",
  28524. referencedClasses: [],
  28525. //>>excludeEnd("ide");
  28526. messageSends: []
  28527. }),
  28528. $globals.JavaScriptException);
  28529. $core.addMethod(
  28530. $core.method({
  28531. selector: "exception:",
  28532. protocol: 'accessing',
  28533. fn: function (anException){
  28534. var self=this;
  28535. self["@exception"]=anException;
  28536. return self;
  28537. },
  28538. //>>excludeStart("ide", pragmas.excludeIdeData);
  28539. args: ["anException"],
  28540. source: "exception: anException\x0a\x09exception := anException",
  28541. referencedClasses: [],
  28542. //>>excludeEnd("ide");
  28543. messageSends: []
  28544. }),
  28545. $globals.JavaScriptException);
  28546. $core.addMethod(
  28547. $core.method({
  28548. selector: "messageText",
  28549. protocol: 'accessing',
  28550. fn: function (){
  28551. var self=this;
  28552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28553. return $core.withContext(function($ctx1) {
  28554. //>>excludeEnd("ctx");
  28555. return 'JavaScript exception: ' + self["@exception"].toString();
  28556. return self;
  28557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28558. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.JavaScriptException)});
  28559. //>>excludeEnd("ctx");
  28560. },
  28561. //>>excludeStart("ide", pragmas.excludeIdeData);
  28562. args: [],
  28563. source: "messageText\x0a\x09<return 'JavaScript exception: ' + self[\x22@exception\x22].toString()>",
  28564. referencedClasses: [],
  28565. //>>excludeEnd("ide");
  28566. messageSends: []
  28567. }),
  28568. $globals.JavaScriptException);
  28569. $core.addMethod(
  28570. $core.method({
  28571. selector: "on:",
  28572. protocol: 'instance creation',
  28573. fn: function (anException){
  28574. var self=this;
  28575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28576. return $core.withContext(function($ctx1) {
  28577. //>>excludeEnd("ctx");
  28578. var $2,$3,$1;
  28579. $2=self._new();
  28580. $recv($2)._exception_(anException);
  28581. $3=$recv($2)._yourself();
  28582. $1=$3;
  28583. return $1;
  28584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28585. }, function($ctx1) {$ctx1.fill(self,"on:",{anException:anException},$globals.JavaScriptException.klass)});
  28586. //>>excludeEnd("ctx");
  28587. },
  28588. //>>excludeStart("ide", pragmas.excludeIdeData);
  28589. args: ["anException"],
  28590. source: "on: anException\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09yourself",
  28591. referencedClasses: [],
  28592. //>>excludeEnd("ide");
  28593. messageSends: ["exception:", "new", "yourself"]
  28594. }),
  28595. $globals.JavaScriptException.klass);
  28596. $core.addMethod(
  28597. $core.method({
  28598. selector: "on:context:",
  28599. protocol: 'instance creation',
  28600. fn: function (anException,aMethodContext){
  28601. var self=this;
  28602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28603. return $core.withContext(function($ctx1) {
  28604. //>>excludeEnd("ctx");
  28605. var $2,$3,$1;
  28606. $2=self._new();
  28607. $recv($2)._exception_(anException);
  28608. $recv($2)._context_(aMethodContext);
  28609. $3=$recv($2)._yourself();
  28610. $1=$3;
  28611. return $1;
  28612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28613. }, function($ctx1) {$ctx1.fill(self,"on:context:",{anException:anException,aMethodContext:aMethodContext},$globals.JavaScriptException.klass)});
  28614. //>>excludeEnd("ctx");
  28615. },
  28616. //>>excludeStart("ide", pragmas.excludeIdeData);
  28617. args: ["anException", "aMethodContext"],
  28618. source: "on: anException context: aMethodContext\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09context: aMethodContext;\x0a\x09\x09yourself",
  28619. referencedClasses: [],
  28620. //>>excludeEnd("ide");
  28621. messageSends: ["exception:", "new", "context:", "yourself"]
  28622. }),
  28623. $globals.JavaScriptException.klass);
  28624. $core.addClass('MessageNotUnderstood', $globals.Error, ['message', 'receiver'], 'Kernel-Exceptions');
  28625. //>>excludeStart("ide", pragmas.excludeIdeData);
  28626. $globals.MessageNotUnderstood.comment="This exception is provided to support `Object>>doesNotUnderstand:`.";
  28627. //>>excludeEnd("ide");
  28628. $core.addMethod(
  28629. $core.method({
  28630. selector: "message",
  28631. protocol: 'accessing',
  28632. fn: function (){
  28633. var self=this;
  28634. var $1;
  28635. $1=self["@message"];
  28636. return $1;
  28637. },
  28638. //>>excludeStart("ide", pragmas.excludeIdeData);
  28639. args: [],
  28640. source: "message\x0a\x09^ message",
  28641. referencedClasses: [],
  28642. //>>excludeEnd("ide");
  28643. messageSends: []
  28644. }),
  28645. $globals.MessageNotUnderstood);
  28646. $core.addMethod(
  28647. $core.method({
  28648. selector: "message:",
  28649. protocol: 'accessing',
  28650. fn: function (aMessage){
  28651. var self=this;
  28652. self["@message"]=aMessage;
  28653. return self;
  28654. },
  28655. //>>excludeStart("ide", pragmas.excludeIdeData);
  28656. args: ["aMessage"],
  28657. source: "message: aMessage\x0a\x09message := aMessage",
  28658. referencedClasses: [],
  28659. //>>excludeEnd("ide");
  28660. messageSends: []
  28661. }),
  28662. $globals.MessageNotUnderstood);
  28663. $core.addMethod(
  28664. $core.method({
  28665. selector: "messageText",
  28666. protocol: 'accessing',
  28667. fn: function (){
  28668. var self=this;
  28669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28670. return $core.withContext(function($ctx1) {
  28671. //>>excludeEnd("ctx");
  28672. var $1;
  28673. $1=$recv($recv($recv(self._receiver())._asString()).__comma(" does not understand #")).__comma($recv(self._message())._selector());
  28674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28675. $ctx1.sendIdx[","]=1;
  28676. //>>excludeEnd("ctx");
  28677. return $1;
  28678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28679. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.MessageNotUnderstood)});
  28680. //>>excludeEnd("ctx");
  28681. },
  28682. //>>excludeStart("ide", pragmas.excludeIdeData);
  28683. args: [],
  28684. source: "messageText\x0a\x09^ self receiver asString, ' does not understand #', self message selector",
  28685. referencedClasses: [],
  28686. //>>excludeEnd("ide");
  28687. messageSends: [",", "asString", "receiver", "selector", "message"]
  28688. }),
  28689. $globals.MessageNotUnderstood);
  28690. $core.addMethod(
  28691. $core.method({
  28692. selector: "receiver",
  28693. protocol: 'accessing',
  28694. fn: function (){
  28695. var self=this;
  28696. var $1;
  28697. $1=self["@receiver"];
  28698. return $1;
  28699. },
  28700. //>>excludeStart("ide", pragmas.excludeIdeData);
  28701. args: [],
  28702. source: "receiver\x0a\x09^ receiver",
  28703. referencedClasses: [],
  28704. //>>excludeEnd("ide");
  28705. messageSends: []
  28706. }),
  28707. $globals.MessageNotUnderstood);
  28708. $core.addMethod(
  28709. $core.method({
  28710. selector: "receiver:",
  28711. protocol: 'accessing',
  28712. fn: function (anObject){
  28713. var self=this;
  28714. self["@receiver"]=anObject;
  28715. return self;
  28716. },
  28717. //>>excludeStart("ide", pragmas.excludeIdeData);
  28718. args: ["anObject"],
  28719. source: "receiver: anObject\x0a\x09receiver := anObject",
  28720. referencedClasses: [],
  28721. //>>excludeEnd("ide");
  28722. messageSends: []
  28723. }),
  28724. $globals.MessageNotUnderstood);
  28725. $core.addClass('NonBooleanReceiver', $globals.Error, ['object'], 'Kernel-Exceptions');
  28726. //>>excludeStart("ide", pragmas.excludeIdeData);
  28727. $globals.NonBooleanReceiver.comment="NonBooleanReceiver exceptions may be thrown when executing inlined methods such as `#ifTrue:` with a non boolean receiver.";
  28728. //>>excludeEnd("ide");
  28729. $core.addMethod(
  28730. $core.method({
  28731. selector: "object",
  28732. protocol: 'accessing',
  28733. fn: function (){
  28734. var self=this;
  28735. var $1;
  28736. $1=self["@object"];
  28737. return $1;
  28738. },
  28739. //>>excludeStart("ide", pragmas.excludeIdeData);
  28740. args: [],
  28741. source: "object\x0a\x09^ object",
  28742. referencedClasses: [],
  28743. //>>excludeEnd("ide");
  28744. messageSends: []
  28745. }),
  28746. $globals.NonBooleanReceiver);
  28747. $core.addMethod(
  28748. $core.method({
  28749. selector: "object:",
  28750. protocol: 'accessing',
  28751. fn: function (anObject){
  28752. var self=this;
  28753. self["@object"]=anObject;
  28754. return self;
  28755. },
  28756. //>>excludeStart("ide", pragmas.excludeIdeData);
  28757. args: ["anObject"],
  28758. source: "object: anObject\x0a\x09object := anObject",
  28759. referencedClasses: [],
  28760. //>>excludeEnd("ide");
  28761. messageSends: []
  28762. }),
  28763. $globals.NonBooleanReceiver);
  28764. $core.addClass('PackageCommitError', $globals.Error, [], 'Kernel-Exceptions');
  28765. //>>excludeStart("ide", pragmas.excludeIdeData);
  28766. $globals.PackageCommitError.comment="I get signaled when an attempt to commit a package has failed.";
  28767. //>>excludeEnd("ide");
  28768. });
  28769. define("amber_core/Kernel-Transcript", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  28770. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  28771. var smalltalk=$core,_st=$recv,globals=$globals;
  28772. $core.addPackage('Kernel-Transcript');
  28773. $core.packages["Kernel-Transcript"].transport = {"type":"amd","amdNamespace":"amber_core"};
  28774. $core.addClass('ConsoleTranscript', $globals.Object, ['textarea'], 'Kernel-Transcript');
  28775. //>>excludeStart("ide", pragmas.excludeIdeData);
  28776. $globals.ConsoleTranscript.comment="I am a specific transcript emitting to the JavaScript console.\x0a\x0aIf no other transcript is registered, I am the default.";
  28777. //>>excludeEnd("ide");
  28778. $core.addMethod(
  28779. $core.method({
  28780. selector: "clear",
  28781. protocol: 'printing',
  28782. fn: function (){
  28783. var self=this;
  28784. return self;
  28785. },
  28786. //>>excludeStart("ide", pragmas.excludeIdeData);
  28787. args: [],
  28788. source: "clear\x0a\x09\x22no op\x22",
  28789. referencedClasses: [],
  28790. //>>excludeEnd("ide");
  28791. messageSends: []
  28792. }),
  28793. $globals.ConsoleTranscript);
  28794. $core.addMethod(
  28795. $core.method({
  28796. selector: "cr",
  28797. protocol: 'printing',
  28798. fn: function (){
  28799. var self=this;
  28800. return self;
  28801. },
  28802. //>>excludeStart("ide", pragmas.excludeIdeData);
  28803. args: [],
  28804. source: "cr\x0a\x09\x22no op\x22",
  28805. referencedClasses: [],
  28806. //>>excludeEnd("ide");
  28807. messageSends: []
  28808. }),
  28809. $globals.ConsoleTranscript);
  28810. $core.addMethod(
  28811. $core.method({
  28812. selector: "open",
  28813. protocol: 'actions',
  28814. fn: function (){
  28815. var self=this;
  28816. return self;
  28817. },
  28818. //>>excludeStart("ide", pragmas.excludeIdeData);
  28819. args: [],
  28820. source: "open",
  28821. referencedClasses: [],
  28822. //>>excludeEnd("ide");
  28823. messageSends: []
  28824. }),
  28825. $globals.ConsoleTranscript);
  28826. $core.addMethod(
  28827. $core.method({
  28828. selector: "show:",
  28829. protocol: 'printing',
  28830. fn: function (anObject){
  28831. var self=this;
  28832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28833. return $core.withContext(function($ctx1) {
  28834. //>>excludeEnd("ctx");
  28835. console.log(String($recv(anObject)._asString()));
  28836. return self;
  28837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28838. }, function($ctx1) {$ctx1.fill(self,"show:",{anObject:anObject},$globals.ConsoleTranscript)});
  28839. //>>excludeEnd("ctx");
  28840. },
  28841. //>>excludeStart("ide", pragmas.excludeIdeData);
  28842. args: ["anObject"],
  28843. source: "show: anObject\x0a\x22Smalltalk objects should have no trouble displaying themselves on the Transcript; Javascript objects don't know how, so must be wrapped in a JSObectProxy.\x22\x0a<console.log(String($recv(anObject)._asString()))>",
  28844. referencedClasses: [],
  28845. //>>excludeEnd("ide");
  28846. messageSends: []
  28847. }),
  28848. $globals.ConsoleTranscript);
  28849. $core.addMethod(
  28850. $core.method({
  28851. selector: "initialize",
  28852. protocol: 'initialization',
  28853. fn: function (){
  28854. var self=this;
  28855. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  28856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28857. return $core.withContext(function($ctx1) {
  28858. //>>excludeEnd("ctx");
  28859. $recv($Transcript())._registerIfNone_(self._new());
  28860. return self;
  28861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28862. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ConsoleTranscript.klass)});
  28863. //>>excludeEnd("ctx");
  28864. },
  28865. //>>excludeStart("ide", pragmas.excludeIdeData);
  28866. args: [],
  28867. source: "initialize\x0a\x09Transcript registerIfNone: self new",
  28868. referencedClasses: ["Transcript"],
  28869. //>>excludeEnd("ide");
  28870. messageSends: ["registerIfNone:", "new"]
  28871. }),
  28872. $globals.ConsoleTranscript.klass);
  28873. });
  28874. define("amber_core/Kernel-Announcements", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  28875. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  28876. var smalltalk=$core,_st=$recv,globals=$globals;
  28877. $core.addPackage('Kernel-Announcements');
  28878. $core.packages["Kernel-Announcements"].transport = {"type":"amd","amdNamespace":"amber_core"};
  28879. $core.addClass('AnnouncementSubscription', $globals.Object, ['valuable', 'announcementClass'], 'Kernel-Announcements');
  28880. //>>excludeStart("ide", pragmas.excludeIdeData);
  28881. $globals.AnnouncementSubscription.comment="I am a single entry in a subscription registry of an `Announcer`.\x0aSeveral subscriptions by the same object is possible.";
  28882. //>>excludeEnd("ide");
  28883. $core.addMethod(
  28884. $core.method({
  28885. selector: "announcementClass",
  28886. protocol: 'accessing',
  28887. fn: function (){
  28888. var self=this;
  28889. var $1;
  28890. $1=self["@announcementClass"];
  28891. return $1;
  28892. },
  28893. //>>excludeStart("ide", pragmas.excludeIdeData);
  28894. args: [],
  28895. source: "announcementClass\x0a\x09^ announcementClass",
  28896. referencedClasses: [],
  28897. //>>excludeEnd("ide");
  28898. messageSends: []
  28899. }),
  28900. $globals.AnnouncementSubscription);
  28901. $core.addMethod(
  28902. $core.method({
  28903. selector: "announcementClass:",
  28904. protocol: 'accessing',
  28905. fn: function (aClass){
  28906. var self=this;
  28907. self["@announcementClass"]=aClass;
  28908. return self;
  28909. },
  28910. //>>excludeStart("ide", pragmas.excludeIdeData);
  28911. args: ["aClass"],
  28912. source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
  28913. referencedClasses: [],
  28914. //>>excludeEnd("ide");
  28915. messageSends: []
  28916. }),
  28917. $globals.AnnouncementSubscription);
  28918. $core.addMethod(
  28919. $core.method({
  28920. selector: "block",
  28921. protocol: 'accessing',
  28922. fn: function (){
  28923. var self=this;
  28924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28925. return $core.withContext(function($ctx1) {
  28926. //>>excludeEnd("ctx");
  28927. var $1;
  28928. self._deprecatedAPI();
  28929. $1=self._valuable();
  28930. return $1;
  28931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28932. }, function($ctx1) {$ctx1.fill(self,"block",{},$globals.AnnouncementSubscription)});
  28933. //>>excludeEnd("ctx");
  28934. },
  28935. //>>excludeStart("ide", pragmas.excludeIdeData);
  28936. args: [],
  28937. source: "block\x0a\x09\x22Use #valuable instead\x22\x0a\x09\x0a\x09self deprecatedAPI.\x0a\x09^ self valuable",
  28938. referencedClasses: [],
  28939. //>>excludeEnd("ide");
  28940. messageSends: ["deprecatedAPI", "valuable"]
  28941. }),
  28942. $globals.AnnouncementSubscription);
  28943. $core.addMethod(
  28944. $core.method({
  28945. selector: "block:",
  28946. protocol: 'accessing',
  28947. fn: function (aValuable){
  28948. var self=this;
  28949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28950. return $core.withContext(function($ctx1) {
  28951. //>>excludeEnd("ctx");
  28952. self._deprecatedAPI();
  28953. self._valuable_(aValuable);
  28954. return self;
  28955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28956. }, function($ctx1) {$ctx1.fill(self,"block:",{aValuable:aValuable},$globals.AnnouncementSubscription)});
  28957. //>>excludeEnd("ctx");
  28958. },
  28959. //>>excludeStart("ide", pragmas.excludeIdeData);
  28960. args: ["aValuable"],
  28961. source: "block: aValuable\x0a\x09\x22Use #valuable instead\x22\x0a\x09\x0a\x09self deprecatedAPI.\x0a\x09self valuable: aValuable",
  28962. referencedClasses: [],
  28963. //>>excludeEnd("ide");
  28964. messageSends: ["deprecatedAPI", "valuable:"]
  28965. }),
  28966. $globals.AnnouncementSubscription);
  28967. $core.addMethod(
  28968. $core.method({
  28969. selector: "deliver:",
  28970. protocol: 'announcing',
  28971. fn: function (anAnnouncement){
  28972. var self=this;
  28973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28974. return $core.withContext(function($ctx1) {
  28975. //>>excludeEnd("ctx");
  28976. var $1;
  28977. $1=self._handlesAnnouncement_(anAnnouncement);
  28978. if($core.assert($1)){
  28979. $recv(self._valuable())._value_(anAnnouncement);
  28980. };
  28981. return self;
  28982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28983. }, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  28984. //>>excludeEnd("ctx");
  28985. },
  28986. //>>excludeStart("ide", pragmas.excludeIdeData);
  28987. args: ["anAnnouncement"],
  28988. source: "deliver: anAnnouncement\x0a\x09(self handlesAnnouncement: anAnnouncement)\x0a\x09\x09ifTrue: [ self valuable value: anAnnouncement ]",
  28989. referencedClasses: [],
  28990. //>>excludeEnd("ide");
  28991. messageSends: ["ifTrue:", "handlesAnnouncement:", "value:", "valuable"]
  28992. }),
  28993. $globals.AnnouncementSubscription);
  28994. $core.addMethod(
  28995. $core.method({
  28996. selector: "handlesAnnouncement:",
  28997. protocol: 'announcing',
  28998. fn: function (anAnnouncement){
  28999. var self=this;
  29000. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  29001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29002. return $core.withContext(function($ctx1) {
  29003. //>>excludeEnd("ctx");
  29004. var $3,$4,$2,$1,$receiver;
  29005. $3=$recv($Smalltalk())._globals();
  29006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29007. $ctx1.sendIdx["globals"]=1;
  29008. //>>excludeEnd("ctx");
  29009. $4=$recv(self._announcementClass())._name();
  29010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29011. $ctx1.sendIdx["name"]=1;
  29012. //>>excludeEnd("ctx");
  29013. $2=$recv($3)._at_($4);
  29014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29015. $ctx1.sendIdx["at:"]=1;
  29016. //>>excludeEnd("ctx");
  29017. if(($receiver = $2) == null || $receiver.isNil){
  29018. return false;
  29019. } else {
  29020. var class_;
  29021. class_=$receiver;
  29022. $1=$recv($recv($recv($Smalltalk())._globals())._at_($recv($recv($recv(anAnnouncement)._class())._theNonMetaClass())._name()))._includesBehavior_(class_);
  29023. };
  29024. return $1;
  29025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29026. }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},$globals.AnnouncementSubscription)});
  29027. //>>excludeEnd("ctx");
  29028. },
  29029. //>>excludeStart("ide", pragmas.excludeIdeData);
  29030. args: ["anAnnouncement"],
  29031. source: "handlesAnnouncement: anAnnouncement\x0a\x09\x22anAnnouncement might be announced from within another Amber environment\x22\x0a\x09\x0a\x09^ (Smalltalk globals at: self announcementClass name)\x0a\x09\x09ifNil: [ ^ false ]\x0a\x09\x09ifNotNil: [ :class |\x0a\x09\x09(Smalltalk globals at: anAnnouncement class theNonMetaClass name) includesBehavior: class ]",
  29032. referencedClasses: ["Smalltalk"],
  29033. //>>excludeEnd("ide");
  29034. messageSends: ["ifNil:ifNotNil:", "at:", "globals", "name", "announcementClass", "includesBehavior:", "theNonMetaClass", "class"]
  29035. }),
  29036. $globals.AnnouncementSubscription);
  29037. $core.addMethod(
  29038. $core.method({
  29039. selector: "receiver",
  29040. protocol: 'accessing',
  29041. fn: function (){
  29042. var self=this;
  29043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29044. return $core.withContext(function($ctx1) {
  29045. //>>excludeEnd("ctx");
  29046. var $1;
  29047. $1=$recv(self._valuable())._receiver();
  29048. return $1;
  29049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29050. }, function($ctx1) {$ctx1.fill(self,"receiver",{},$globals.AnnouncementSubscription)});
  29051. //>>excludeEnd("ctx");
  29052. },
  29053. //>>excludeStart("ide", pragmas.excludeIdeData);
  29054. args: [],
  29055. source: "receiver\x0a\x09^ self valuable receiver",
  29056. referencedClasses: [],
  29057. //>>excludeEnd("ide");
  29058. messageSends: ["receiver", "valuable"]
  29059. }),
  29060. $globals.AnnouncementSubscription);
  29061. $core.addMethod(
  29062. $core.method({
  29063. selector: "valuable",
  29064. protocol: 'accessing',
  29065. fn: function (){
  29066. var self=this;
  29067. var $1;
  29068. $1=self["@valuable"];
  29069. return $1;
  29070. },
  29071. //>>excludeStart("ide", pragmas.excludeIdeData);
  29072. args: [],
  29073. source: "valuable\x0a\x09^ valuable",
  29074. referencedClasses: [],
  29075. //>>excludeEnd("ide");
  29076. messageSends: []
  29077. }),
  29078. $globals.AnnouncementSubscription);
  29079. $core.addMethod(
  29080. $core.method({
  29081. selector: "valuable:",
  29082. protocol: 'accessing',
  29083. fn: function (aValuable){
  29084. var self=this;
  29085. self["@valuable"]=aValuable;
  29086. return self;
  29087. },
  29088. //>>excludeStart("ide", pragmas.excludeIdeData);
  29089. args: ["aValuable"],
  29090. source: "valuable: aValuable\x0a\x09valuable := aValuable",
  29091. referencedClasses: [],
  29092. //>>excludeEnd("ide");
  29093. messageSends: []
  29094. }),
  29095. $globals.AnnouncementSubscription);
  29096. $core.addClass('AnnouncementValuable', $globals.Object, ['valuable', 'receiver'], 'Kernel-Announcements');
  29097. //>>excludeStart("ide", pragmas.excludeIdeData);
  29098. $globals.AnnouncementValuable.comment="I wrap `valuable` objects (typically instances of `BlockClosure`) with a `receiver` to be able to unregister subscriptions based on a `receiver`.";
  29099. //>>excludeEnd("ide");
  29100. $core.addMethod(
  29101. $core.method({
  29102. selector: "receiver",
  29103. protocol: 'accessing',
  29104. fn: function (){
  29105. var self=this;
  29106. var $1;
  29107. $1=self["@receiver"];
  29108. return $1;
  29109. },
  29110. //>>excludeStart("ide", pragmas.excludeIdeData);
  29111. args: [],
  29112. source: "receiver\x0a\x09^ receiver",
  29113. referencedClasses: [],
  29114. //>>excludeEnd("ide");
  29115. messageSends: []
  29116. }),
  29117. $globals.AnnouncementValuable);
  29118. $core.addMethod(
  29119. $core.method({
  29120. selector: "receiver:",
  29121. protocol: 'accessing',
  29122. fn: function (anObject){
  29123. var self=this;
  29124. self["@receiver"]=anObject;
  29125. return self;
  29126. },
  29127. //>>excludeStart("ide", pragmas.excludeIdeData);
  29128. args: ["anObject"],
  29129. source: "receiver: anObject\x0a\x09receiver := anObject",
  29130. referencedClasses: [],
  29131. //>>excludeEnd("ide");
  29132. messageSends: []
  29133. }),
  29134. $globals.AnnouncementValuable);
  29135. $core.addMethod(
  29136. $core.method({
  29137. selector: "valuable",
  29138. protocol: 'accessing',
  29139. fn: function (){
  29140. var self=this;
  29141. var $1;
  29142. $1=self["@valuable"];
  29143. return $1;
  29144. },
  29145. //>>excludeStart("ide", pragmas.excludeIdeData);
  29146. args: [],
  29147. source: "valuable\x0a\x09^ valuable",
  29148. referencedClasses: [],
  29149. //>>excludeEnd("ide");
  29150. messageSends: []
  29151. }),
  29152. $globals.AnnouncementValuable);
  29153. $core.addMethod(
  29154. $core.method({
  29155. selector: "valuable:",
  29156. protocol: 'accessing',
  29157. fn: function (anObject){
  29158. var self=this;
  29159. self["@valuable"]=anObject;
  29160. return self;
  29161. },
  29162. //>>excludeStart("ide", pragmas.excludeIdeData);
  29163. args: ["anObject"],
  29164. source: "valuable: anObject\x0a\x09valuable := anObject",
  29165. referencedClasses: [],
  29166. //>>excludeEnd("ide");
  29167. messageSends: []
  29168. }),
  29169. $globals.AnnouncementValuable);
  29170. $core.addMethod(
  29171. $core.method({
  29172. selector: "value",
  29173. protocol: 'evaluating',
  29174. fn: function (){
  29175. var self=this;
  29176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29177. return $core.withContext(function($ctx1) {
  29178. //>>excludeEnd("ctx");
  29179. var $1;
  29180. $1=$recv(self._valuable())._value();
  29181. return $1;
  29182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29183. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.AnnouncementValuable)});
  29184. //>>excludeEnd("ctx");
  29185. },
  29186. //>>excludeStart("ide", pragmas.excludeIdeData);
  29187. args: [],
  29188. source: "value\x0a\x09^ self valuable value",
  29189. referencedClasses: [],
  29190. //>>excludeEnd("ide");
  29191. messageSends: ["value", "valuable"]
  29192. }),
  29193. $globals.AnnouncementValuable);
  29194. $core.addMethod(
  29195. $core.method({
  29196. selector: "value:",
  29197. protocol: 'evaluating',
  29198. fn: function (anObject){
  29199. var self=this;
  29200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29201. return $core.withContext(function($ctx1) {
  29202. //>>excludeEnd("ctx");
  29203. var $1;
  29204. $1=$recv(self._valuable())._value_(anObject);
  29205. return $1;
  29206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29207. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},$globals.AnnouncementValuable)});
  29208. //>>excludeEnd("ctx");
  29209. },
  29210. //>>excludeStart("ide", pragmas.excludeIdeData);
  29211. args: ["anObject"],
  29212. source: "value: anObject\x0a\x09^ self valuable value: anObject",
  29213. referencedClasses: [],
  29214. //>>excludeEnd("ide");
  29215. messageSends: ["value:", "valuable"]
  29216. }),
  29217. $globals.AnnouncementValuable);
  29218. $core.addClass('Announcer', $globals.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
  29219. //>>excludeStart("ide", pragmas.excludeIdeData);
  29220. $globals.Announcer.comment="I hold annoncement subscriptions (instances of `AnnouncementSubscription`) in a private registry.\x0aI announce (trigger) announces, which are then dispatched to all subscriptions.\x0a\x0aThe code is based on the announcements as [described by Vassili Bykov](http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?searchCategory=Announcements%20Framework).\x0a\x0a## API\x0a\x0aUse `#announce:` to trigger an announcement.\x0a\x0aUse `#on:do:` or `#on:send:to:` to register subscriptions.\x0a\x0aWhen using `#on:send:to:`, unregistration can be done with `#unregister:`.\x0a\x0a## Usage example:\x0a\x0a SystemAnnouncer current\x0a on: ClassAdded\x0a do: [ :ann | window alert: ann theClass name, ' added' ].";
  29221. //>>excludeEnd("ide");
  29222. $core.addMethod(
  29223. $core.method({
  29224. selector: "announce:",
  29225. protocol: 'announcing',
  29226. fn: function (anAnnouncement){
  29227. var self=this;
  29228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29229. return $core.withContext(function($ctx1) {
  29230. //>>excludeEnd("ctx");
  29231. $recv(self["@subscriptions"])._do_((function(each){
  29232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29233. return $core.withContext(function($ctx2) {
  29234. //>>excludeEnd("ctx");
  29235. return $recv(each)._deliver_(anAnnouncement);
  29236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29237. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29238. //>>excludeEnd("ctx");
  29239. }));
  29240. return self;
  29241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29242. }, function($ctx1) {$ctx1.fill(self,"announce:",{anAnnouncement:anAnnouncement},$globals.Announcer)});
  29243. //>>excludeEnd("ctx");
  29244. },
  29245. //>>excludeStart("ide", pragmas.excludeIdeData);
  29246. args: ["anAnnouncement"],
  29247. source: "announce: anAnnouncement\x0a\x09subscriptions do: [ :each |\x0a\x09\x09each deliver: anAnnouncement ]",
  29248. referencedClasses: [],
  29249. //>>excludeEnd("ide");
  29250. messageSends: ["do:", "deliver:"]
  29251. }),
  29252. $globals.Announcer);
  29253. $core.addMethod(
  29254. $core.method({
  29255. selector: "initialize",
  29256. protocol: 'initialization',
  29257. fn: function (){
  29258. var self=this;
  29259. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  29260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29261. return $core.withContext(function($ctx1) {
  29262. //>>excludeEnd("ctx");
  29263. (
  29264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29265. $ctx1.supercall = true,
  29266. //>>excludeEnd("ctx");
  29267. $globals.Announcer.superclass.fn.prototype._initialize.apply($recv(self), []));
  29268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29269. $ctx1.supercall = false;
  29270. //>>excludeEnd("ctx");;
  29271. self["@subscriptions"]=$recv($OrderedCollection())._new();
  29272. return self;
  29273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29274. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Announcer)});
  29275. //>>excludeEnd("ctx");
  29276. },
  29277. //>>excludeStart("ide", pragmas.excludeIdeData);
  29278. args: [],
  29279. source: "initialize\x0a\x09super initialize.\x0a\x09subscriptions := OrderedCollection new",
  29280. referencedClasses: ["OrderedCollection"],
  29281. //>>excludeEnd("ide");
  29282. messageSends: ["initialize", "new"]
  29283. }),
  29284. $globals.Announcer);
  29285. $core.addMethod(
  29286. $core.method({
  29287. selector: "on:do:",
  29288. protocol: 'subscribing',
  29289. fn: function (aClass,aBlock){
  29290. var self=this;
  29291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29292. return $core.withContext(function($ctx1) {
  29293. //>>excludeEnd("ctx");
  29294. self._on_do_for_(aClass,aBlock,nil);
  29295. return self;
  29296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29297. }, function($ctx1) {$ctx1.fill(self,"on:do:",{aClass:aClass,aBlock:aBlock},$globals.Announcer)});
  29298. //>>excludeEnd("ctx");
  29299. },
  29300. //>>excludeStart("ide", pragmas.excludeIdeData);
  29301. args: ["aClass", "aBlock"],
  29302. source: "on: aClass do: aBlock\x0a\x09self on: aClass do: aBlock for: nil",
  29303. referencedClasses: [],
  29304. //>>excludeEnd("ide");
  29305. messageSends: ["on:do:for:"]
  29306. }),
  29307. $globals.Announcer);
  29308. $core.addMethod(
  29309. $core.method({
  29310. selector: "on:do:for:",
  29311. protocol: 'subscribing',
  29312. fn: function (aClass,aBlock,aReceiver){
  29313. var self=this;
  29314. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  29315. function $AnnouncementValuable(){return $globals.AnnouncementValuable||(typeof AnnouncementValuable=="undefined"?nil:AnnouncementValuable)}
  29316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29317. return $core.withContext(function($ctx1) {
  29318. //>>excludeEnd("ctx");
  29319. var $1,$3,$4,$6,$7,$5,$8,$2;
  29320. $1=self["@subscriptions"];
  29321. $3=$recv($AnnouncementSubscription())._new();
  29322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29323. $ctx1.sendIdx["new"]=1;
  29324. //>>excludeEnd("ctx");
  29325. $4=$3;
  29326. $6=$recv($AnnouncementValuable())._new();
  29327. $recv($6)._valuable_(aBlock);
  29328. $recv($6)._receiver_(aReceiver);
  29329. $7=$recv($6)._yourself();
  29330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29331. $ctx1.sendIdx["yourself"]=1;
  29332. //>>excludeEnd("ctx");
  29333. $5=$7;
  29334. $recv($4)._valuable_($5);
  29335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29336. $ctx1.sendIdx["valuable:"]=1;
  29337. //>>excludeEnd("ctx");
  29338. $recv($3)._announcementClass_(aClass);
  29339. $8=$recv($3)._yourself();
  29340. $2=$8;
  29341. $recv($1)._add_($2);
  29342. return self;
  29343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29344. }, function($ctx1) {$ctx1.fill(self,"on:do:for:",{aClass:aClass,aBlock:aBlock,aReceiver:aReceiver},$globals.Announcer)});
  29345. //>>excludeEnd("ctx");
  29346. },
  29347. //>>excludeStart("ide", pragmas.excludeIdeData);
  29348. args: ["aClass", "aBlock", "aReceiver"],
  29349. source: "on: aClass do: aBlock for: aReceiver\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (AnnouncementValuable new\x0a\x09\x09\x09valuable: aBlock;\x0a\x09\x09\x09receiver: aReceiver;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  29350. referencedClasses: ["AnnouncementSubscription", "AnnouncementValuable"],
  29351. //>>excludeEnd("ide");
  29352. messageSends: ["add:", "valuable:", "new", "receiver:", "yourself", "announcementClass:"]
  29353. }),
  29354. $globals.Announcer);
  29355. $core.addMethod(
  29356. $core.method({
  29357. selector: "on:doOnce:",
  29358. protocol: 'subscribing',
  29359. fn: function (aClass,aBlock){
  29360. var self=this;
  29361. var subscription;
  29362. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  29363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29364. return $core.withContext(function($ctx1) {
  29365. //>>excludeEnd("ctx");
  29366. var $1,$2;
  29367. $1=$recv($AnnouncementSubscription())._new();
  29368. $recv($1)._announcementClass_(aClass);
  29369. $2=$recv($1)._yourself();
  29370. subscription=$2;
  29371. $recv(subscription)._valuable_((function(ann){
  29372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29373. return $core.withContext(function($ctx2) {
  29374. //>>excludeEnd("ctx");
  29375. $recv(self["@subscriptions"])._remove_(subscription);
  29376. return $recv(aBlock)._value_(ann);
  29377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29378. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,1)});
  29379. //>>excludeEnd("ctx");
  29380. }));
  29381. $recv(self["@subscriptions"])._add_(subscription);
  29382. return self;
  29383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29384. }, function($ctx1) {$ctx1.fill(self,"on:doOnce:",{aClass:aClass,aBlock:aBlock,subscription:subscription},$globals.Announcer)});
  29385. //>>excludeEnd("ctx");
  29386. },
  29387. //>>excludeStart("ide", pragmas.excludeIdeData);
  29388. args: ["aClass", "aBlock"],
  29389. source: "on: aClass doOnce: aBlock\x0a\x09| subscription |\x0a\x09\x0a\x09subscription := AnnouncementSubscription new\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself.\x0a\x09subscription valuable: [ :ann |\x0a\x09\x09subscriptions remove: subscription.\x0a\x09\x09aBlock value: ann ].\x0a\x0a\x09subscriptions add: subscription",
  29390. referencedClasses: ["AnnouncementSubscription"],
  29391. //>>excludeEnd("ide");
  29392. messageSends: ["announcementClass:", "new", "yourself", "valuable:", "remove:", "value:", "add:"]
  29393. }),
  29394. $globals.Announcer);
  29395. $core.addMethod(
  29396. $core.method({
  29397. selector: "on:send:to:",
  29398. protocol: 'subscribing',
  29399. fn: function (aClass,aSelector,anObject){
  29400. var self=this;
  29401. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  29402. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  29403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29404. return $core.withContext(function($ctx1) {
  29405. //>>excludeEnd("ctx");
  29406. var $1,$3,$4,$6,$7,$5,$8,$2;
  29407. $1=self["@subscriptions"];
  29408. $3=$recv($AnnouncementSubscription())._new();
  29409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29410. $ctx1.sendIdx["new"]=1;
  29411. //>>excludeEnd("ctx");
  29412. $4=$3;
  29413. $6=$recv($MessageSend())._new();
  29414. $recv($6)._receiver_(anObject);
  29415. $recv($6)._selector_(aSelector);
  29416. $7=$recv($6)._yourself();
  29417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29418. $ctx1.sendIdx["yourself"]=1;
  29419. //>>excludeEnd("ctx");
  29420. $5=$7;
  29421. $recv($4)._valuable_($5);
  29422. $recv($3)._announcementClass_(aClass);
  29423. $8=$recv($3)._yourself();
  29424. $2=$8;
  29425. $recv($1)._add_($2);
  29426. return self;
  29427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29428. }, function($ctx1) {$ctx1.fill(self,"on:send:to:",{aClass:aClass,aSelector:aSelector,anObject:anObject},$globals.Announcer)});
  29429. //>>excludeEnd("ctx");
  29430. },
  29431. //>>excludeStart("ide", pragmas.excludeIdeData);
  29432. args: ["aClass", "aSelector", "anObject"],
  29433. source: "on: aClass send: aSelector to: anObject\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (MessageSend new\x0a\x09\x09\x09receiver: anObject;\x0a\x09\x09\x09selector: aSelector;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  29434. referencedClasses: ["AnnouncementSubscription", "MessageSend"],
  29435. //>>excludeEnd("ide");
  29436. messageSends: ["add:", "valuable:", "new", "receiver:", "selector:", "yourself", "announcementClass:"]
  29437. }),
  29438. $globals.Announcer);
  29439. $core.addMethod(
  29440. $core.method({
  29441. selector: "unsubscribe:",
  29442. protocol: 'subscribing',
  29443. fn: function (anObject){
  29444. var self=this;
  29445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29446. return $core.withContext(function($ctx1) {
  29447. //>>excludeEnd("ctx");
  29448. self["@subscriptions"]=$recv(self["@subscriptions"])._reject_((function(each){
  29449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29450. return $core.withContext(function($ctx2) {
  29451. //>>excludeEnd("ctx");
  29452. return $recv($recv(each)._receiver()).__eq(anObject);
  29453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29454. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  29455. //>>excludeEnd("ctx");
  29456. }));
  29457. return self;
  29458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29459. }, function($ctx1) {$ctx1.fill(self,"unsubscribe:",{anObject:anObject},$globals.Announcer)});
  29460. //>>excludeEnd("ctx");
  29461. },
  29462. //>>excludeStart("ide", pragmas.excludeIdeData);
  29463. args: ["anObject"],
  29464. source: "unsubscribe: anObject\x0a\x09subscriptions := subscriptions reject: [ :each |\x0a\x09\x09each receiver = anObject ]",
  29465. referencedClasses: [],
  29466. //>>excludeEnd("ide");
  29467. messageSends: ["reject:", "=", "receiver"]
  29468. }),
  29469. $globals.Announcer);
  29470. $core.addClass('SystemAnnouncer', $globals.Announcer, [], 'Kernel-Announcements');
  29471. //>>excludeStart("ide", pragmas.excludeIdeData);
  29472. $globals.SystemAnnouncer.comment="My unique instance is the global announcer handling all Amber system-related announces.\x0a\x0a## API\x0a\x0aAccess to the unique instance is done via `#current`";
  29473. //>>excludeEnd("ide");
  29474. $globals.SystemAnnouncer.klass.iVarNames = ['current'];
  29475. $core.addMethod(
  29476. $core.method({
  29477. selector: "current",
  29478. protocol: 'accessing',
  29479. fn: function (){
  29480. var self=this;
  29481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29482. return $core.withContext(function($ctx1) {
  29483. //>>excludeEnd("ctx");
  29484. var $2,$1,$receiver;
  29485. $2=self["@current"];
  29486. if(($receiver = $2) == null || $receiver.isNil){
  29487. self["@current"]=(
  29488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29489. $ctx1.supercall = true,
  29490. //>>excludeEnd("ctx");
  29491. $globals.SystemAnnouncer.klass.superclass.fn.prototype._new.apply($recv(self), []));
  29492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29493. $ctx1.supercall = false;
  29494. //>>excludeEnd("ctx");;
  29495. $1=self["@current"];
  29496. } else {
  29497. $1=$2;
  29498. };
  29499. return $1;
  29500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29501. }, function($ctx1) {$ctx1.fill(self,"current",{},$globals.SystemAnnouncer.klass)});
  29502. //>>excludeEnd("ctx");
  29503. },
  29504. //>>excludeStart("ide", pragmas.excludeIdeData);
  29505. args: [],
  29506. source: "current\x0a\x09^ current ifNil: [ current := super new ]",
  29507. referencedClasses: [],
  29508. //>>excludeEnd("ide");
  29509. messageSends: ["ifNil:", "new"]
  29510. }),
  29511. $globals.SystemAnnouncer.klass);
  29512. $core.addMethod(
  29513. $core.method({
  29514. selector: "new",
  29515. protocol: 'instance creation',
  29516. fn: function (){
  29517. var self=this;
  29518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29519. return $core.withContext(function($ctx1) {
  29520. //>>excludeEnd("ctx");
  29521. self._shouldNotImplement();
  29522. return self;
  29523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29524. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.SystemAnnouncer.klass)});
  29525. //>>excludeEnd("ctx");
  29526. },
  29527. //>>excludeStart("ide", pragmas.excludeIdeData);
  29528. args: [],
  29529. source: "new\x0a\x09self shouldNotImplement",
  29530. referencedClasses: [],
  29531. //>>excludeEnd("ide");
  29532. messageSends: ["shouldNotImplement"]
  29533. }),
  29534. $globals.SystemAnnouncer.klass);
  29535. $core.addClass('SystemAnnouncement', $globals.Object, [], 'Kernel-Announcements');
  29536. //>>excludeStart("ide", pragmas.excludeIdeData);
  29537. $globals.SystemAnnouncement.comment="I am the superclass of all system announcements";
  29538. //>>excludeEnd("ide");
  29539. $core.addMethod(
  29540. $core.method({
  29541. selector: "heliosClass",
  29542. protocol: 'helios',
  29543. fn: function (){
  29544. var self=this;
  29545. return "announcement";
  29546. },
  29547. //>>excludeStart("ide", pragmas.excludeIdeData);
  29548. args: [],
  29549. source: "heliosClass\x0a\x09^ 'announcement'",
  29550. referencedClasses: [],
  29551. //>>excludeEnd("ide");
  29552. messageSends: []
  29553. }),
  29554. $globals.SystemAnnouncement.klass);
  29555. $core.addClass('ClassAnnouncement', $globals.SystemAnnouncement, ['theClass'], 'Kernel-Announcements');
  29556. //>>excludeStart("ide", pragmas.excludeIdeData);
  29557. $globals.ClassAnnouncement.comment="I am the abstract superclass of class-related announcements.";
  29558. //>>excludeEnd("ide");
  29559. $core.addMethod(
  29560. $core.method({
  29561. selector: "theClass",
  29562. protocol: 'accessing',
  29563. fn: function (){
  29564. var self=this;
  29565. var $1;
  29566. $1=self["@theClass"];
  29567. return $1;
  29568. },
  29569. //>>excludeStart("ide", pragmas.excludeIdeData);
  29570. args: [],
  29571. source: "theClass\x0a\x09^ theClass",
  29572. referencedClasses: [],
  29573. //>>excludeEnd("ide");
  29574. messageSends: []
  29575. }),
  29576. $globals.ClassAnnouncement);
  29577. $core.addMethod(
  29578. $core.method({
  29579. selector: "theClass:",
  29580. protocol: 'accessing',
  29581. fn: function (aClass){
  29582. var self=this;
  29583. self["@theClass"]=aClass;
  29584. return self;
  29585. },
  29586. //>>excludeStart("ide", pragmas.excludeIdeData);
  29587. args: ["aClass"],
  29588. source: "theClass: aClass\x0a\x09theClass := aClass",
  29589. referencedClasses: [],
  29590. //>>excludeEnd("ide");
  29591. messageSends: []
  29592. }),
  29593. $globals.ClassAnnouncement);
  29594. $core.addClass('ClassAdded', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  29595. //>>excludeStart("ide", pragmas.excludeIdeData);
  29596. $globals.ClassAdded.comment="I am emitted when a class is added to the system.\x0aSee ClassBuilder >> #addSubclassOf:... methods";
  29597. //>>excludeEnd("ide");
  29598. $core.addClass('ClassCommentChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  29599. //>>excludeStart("ide", pragmas.excludeIdeData);
  29600. $globals.ClassCommentChanged.comment="I am emitted when the comment of a class changes. (Behavior >> #comment)";
  29601. //>>excludeEnd("ide");
  29602. $core.addClass('ClassDefinitionChanged', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  29603. //>>excludeStart("ide", pragmas.excludeIdeData);
  29604. $globals.ClassDefinitionChanged.comment="I am emitted when the definition of a class changes.\x0aSee ClassBuilder >> #class:instanceVariableNames:";
  29605. //>>excludeEnd("ide");
  29606. $core.addClass('ClassMigrated', $globals.ClassAnnouncement, ['oldClass'], 'Kernel-Announcements');
  29607. //>>excludeStart("ide", pragmas.excludeIdeData);
  29608. $globals.ClassMigrated.comment="I am emitted when a class is migrated.";
  29609. //>>excludeEnd("ide");
  29610. $core.addMethod(
  29611. $core.method({
  29612. selector: "oldClass",
  29613. protocol: 'accessing',
  29614. fn: function (){
  29615. var self=this;
  29616. var $1;
  29617. $1=self["@oldClass"];
  29618. return $1;
  29619. },
  29620. //>>excludeStart("ide", pragmas.excludeIdeData);
  29621. args: [],
  29622. source: "oldClass\x0a\x09^ oldClass",
  29623. referencedClasses: [],
  29624. //>>excludeEnd("ide");
  29625. messageSends: []
  29626. }),
  29627. $globals.ClassMigrated);
  29628. $core.addMethod(
  29629. $core.method({
  29630. selector: "oldClass:",
  29631. protocol: 'accessing',
  29632. fn: function (aClass){
  29633. var self=this;
  29634. self["@oldClass"]=aClass;
  29635. return self;
  29636. },
  29637. //>>excludeStart("ide", pragmas.excludeIdeData);
  29638. args: ["aClass"],
  29639. source: "oldClass: aClass\x0a\x09oldClass := aClass",
  29640. referencedClasses: [],
  29641. //>>excludeEnd("ide");
  29642. messageSends: []
  29643. }),
  29644. $globals.ClassMigrated);
  29645. $core.addClass('ClassMoved', $globals.ClassAnnouncement, ['oldPackage'], 'Kernel-Announcements');
  29646. //>>excludeStart("ide", pragmas.excludeIdeData);
  29647. $globals.ClassMoved.comment="I am emitted when a class is moved from one package to another.";
  29648. //>>excludeEnd("ide");
  29649. $core.addMethod(
  29650. $core.method({
  29651. selector: "oldPackage",
  29652. protocol: 'accessing',
  29653. fn: function (){
  29654. var self=this;
  29655. var $1;
  29656. $1=self["@oldPackage"];
  29657. return $1;
  29658. },
  29659. //>>excludeStart("ide", pragmas.excludeIdeData);
  29660. args: [],
  29661. source: "oldPackage\x0a\x09^ oldPackage",
  29662. referencedClasses: [],
  29663. //>>excludeEnd("ide");
  29664. messageSends: []
  29665. }),
  29666. $globals.ClassMoved);
  29667. $core.addMethod(
  29668. $core.method({
  29669. selector: "oldPackage:",
  29670. protocol: 'accessing',
  29671. fn: function (aPackage){
  29672. var self=this;
  29673. self["@oldPackage"]=aPackage;
  29674. return self;
  29675. },
  29676. //>>excludeStart("ide", pragmas.excludeIdeData);
  29677. args: ["aPackage"],
  29678. source: "oldPackage: aPackage\x0a\x09oldPackage := aPackage",
  29679. referencedClasses: [],
  29680. //>>excludeEnd("ide");
  29681. messageSends: []
  29682. }),
  29683. $globals.ClassMoved);
  29684. $core.addClass('ClassRemoved', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  29685. //>>excludeStart("ide", pragmas.excludeIdeData);
  29686. $globals.ClassRemoved.comment="I am emitted when a class is removed.\x0aSee Smalltalk >> #removeClass:";
  29687. //>>excludeEnd("ide");
  29688. $core.addClass('ClassRenamed', $globals.ClassAnnouncement, [], 'Kernel-Announcements');
  29689. //>>excludeStart("ide", pragmas.excludeIdeData);
  29690. $globals.ClassRenamed.comment="I am emitted when a class is renamed.\x0aSee ClassBuilder >> #renameClass:to:";
  29691. //>>excludeEnd("ide");
  29692. $core.addClass('MethodAnnouncement', $globals.SystemAnnouncement, ['method'], 'Kernel-Announcements');
  29693. //>>excludeStart("ide", pragmas.excludeIdeData);
  29694. $globals.MethodAnnouncement.comment="I am the abstract superclass of method-related announcements.";
  29695. //>>excludeEnd("ide");
  29696. $core.addMethod(
  29697. $core.method({
  29698. selector: "method",
  29699. protocol: 'accessing',
  29700. fn: function (){
  29701. var self=this;
  29702. var $1;
  29703. $1=self["@method"];
  29704. return $1;
  29705. },
  29706. //>>excludeStart("ide", pragmas.excludeIdeData);
  29707. args: [],
  29708. source: "method\x0a\x09^ method",
  29709. referencedClasses: [],
  29710. //>>excludeEnd("ide");
  29711. messageSends: []
  29712. }),
  29713. $globals.MethodAnnouncement);
  29714. $core.addMethod(
  29715. $core.method({
  29716. selector: "method:",
  29717. protocol: 'accessing',
  29718. fn: function (aCompiledMethod){
  29719. var self=this;
  29720. self["@method"]=aCompiledMethod;
  29721. return self;
  29722. },
  29723. //>>excludeStart("ide", pragmas.excludeIdeData);
  29724. args: ["aCompiledMethod"],
  29725. source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
  29726. referencedClasses: [],
  29727. //>>excludeEnd("ide");
  29728. messageSends: []
  29729. }),
  29730. $globals.MethodAnnouncement);
  29731. $core.addClass('MethodAdded', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  29732. //>>excludeStart("ide", pragmas.excludeIdeData);
  29733. $globals.MethodAdded.comment="I am emitted when a `CompiledMethod` is added to a class.";
  29734. //>>excludeEnd("ide");
  29735. $core.addClass('MethodModified', $globals.MethodAnnouncement, ['oldMethod'], 'Kernel-Announcements');
  29736. //>>excludeStart("ide", pragmas.excludeIdeData);
  29737. $globals.MethodModified.comment="I am emitted when a `CompiledMethod` is modified (a new method is installed). I hold a reference to the old method being replaced.";
  29738. //>>excludeEnd("ide");
  29739. $core.addMethod(
  29740. $core.method({
  29741. selector: "oldMethod",
  29742. protocol: 'accessing',
  29743. fn: function (){
  29744. var self=this;
  29745. var $1;
  29746. $1=self["@oldMethod"];
  29747. return $1;
  29748. },
  29749. //>>excludeStart("ide", pragmas.excludeIdeData);
  29750. args: [],
  29751. source: "oldMethod\x0a\x09^ oldMethod",
  29752. referencedClasses: [],
  29753. //>>excludeEnd("ide");
  29754. messageSends: []
  29755. }),
  29756. $globals.MethodModified);
  29757. $core.addMethod(
  29758. $core.method({
  29759. selector: "oldMethod:",
  29760. protocol: 'accessing',
  29761. fn: function (aMethod){
  29762. var self=this;
  29763. self["@oldMethod"]=aMethod;
  29764. return self;
  29765. },
  29766. //>>excludeStart("ide", pragmas.excludeIdeData);
  29767. args: ["aMethod"],
  29768. source: "oldMethod: aMethod\x0a\x09oldMethod := aMethod",
  29769. referencedClasses: [],
  29770. //>>excludeEnd("ide");
  29771. messageSends: []
  29772. }),
  29773. $globals.MethodModified);
  29774. $core.addClass('MethodMoved', $globals.MethodAnnouncement, ['oldProtocol'], 'Kernel-Announcements');
  29775. //>>excludeStart("ide", pragmas.excludeIdeData);
  29776. $globals.MethodMoved.comment="I am emitted when a `CompiledMethod` is moved to another protocol. I hold a refernce to the old protocol of the method.";
  29777. //>>excludeEnd("ide");
  29778. $core.addMethod(
  29779. $core.method({
  29780. selector: "oldProtocol",
  29781. protocol: 'accessing',
  29782. fn: function (){
  29783. var self=this;
  29784. var $1;
  29785. $1=self["@oldProtocol"];
  29786. return $1;
  29787. },
  29788. //>>excludeStart("ide", pragmas.excludeIdeData);
  29789. args: [],
  29790. source: "oldProtocol\x0a\x09^ oldProtocol",
  29791. referencedClasses: [],
  29792. //>>excludeEnd("ide");
  29793. messageSends: []
  29794. }),
  29795. $globals.MethodMoved);
  29796. $core.addMethod(
  29797. $core.method({
  29798. selector: "oldProtocol:",
  29799. protocol: 'accessing',
  29800. fn: function (aString){
  29801. var self=this;
  29802. self["@oldProtocol"]=aString;
  29803. return self;
  29804. },
  29805. //>>excludeStart("ide", pragmas.excludeIdeData);
  29806. args: ["aString"],
  29807. source: "oldProtocol: aString\x0a\x09oldProtocol := aString",
  29808. referencedClasses: [],
  29809. //>>excludeEnd("ide");
  29810. messageSends: []
  29811. }),
  29812. $globals.MethodMoved);
  29813. $core.addClass('MethodRemoved', $globals.MethodAnnouncement, [], 'Kernel-Announcements');
  29814. //>>excludeStart("ide", pragmas.excludeIdeData);
  29815. $globals.MethodRemoved.comment="I am emitted when a `CompiledMethod` is removed from a class.";
  29816. //>>excludeEnd("ide");
  29817. $core.addClass('PackageAnnouncement', $globals.SystemAnnouncement, ['package'], 'Kernel-Announcements');
  29818. //>>excludeStart("ide", pragmas.excludeIdeData);
  29819. $globals.PackageAnnouncement.comment="I am the abstract superclass of package-related announcements.";
  29820. //>>excludeEnd("ide");
  29821. $core.addMethod(
  29822. $core.method({
  29823. selector: "package",
  29824. protocol: 'accessing',
  29825. fn: function (){
  29826. var self=this;
  29827. var $1;
  29828. $1=self["@package"];
  29829. return $1;
  29830. },
  29831. //>>excludeStart("ide", pragmas.excludeIdeData);
  29832. args: [],
  29833. source: "package\x0a\x09^ package",
  29834. referencedClasses: [],
  29835. //>>excludeEnd("ide");
  29836. messageSends: []
  29837. }),
  29838. $globals.PackageAnnouncement);
  29839. $core.addMethod(
  29840. $core.method({
  29841. selector: "package:",
  29842. protocol: 'accessing',
  29843. fn: function (aPackage){
  29844. var self=this;
  29845. self["@package"]=aPackage;
  29846. return self;
  29847. },
  29848. //>>excludeStart("ide", pragmas.excludeIdeData);
  29849. args: ["aPackage"],
  29850. source: "package: aPackage\x0a\x09package := aPackage",
  29851. referencedClasses: [],
  29852. //>>excludeEnd("ide");
  29853. messageSends: []
  29854. }),
  29855. $globals.PackageAnnouncement);
  29856. $core.addClass('PackageAdded', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  29857. //>>excludeStart("ide", pragmas.excludeIdeData);
  29858. $globals.PackageAdded.comment="I am emitted when a `Package` is added to the system.";
  29859. //>>excludeEnd("ide");
  29860. $core.addClass('PackageClean', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  29861. //>>excludeStart("ide", pragmas.excludeIdeData);
  29862. $globals.PackageClean.comment="I am emitted when a package is committed and becomes clean.";
  29863. //>>excludeEnd("ide");
  29864. $core.addClass('PackageDirty', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  29865. //>>excludeStart("ide", pragmas.excludeIdeData);
  29866. $globals.PackageDirty.comment="I am emitted when a package becomes dirty.";
  29867. //>>excludeEnd("ide");
  29868. $core.addClass('PackageRemoved', $globals.PackageAnnouncement, [], 'Kernel-Announcements');
  29869. //>>excludeStart("ide", pragmas.excludeIdeData);
  29870. $globals.PackageRemoved.comment="I am emitted when a `Package` is removed from the system.";
  29871. //>>excludeEnd("ide");
  29872. $core.addClass('ProtocolAnnouncement', $globals.SystemAnnouncement, ['theClass', 'protocol'], 'Kernel-Announcements');
  29873. //>>excludeStart("ide", pragmas.excludeIdeData);
  29874. $globals.ProtocolAnnouncement.comment="I am the abstract superclass of protocol-related announcements.";
  29875. //>>excludeEnd("ide");
  29876. $core.addMethod(
  29877. $core.method({
  29878. selector: "package",
  29879. protocol: 'accessing',
  29880. fn: function (){
  29881. var self=this;
  29882. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  29883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29884. return $core.withContext(function($ctx1) {
  29885. //>>excludeEnd("ctx");
  29886. var $2,$1,$3,$4;
  29887. $2=self._protocol();
  29888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29889. $ctx1.sendIdx["protocol"]=1;
  29890. //>>excludeEnd("ctx");
  29891. $1=$recv($2)._beginsWith_("*");
  29892. if(!$core.assert($1)){
  29893. $3=$recv(self._theClass())._package();
  29894. return $3;
  29895. };
  29896. $4=$recv($Package())._named_ifAbsent_($recv(self._protocol())._allButFirst(),(function(){
  29897. return nil;
  29898. }));
  29899. return $4;
  29900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  29901. }, function($ctx1) {$ctx1.fill(self,"package",{},$globals.ProtocolAnnouncement)});
  29902. //>>excludeEnd("ctx");
  29903. },
  29904. //>>excludeStart("ide", pragmas.excludeIdeData);
  29905. args: [],
  29906. source: "package\x0a\x0a\x09(self protocol beginsWith: '*') ifFalse: [\x0a\x09\x09^ self theClass package ].\x0a\x09\x09\x0a\x09^ Package \x0a\x09\x09named: self protocol allButFirst\x0a\x09\x09ifAbsent: [ nil ]",
  29907. referencedClasses: ["Package"],
  29908. //>>excludeEnd("ide");
  29909. messageSends: ["ifFalse:", "beginsWith:", "protocol", "package", "theClass", "named:ifAbsent:", "allButFirst"]
  29910. }),
  29911. $globals.ProtocolAnnouncement);
  29912. $core.addMethod(
  29913. $core.method({
  29914. selector: "protocol",
  29915. protocol: 'accessing',
  29916. fn: function (){
  29917. var self=this;
  29918. var $1;
  29919. $1=self["@protocol"];
  29920. return $1;
  29921. },
  29922. //>>excludeStart("ide", pragmas.excludeIdeData);
  29923. args: [],
  29924. source: "protocol\x0a\x09^ protocol",
  29925. referencedClasses: [],
  29926. //>>excludeEnd("ide");
  29927. messageSends: []
  29928. }),
  29929. $globals.ProtocolAnnouncement);
  29930. $core.addMethod(
  29931. $core.method({
  29932. selector: "protocol:",
  29933. protocol: 'accessing',
  29934. fn: function (aString){
  29935. var self=this;
  29936. self["@protocol"]=aString;
  29937. return self;
  29938. },
  29939. //>>excludeStart("ide", pragmas.excludeIdeData);
  29940. args: ["aString"],
  29941. source: "protocol: aString\x0a\x09protocol := aString",
  29942. referencedClasses: [],
  29943. //>>excludeEnd("ide");
  29944. messageSends: []
  29945. }),
  29946. $globals.ProtocolAnnouncement);
  29947. $core.addMethod(
  29948. $core.method({
  29949. selector: "theClass",
  29950. protocol: 'accessing',
  29951. fn: function (){
  29952. var self=this;
  29953. var $1;
  29954. $1=self["@theClass"];
  29955. return $1;
  29956. },
  29957. //>>excludeStart("ide", pragmas.excludeIdeData);
  29958. args: [],
  29959. source: "theClass\x0a\x09^ theClass",
  29960. referencedClasses: [],
  29961. //>>excludeEnd("ide");
  29962. messageSends: []
  29963. }),
  29964. $globals.ProtocolAnnouncement);
  29965. $core.addMethod(
  29966. $core.method({
  29967. selector: "theClass:",
  29968. protocol: 'accessing',
  29969. fn: function (aClass){
  29970. var self=this;
  29971. self["@theClass"]=aClass;
  29972. return self;
  29973. },
  29974. //>>excludeStart("ide", pragmas.excludeIdeData);
  29975. args: ["aClass"],
  29976. source: "theClass: aClass\x0a\x09theClass := aClass",
  29977. referencedClasses: [],
  29978. //>>excludeEnd("ide");
  29979. messageSends: []
  29980. }),
  29981. $globals.ProtocolAnnouncement);
  29982. $core.addClass('ProtocolAdded', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  29983. //>>excludeStart("ide", pragmas.excludeIdeData);
  29984. $globals.ProtocolAdded.comment="I am emitted when a protocol is added to a class.";
  29985. //>>excludeEnd("ide");
  29986. $core.addClass('ProtocolRemoved', $globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  29987. //>>excludeStart("ide", pragmas.excludeIdeData);
  29988. $globals.ProtocolRemoved.comment="I am emitted when a protocol is removed from a class.";
  29989. //>>excludeEnd("ide");
  29990. });
  29991. define("amber_core/Compiler-Exceptions", ["amber/boot", "amber_core/Kernel-Exceptions", "amber_core/Kernel-Objects"], function($boot){
  29992. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  29993. var smalltalk=$core,_st=$recv,globals=$globals;
  29994. $core.addPackage('Compiler-Exceptions');
  29995. $core.packages["Compiler-Exceptions"].transport = {"type":"amd","amdNamespace":"amber_core"};
  29996. $core.addClass('CompilerError', $globals.Error, [], 'Compiler-Exceptions');
  29997. //>>excludeStart("ide", pragmas.excludeIdeData);
  29998. $globals.CompilerError.comment="I am the common superclass of all compiling errors.";
  29999. //>>excludeEnd("ide");
  30000. $core.addClass('ParseError', $globals.CompilerError, [], 'Compiler-Exceptions');
  30001. //>>excludeStart("ide", pragmas.excludeIdeData);
  30002. $globals.ParseError.comment="Instance of ParseError are signaled on any parsing error.\x0aSee `Smalltalk >> #parse:`";
  30003. //>>excludeEnd("ide");
  30004. $core.addClass('SemanticError', $globals.CompilerError, [], 'Compiler-Exceptions');
  30005. //>>excludeStart("ide", pragmas.excludeIdeData);
  30006. $globals.SemanticError.comment="I represent an abstract semantic error thrown by the SemanticAnalyzer.\x0aSemantic errors can be unknown variable errors, etc.\x0aSee my subclasses for concrete errors.\x0a\x0aThe IDE should catch instances of Semantic error to deal with them when compiling";
  30007. //>>excludeEnd("ide");
  30008. $core.addClass('InliningError', $globals.SemanticError, [], 'Compiler-Exceptions');
  30009. //>>excludeStart("ide", pragmas.excludeIdeData);
  30010. $globals.InliningError.comment="Instances of InliningError are signaled when using an `InliningCodeGenerator`in a `Compiler`.";
  30011. //>>excludeEnd("ide");
  30012. $core.addClass('InvalidAssignmentError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30013. //>>excludeStart("ide", pragmas.excludeIdeData);
  30014. $globals.InvalidAssignmentError.comment="I get signaled when a pseudo variable gets assigned.";
  30015. //>>excludeEnd("ide");
  30016. $core.addMethod(
  30017. $core.method({
  30018. selector: "messageText",
  30019. protocol: 'accessing',
  30020. fn: function (){
  30021. var self=this;
  30022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30023. return $core.withContext(function($ctx1) {
  30024. //>>excludeEnd("ctx");
  30025. var $1;
  30026. $1=" Invalid assignment to variable: ".__comma(self._variableName());
  30027. return $1;
  30028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30029. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.InvalidAssignmentError)});
  30030. //>>excludeEnd("ctx");
  30031. },
  30032. //>>excludeStart("ide", pragmas.excludeIdeData);
  30033. args: [],
  30034. source: "messageText\x0a\x09^ ' Invalid assignment to variable: ', self variableName",
  30035. referencedClasses: [],
  30036. //>>excludeEnd("ide");
  30037. messageSends: [",", "variableName"]
  30038. }),
  30039. $globals.InvalidAssignmentError);
  30040. $core.addMethod(
  30041. $core.method({
  30042. selector: "variableName",
  30043. protocol: 'accessing',
  30044. fn: function (){
  30045. var self=this;
  30046. var $1;
  30047. $1=self["@variableName"];
  30048. return $1;
  30049. },
  30050. //>>excludeStart("ide", pragmas.excludeIdeData);
  30051. args: [],
  30052. source: "variableName\x0a\x09^ variableName",
  30053. referencedClasses: [],
  30054. //>>excludeEnd("ide");
  30055. messageSends: []
  30056. }),
  30057. $globals.InvalidAssignmentError);
  30058. $core.addMethod(
  30059. $core.method({
  30060. selector: "variableName:",
  30061. protocol: 'accessing',
  30062. fn: function (aString){
  30063. var self=this;
  30064. self["@variableName"]=aString;
  30065. return self;
  30066. },
  30067. //>>excludeStart("ide", pragmas.excludeIdeData);
  30068. args: ["aString"],
  30069. source: "variableName: aString\x0a\x09variableName := aString",
  30070. referencedClasses: [],
  30071. //>>excludeEnd("ide");
  30072. messageSends: []
  30073. }),
  30074. $globals.InvalidAssignmentError);
  30075. $core.addClass('ShadowingVariableError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30076. //>>excludeStart("ide", pragmas.excludeIdeData);
  30077. $globals.ShadowingVariableError.comment="I get signaled when a variable in a block or method scope shadows a variable of the same name in an outer scope.";
  30078. //>>excludeEnd("ide");
  30079. $core.addMethod(
  30080. $core.method({
  30081. selector: "messageText",
  30082. protocol: 'accessing',
  30083. fn: function (){
  30084. var self=this;
  30085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30086. return $core.withContext(function($ctx1) {
  30087. //>>excludeEnd("ctx");
  30088. var $1;
  30089. $1=$recv("Variable shadowing error: ".__comma(self._variableName())).__comma(" is already defined");
  30090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30091. $ctx1.sendIdx[","]=1;
  30092. //>>excludeEnd("ctx");
  30093. return $1;
  30094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30095. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.ShadowingVariableError)});
  30096. //>>excludeEnd("ctx");
  30097. },
  30098. //>>excludeStart("ide", pragmas.excludeIdeData);
  30099. args: [],
  30100. source: "messageText\x0a\x09^ 'Variable shadowing error: ', self variableName, ' is already defined'",
  30101. referencedClasses: [],
  30102. //>>excludeEnd("ide");
  30103. messageSends: [",", "variableName"]
  30104. }),
  30105. $globals.ShadowingVariableError);
  30106. $core.addMethod(
  30107. $core.method({
  30108. selector: "variableName",
  30109. protocol: 'accessing',
  30110. fn: function (){
  30111. var self=this;
  30112. var $1;
  30113. $1=self["@variableName"];
  30114. return $1;
  30115. },
  30116. //>>excludeStart("ide", pragmas.excludeIdeData);
  30117. args: [],
  30118. source: "variableName\x0a\x09^ variableName",
  30119. referencedClasses: [],
  30120. //>>excludeEnd("ide");
  30121. messageSends: []
  30122. }),
  30123. $globals.ShadowingVariableError);
  30124. $core.addMethod(
  30125. $core.method({
  30126. selector: "variableName:",
  30127. protocol: 'accessing',
  30128. fn: function (aString){
  30129. var self=this;
  30130. self["@variableName"]=aString;
  30131. return self;
  30132. },
  30133. //>>excludeStart("ide", pragmas.excludeIdeData);
  30134. args: ["aString"],
  30135. source: "variableName: aString\x0a\x09variableName := aString",
  30136. referencedClasses: [],
  30137. //>>excludeEnd("ide");
  30138. messageSends: []
  30139. }),
  30140. $globals.ShadowingVariableError);
  30141. $core.addClass('UnknownVariableError', $globals.SemanticError, ['variableName'], 'Compiler-Exceptions');
  30142. //>>excludeStart("ide", pragmas.excludeIdeData);
  30143. $globals.UnknownVariableError.comment="I get signaled when a variable is not defined.\x0aThe default behavior is to allow it, as this is how Amber currently is able to seamlessly send messages to JavaScript objects.";
  30144. //>>excludeEnd("ide");
  30145. $core.addMethod(
  30146. $core.method({
  30147. selector: "messageText",
  30148. protocol: 'accessing',
  30149. fn: function (){
  30150. var self=this;
  30151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30152. return $core.withContext(function($ctx1) {
  30153. //>>excludeEnd("ctx");
  30154. var $1;
  30155. $1=$recv("Unknown Variable error: ".__comma(self._variableName())).__comma(" is not defined");
  30156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30157. $ctx1.sendIdx[","]=1;
  30158. //>>excludeEnd("ctx");
  30159. return $1;
  30160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30161. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.UnknownVariableError)});
  30162. //>>excludeEnd("ctx");
  30163. },
  30164. //>>excludeStart("ide", pragmas.excludeIdeData);
  30165. args: [],
  30166. source: "messageText\x0a\x09^ 'Unknown Variable error: ', self variableName, ' is not defined'",
  30167. referencedClasses: [],
  30168. //>>excludeEnd("ide");
  30169. messageSends: [",", "variableName"]
  30170. }),
  30171. $globals.UnknownVariableError);
  30172. $core.addMethod(
  30173. $core.method({
  30174. selector: "variableName",
  30175. protocol: 'accessing',
  30176. fn: function (){
  30177. var self=this;
  30178. var $1;
  30179. $1=self["@variableName"];
  30180. return $1;
  30181. },
  30182. //>>excludeStart("ide", pragmas.excludeIdeData);
  30183. args: [],
  30184. source: "variableName\x0a\x09^ variableName",
  30185. referencedClasses: [],
  30186. //>>excludeEnd("ide");
  30187. messageSends: []
  30188. }),
  30189. $globals.UnknownVariableError);
  30190. $core.addMethod(
  30191. $core.method({
  30192. selector: "variableName:",
  30193. protocol: 'accessing',
  30194. fn: function (aString){
  30195. var self=this;
  30196. self["@variableName"]=aString;
  30197. return self;
  30198. },
  30199. //>>excludeStart("ide", pragmas.excludeIdeData);
  30200. args: ["aString"],
  30201. source: "variableName: aString\x0a\x09variableName := aString",
  30202. referencedClasses: [],
  30203. //>>excludeEnd("ide");
  30204. messageSends: []
  30205. }),
  30206. $globals.UnknownVariableError);
  30207. $core.addClass('RethrowErrorHandler', $globals.Object, [], 'Compiler-Exceptions');
  30208. //>>excludeStart("ide", pragmas.excludeIdeData);
  30209. $globals.RethrowErrorHandler.comment="This class is used in the commandline version of the compiler.\x0aIt uses the handleError: message of ErrorHandler for printing the stacktrace and throws the error again as JS exception.\x0aAs a result Smalltalk errors are not swallowd by the Amber runtime and compilation can be aborted.";
  30210. //>>excludeEnd("ide");
  30211. $core.addMethod(
  30212. $core.method({
  30213. selector: "basicSignal:",
  30214. protocol: 'error handling',
  30215. fn: function (anError){
  30216. var self=this;
  30217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30218. return $core.withContext(function($ctx1) {
  30219. //>>excludeEnd("ctx");
  30220. throw anError;
  30221. return self;
  30222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30223. }, function($ctx1) {$ctx1.fill(self,"basicSignal:",{anError:anError},$globals.RethrowErrorHandler)});
  30224. //>>excludeEnd("ctx");
  30225. },
  30226. //>>excludeStart("ide", pragmas.excludeIdeData);
  30227. args: ["anError"],
  30228. source: "basicSignal: anError\x0a <throw anError>",
  30229. referencedClasses: [],
  30230. //>>excludeEnd("ide");
  30231. messageSends: []
  30232. }),
  30233. $globals.RethrowErrorHandler);
  30234. $core.addMethod(
  30235. $core.method({
  30236. selector: "handleError:",
  30237. protocol: 'error handling',
  30238. fn: function (anError){
  30239. var self=this;
  30240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30241. return $core.withContext(function($ctx1) {
  30242. //>>excludeEnd("ctx");
  30243. self._basicSignal_(anError);
  30244. return self;
  30245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30246. }, function($ctx1) {$ctx1.fill(self,"handleError:",{anError:anError},$globals.RethrowErrorHandler)});
  30247. //>>excludeEnd("ctx");
  30248. },
  30249. //>>excludeStart("ide", pragmas.excludeIdeData);
  30250. args: ["anError"],
  30251. source: "handleError: anError\x0a self basicSignal: anError",
  30252. referencedClasses: [],
  30253. //>>excludeEnd("ide");
  30254. messageSends: ["basicSignal:"]
  30255. }),
  30256. $globals.RethrowErrorHandler);
  30257. });
  30258. define("amber_core/Compiler-Core", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Infrastructure", "amber_core/Kernel-Collections"], function($boot){
  30259. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  30260. var smalltalk=$core,_st=$recv,globals=$globals;
  30261. $core.addPackage('Compiler-Core');
  30262. $core.packages["Compiler-Core"].transport = {"type":"amd","amdNamespace":"amber_core"};
  30263. $core.addClass('AbstractCodeGenerator', $globals.Object, ['currentClass', 'source'], 'Compiler-Core');
  30264. //>>excludeStart("ide", pragmas.excludeIdeData);
  30265. $globals.AbstractCodeGenerator.comment="I am the abstract super class of all code generators and provide their common API.";
  30266. //>>excludeEnd("ide");
  30267. $core.addMethod(
  30268. $core.method({
  30269. selector: "classNameFor:",
  30270. protocol: 'accessing',
  30271. fn: function (aClass){
  30272. var self=this;
  30273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30274. return $core.withContext(function($ctx1) {
  30275. //>>excludeEnd("ctx");
  30276. var $2,$3,$4,$1;
  30277. $2=$recv(aClass)._isMetaclass();
  30278. if($core.assert($2)){
  30279. $3=$recv($recv(aClass)._instanceClass())._name();
  30280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30281. $ctx1.sendIdx["name"]=1;
  30282. //>>excludeEnd("ctx");
  30283. $1=$recv($3).__comma(".klass");
  30284. } else {
  30285. $4=$recv(aClass)._isNil();
  30286. if($core.assert($4)){
  30287. $1="nil";
  30288. } else {
  30289. $1=$recv(aClass)._name();
  30290. };
  30291. };
  30292. return $1;
  30293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30294. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},$globals.AbstractCodeGenerator)});
  30295. //>>excludeEnd("ctx");
  30296. },
  30297. //>>excludeStart("ide", pragmas.excludeIdeData);
  30298. args: ["aClass"],
  30299. source: "classNameFor: aClass\x0a\x09^ aClass isMetaclass\x0a\x09\x09ifTrue: [ aClass instanceClass name, '.klass' ]\x0a\x09\x09ifFalse: [\x0a\x09\x09aClass isNil\x0a\x09\x09\x09ifTrue: [ 'nil' ]\x0a\x09\x09\x09ifFalse: [ aClass name ]]",
  30300. referencedClasses: [],
  30301. //>>excludeEnd("ide");
  30302. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"]
  30303. }),
  30304. $globals.AbstractCodeGenerator);
  30305. $core.addMethod(
  30306. $core.method({
  30307. selector: "compileNode:",
  30308. protocol: 'compiling',
  30309. fn: function (aNode){
  30310. var self=this;
  30311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30312. return $core.withContext(function($ctx1) {
  30313. //>>excludeEnd("ctx");
  30314. self._subclassResponsibility();
  30315. return self;
  30316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30317. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode},$globals.AbstractCodeGenerator)});
  30318. //>>excludeEnd("ctx");
  30319. },
  30320. //>>excludeStart("ide", pragmas.excludeIdeData);
  30321. args: ["aNode"],
  30322. source: "compileNode: aNode\x0a\x09self subclassResponsibility",
  30323. referencedClasses: [],
  30324. //>>excludeEnd("ide");
  30325. messageSends: ["subclassResponsibility"]
  30326. }),
  30327. $globals.AbstractCodeGenerator);
  30328. $core.addMethod(
  30329. $core.method({
  30330. selector: "currentClass",
  30331. protocol: 'accessing',
  30332. fn: function (){
  30333. var self=this;
  30334. var $1;
  30335. $1=self["@currentClass"];
  30336. return $1;
  30337. },
  30338. //>>excludeStart("ide", pragmas.excludeIdeData);
  30339. args: [],
  30340. source: "currentClass\x0a\x09^ currentClass",
  30341. referencedClasses: [],
  30342. //>>excludeEnd("ide");
  30343. messageSends: []
  30344. }),
  30345. $globals.AbstractCodeGenerator);
  30346. $core.addMethod(
  30347. $core.method({
  30348. selector: "currentClass:",
  30349. protocol: 'accessing',
  30350. fn: function (aClass){
  30351. var self=this;
  30352. self["@currentClass"]=aClass;
  30353. return self;
  30354. },
  30355. //>>excludeStart("ide", pragmas.excludeIdeData);
  30356. args: ["aClass"],
  30357. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  30358. referencedClasses: [],
  30359. //>>excludeEnd("ide");
  30360. messageSends: []
  30361. }),
  30362. $globals.AbstractCodeGenerator);
  30363. $core.addMethod(
  30364. $core.method({
  30365. selector: "pseudoVariables",
  30366. protocol: 'accessing',
  30367. fn: function (){
  30368. var self=this;
  30369. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  30370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30371. return $core.withContext(function($ctx1) {
  30372. //>>excludeEnd("ctx");
  30373. var $1;
  30374. $1=$recv($Smalltalk())._pseudoVariableNames();
  30375. return $1;
  30376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30377. }, function($ctx1) {$ctx1.fill(self,"pseudoVariables",{},$globals.AbstractCodeGenerator)});
  30378. //>>excludeEnd("ctx");
  30379. },
  30380. //>>excludeStart("ide", pragmas.excludeIdeData);
  30381. args: [],
  30382. source: "pseudoVariables\x0a\x09^ Smalltalk pseudoVariableNames",
  30383. referencedClasses: ["Smalltalk"],
  30384. //>>excludeEnd("ide");
  30385. messageSends: ["pseudoVariableNames"]
  30386. }),
  30387. $globals.AbstractCodeGenerator);
  30388. $core.addMethod(
  30389. $core.method({
  30390. selector: "source",
  30391. protocol: 'accessing',
  30392. fn: function (){
  30393. var self=this;
  30394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30395. return $core.withContext(function($ctx1) {
  30396. //>>excludeEnd("ctx");
  30397. var $2,$1,$receiver;
  30398. $2=self["@source"];
  30399. if(($receiver = $2) == null || $receiver.isNil){
  30400. $1="";
  30401. } else {
  30402. $1=$2;
  30403. };
  30404. return $1;
  30405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30406. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.AbstractCodeGenerator)});
  30407. //>>excludeEnd("ctx");
  30408. },
  30409. //>>excludeStart("ide", pragmas.excludeIdeData);
  30410. args: [],
  30411. source: "source\x0a\x09^ source ifNil: [ '' ]",
  30412. referencedClasses: [],
  30413. //>>excludeEnd("ide");
  30414. messageSends: ["ifNil:"]
  30415. }),
  30416. $globals.AbstractCodeGenerator);
  30417. $core.addMethod(
  30418. $core.method({
  30419. selector: "source:",
  30420. protocol: 'accessing',
  30421. fn: function (aString){
  30422. var self=this;
  30423. self["@source"]=aString;
  30424. return self;
  30425. },
  30426. //>>excludeStart("ide", pragmas.excludeIdeData);
  30427. args: ["aString"],
  30428. source: "source: aString\x0a\x09source := aString",
  30429. referencedClasses: [],
  30430. //>>excludeEnd("ide");
  30431. messageSends: []
  30432. }),
  30433. $globals.AbstractCodeGenerator);
  30434. $core.addClass('CodeGenerator', $globals.AbstractCodeGenerator, [], 'Compiler-Core');
  30435. //>>excludeStart("ide", pragmas.excludeIdeData);
  30436. $globals.CodeGenerator.comment="I am a basic code generator. I generate a valid JavaScript output, but no not perform any inlining.\x0aSee `InliningCodeGenerator` for an optimized JavaScript code generation.";
  30437. //>>excludeEnd("ide");
  30438. $core.addMethod(
  30439. $core.method({
  30440. selector: "compileNode:",
  30441. protocol: 'compiling',
  30442. fn: function (aNode){
  30443. var self=this;
  30444. var ir,stream;
  30445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30446. return $core.withContext(function($ctx1) {
  30447. //>>excludeEnd("ctx");
  30448. var $2,$3,$1;
  30449. $recv(self._semanticAnalyzer())._visit_(aNode);
  30450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30451. $ctx1.sendIdx["visit:"]=1;
  30452. //>>excludeEnd("ctx");
  30453. ir=$recv(self._translator())._visit_(aNode);
  30454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30455. $ctx1.sendIdx["visit:"]=2;
  30456. //>>excludeEnd("ctx");
  30457. $2=self._irTranslator();
  30458. $recv($2)._currentClass_(self._currentClass());
  30459. $recv($2)._visit_(ir);
  30460. $3=$recv($2)._contents();
  30461. $1=$3;
  30462. return $1;
  30463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30464. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},$globals.CodeGenerator)});
  30465. //>>excludeEnd("ctx");
  30466. },
  30467. //>>excludeStart("ide", pragmas.excludeIdeData);
  30468. args: ["aNode"],
  30469. source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09^ self irTranslator\x0a\x09\x09currentClass: self currentClass;\x0a\x09\x09visit: ir;\x0a\x09\x09contents",
  30470. referencedClasses: [],
  30471. //>>excludeEnd("ide");
  30472. messageSends: ["visit:", "semanticAnalyzer", "translator", "currentClass:", "irTranslator", "currentClass", "contents"]
  30473. }),
  30474. $globals.CodeGenerator);
  30475. $core.addMethod(
  30476. $core.method({
  30477. selector: "irTranslator",
  30478. protocol: 'compiling',
  30479. fn: function (){
  30480. var self=this;
  30481. function $IRJSTranslator(){return $globals.IRJSTranslator||(typeof IRJSTranslator=="undefined"?nil:IRJSTranslator)}
  30482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30483. return $core.withContext(function($ctx1) {
  30484. //>>excludeEnd("ctx");
  30485. var $1;
  30486. $1=$recv($IRJSTranslator())._new();
  30487. return $1;
  30488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30489. }, function($ctx1) {$ctx1.fill(self,"irTranslator",{},$globals.CodeGenerator)});
  30490. //>>excludeEnd("ctx");
  30491. },
  30492. //>>excludeStart("ide", pragmas.excludeIdeData);
  30493. args: [],
  30494. source: "irTranslator\x0a\x09^ IRJSTranslator new",
  30495. referencedClasses: ["IRJSTranslator"],
  30496. //>>excludeEnd("ide");
  30497. messageSends: ["new"]
  30498. }),
  30499. $globals.CodeGenerator);
  30500. $core.addMethod(
  30501. $core.method({
  30502. selector: "semanticAnalyzer",
  30503. protocol: 'compiling',
  30504. fn: function (){
  30505. var self=this;
  30506. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  30507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30508. return $core.withContext(function($ctx1) {
  30509. //>>excludeEnd("ctx");
  30510. var $1;
  30511. $1=$recv($SemanticAnalyzer())._on_(self._currentClass());
  30512. return $1;
  30513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30514. }, function($ctx1) {$ctx1.fill(self,"semanticAnalyzer",{},$globals.CodeGenerator)});
  30515. //>>excludeEnd("ctx");
  30516. },
  30517. //>>excludeStart("ide", pragmas.excludeIdeData);
  30518. args: [],
  30519. source: "semanticAnalyzer\x0a\x09^ SemanticAnalyzer on: self currentClass",
  30520. referencedClasses: ["SemanticAnalyzer"],
  30521. //>>excludeEnd("ide");
  30522. messageSends: ["on:", "currentClass"]
  30523. }),
  30524. $globals.CodeGenerator);
  30525. $core.addMethod(
  30526. $core.method({
  30527. selector: "translator",
  30528. protocol: 'compiling',
  30529. fn: function (){
  30530. var self=this;
  30531. function $IRASTTranslator(){return $globals.IRASTTranslator||(typeof IRASTTranslator=="undefined"?nil:IRASTTranslator)}
  30532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30533. return $core.withContext(function($ctx1) {
  30534. //>>excludeEnd("ctx");
  30535. var $2,$3,$1;
  30536. $2=$recv($IRASTTranslator())._new();
  30537. $recv($2)._source_(self._source());
  30538. $recv($2)._theClass_(self._currentClass());
  30539. $3=$recv($2)._yourself();
  30540. $1=$3;
  30541. return $1;
  30542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30543. }, function($ctx1) {$ctx1.fill(self,"translator",{},$globals.CodeGenerator)});
  30544. //>>excludeEnd("ctx");
  30545. },
  30546. //>>excludeStart("ide", pragmas.excludeIdeData);
  30547. args: [],
  30548. source: "translator\x0a\x09^ IRASTTranslator new\x0a\x09\x09source: self source;\x0a\x09\x09theClass: self currentClass;\x0a\x09\x09yourself",
  30549. referencedClasses: ["IRASTTranslator"],
  30550. //>>excludeEnd("ide");
  30551. messageSends: ["source:", "new", "source", "theClass:", "currentClass", "yourself"]
  30552. }),
  30553. $globals.CodeGenerator);
  30554. $core.addClass('Compiler', $globals.Object, ['currentClass', 'source', 'unknownVariables', 'codeGeneratorClass'], 'Compiler-Core');
  30555. //>>excludeStart("ide", pragmas.excludeIdeData);
  30556. $globals.Compiler.comment="I provide the public interface for compiling Amber source code into JavaScript.\x0a\x0aThe code generator used to produce JavaScript can be plugged with `#codeGeneratorClass`.\x0aThe default code generator is an instance of `InlinedCodeGenerator`";
  30557. //>>excludeEnd("ide");
  30558. $core.addMethod(
  30559. $core.method({
  30560. selector: "codeGeneratorClass",
  30561. protocol: 'accessing',
  30562. fn: function (){
  30563. var self=this;
  30564. function $InliningCodeGenerator(){return $globals.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
  30565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30566. return $core.withContext(function($ctx1) {
  30567. //>>excludeEnd("ctx");
  30568. var $2,$1,$receiver;
  30569. $2=self["@codeGeneratorClass"];
  30570. if(($receiver = $2) == null || $receiver.isNil){
  30571. $1=$InliningCodeGenerator();
  30572. } else {
  30573. $1=$2;
  30574. };
  30575. return $1;
  30576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30577. }, function($ctx1) {$ctx1.fill(self,"codeGeneratorClass",{},$globals.Compiler)});
  30578. //>>excludeEnd("ctx");
  30579. },
  30580. //>>excludeStart("ide", pragmas.excludeIdeData);
  30581. args: [],
  30582. source: "codeGeneratorClass\x0a\x09^ codeGeneratorClass ifNil: [ InliningCodeGenerator ]",
  30583. referencedClasses: ["InliningCodeGenerator"],
  30584. //>>excludeEnd("ide");
  30585. messageSends: ["ifNil:"]
  30586. }),
  30587. $globals.Compiler);
  30588. $core.addMethod(
  30589. $core.method({
  30590. selector: "codeGeneratorClass:",
  30591. protocol: 'accessing',
  30592. fn: function (aClass){
  30593. var self=this;
  30594. self["@codeGeneratorClass"]=aClass;
  30595. return self;
  30596. },
  30597. //>>excludeStart("ide", pragmas.excludeIdeData);
  30598. args: ["aClass"],
  30599. source: "codeGeneratorClass: aClass\x0a\x09codeGeneratorClass := aClass",
  30600. referencedClasses: [],
  30601. //>>excludeEnd("ide");
  30602. messageSends: []
  30603. }),
  30604. $globals.Compiler);
  30605. $core.addMethod(
  30606. $core.method({
  30607. selector: "compile:",
  30608. protocol: 'compiling',
  30609. fn: function (aString){
  30610. var self=this;
  30611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30612. return $core.withContext(function($ctx1) {
  30613. //>>excludeEnd("ctx");
  30614. var $1;
  30615. $1=self._compileNode_(self._parse_(aString));
  30616. return $1;
  30617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30618. }, function($ctx1) {$ctx1.fill(self,"compile:",{aString:aString},$globals.Compiler)});
  30619. //>>excludeEnd("ctx");
  30620. },
  30621. //>>excludeStart("ide", pragmas.excludeIdeData);
  30622. args: ["aString"],
  30623. source: "compile: aString\x0a\x09^ self compileNode: (self parse: aString)",
  30624. referencedClasses: [],
  30625. //>>excludeEnd("ide");
  30626. messageSends: ["compileNode:", "parse:"]
  30627. }),
  30628. $globals.Compiler);
  30629. $core.addMethod(
  30630. $core.method({
  30631. selector: "compile:forClass:",
  30632. protocol: 'compiling',
  30633. fn: function (aString,aClass){
  30634. var self=this;
  30635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30636. return $core.withContext(function($ctx1) {
  30637. //>>excludeEnd("ctx");
  30638. var $1;
  30639. self._currentClass_(aClass);
  30640. self._source_(aString);
  30641. $1=self._compile_(aString);
  30642. return $1;
  30643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30644. }, function($ctx1) {$ctx1.fill(self,"compile:forClass:",{aString:aString,aClass:aClass},$globals.Compiler)});
  30645. //>>excludeEnd("ctx");
  30646. },
  30647. //>>excludeStart("ide", pragmas.excludeIdeData);
  30648. args: ["aString", "aClass"],
  30649. source: "compile: aString forClass: aClass\x0a\x09self currentClass: aClass.\x0a\x09self source: aString.\x0a\x09^ self compile: aString",
  30650. referencedClasses: [],
  30651. //>>excludeEnd("ide");
  30652. messageSends: ["currentClass:", "source:", "compile:"]
  30653. }),
  30654. $globals.Compiler);
  30655. $core.addMethod(
  30656. $core.method({
  30657. selector: "compileExpression:",
  30658. protocol: 'compiling',
  30659. fn: function (aString){
  30660. var self=this;
  30661. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  30662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30663. return $core.withContext(function($ctx1) {
  30664. //>>excludeEnd("ctx");
  30665. var $1,$2;
  30666. self._currentClass_($DoIt());
  30667. $1=$recv("doIt ^ [ ".__comma(aString)).__comma(" ] value");
  30668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30669. $ctx1.sendIdx[","]=1;
  30670. //>>excludeEnd("ctx");
  30671. self._source_($1);
  30672. $2=self._compileNode_(self._parse_(self._source()));
  30673. return $2;
  30674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30675. }, function($ctx1) {$ctx1.fill(self,"compileExpression:",{aString:aString},$globals.Compiler)});
  30676. //>>excludeEnd("ctx");
  30677. },
  30678. //>>excludeStart("ide", pragmas.excludeIdeData);
  30679. args: ["aString"],
  30680. source: "compileExpression: aString\x0a\x09self currentClass: DoIt.\x0a\x09self source: 'doIt ^ [ ', aString, ' ] value'.\x0a\x09^ self compileNode: (self parse: self source)",
  30681. referencedClasses: ["DoIt"],
  30682. //>>excludeEnd("ide");
  30683. messageSends: ["currentClass:", "source:", ",", "compileNode:", "parse:", "source"]
  30684. }),
  30685. $globals.Compiler);
  30686. $core.addMethod(
  30687. $core.method({
  30688. selector: "compileExpression:on:",
  30689. protocol: 'compiling',
  30690. fn: function (aString,anObject){
  30691. var self=this;
  30692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30693. return $core.withContext(function($ctx1) {
  30694. //>>excludeEnd("ctx");
  30695. var $1,$2;
  30696. self._currentClass_($recv(anObject)._class());
  30697. $1=$recv("xxxDoIt ^ [ ".__comma(aString)).__comma(" ] value");
  30698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30699. $ctx1.sendIdx[","]=1;
  30700. //>>excludeEnd("ctx");
  30701. self._source_($1);
  30702. $2=self._compileNode_(self._parse_(self._source()));
  30703. return $2;
  30704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30705. }, function($ctx1) {$ctx1.fill(self,"compileExpression:on:",{aString:aString,anObject:anObject},$globals.Compiler)});
  30706. //>>excludeEnd("ctx");
  30707. },
  30708. //>>excludeStart("ide", pragmas.excludeIdeData);
  30709. args: ["aString", "anObject"],
  30710. source: "compileExpression: aString on: anObject\x0a\x09self currentClass: anObject class.\x0a\x09self source: 'xxxDoIt ^ [ ', aString, ' ] value'.\x0a\x09^ self compileNode: (self parse: self source)",
  30711. referencedClasses: [],
  30712. //>>excludeEnd("ide");
  30713. messageSends: ["currentClass:", "class", "source:", ",", "compileNode:", "parse:", "source"]
  30714. }),
  30715. $globals.Compiler);
  30716. $core.addMethod(
  30717. $core.method({
  30718. selector: "compileNode:",
  30719. protocol: 'compiling',
  30720. fn: function (aNode){
  30721. var self=this;
  30722. var generator,result;
  30723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30724. return $core.withContext(function($ctx1) {
  30725. //>>excludeEnd("ctx");
  30726. var $1,$2,$3;
  30727. generator=$recv(self._codeGeneratorClass())._new();
  30728. $1=generator;
  30729. $recv($1)._source_(self._source());
  30730. $2=$recv($1)._currentClass_(self._currentClass());
  30731. result=$recv(generator)._compileNode_(aNode);
  30732. self._unknownVariables_([]);
  30733. $3=result;
  30734. return $3;
  30735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30736. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,generator:generator,result:result},$globals.Compiler)});
  30737. //>>excludeEnd("ctx");
  30738. },
  30739. //>>excludeStart("ide", pragmas.excludeIdeData);
  30740. args: ["aNode"],
  30741. source: "compileNode: aNode\x0a\x09| generator result |\x0a\x09generator := self codeGeneratorClass new.\x0a\x09generator\x0a\x09\x09source: self source;\x0a\x09\x09currentClass: self currentClass.\x0a\x09result := generator compileNode: aNode.\x0a\x09self unknownVariables: #().\x0a\x09^ result",
  30742. referencedClasses: [],
  30743. //>>excludeEnd("ide");
  30744. messageSends: ["new", "codeGeneratorClass", "source:", "source", "currentClass:", "currentClass", "compileNode:", "unknownVariables:"]
  30745. }),
  30746. $globals.Compiler);
  30747. $core.addMethod(
  30748. $core.method({
  30749. selector: "currentClass",
  30750. protocol: 'accessing',
  30751. fn: function (){
  30752. var self=this;
  30753. var $1;
  30754. $1=self["@currentClass"];
  30755. return $1;
  30756. },
  30757. //>>excludeStart("ide", pragmas.excludeIdeData);
  30758. args: [],
  30759. source: "currentClass\x0a\x09^ currentClass",
  30760. referencedClasses: [],
  30761. //>>excludeEnd("ide");
  30762. messageSends: []
  30763. }),
  30764. $globals.Compiler);
  30765. $core.addMethod(
  30766. $core.method({
  30767. selector: "currentClass:",
  30768. protocol: 'accessing',
  30769. fn: function (aClass){
  30770. var self=this;
  30771. self["@currentClass"]=aClass;
  30772. return self;
  30773. },
  30774. //>>excludeStart("ide", pragmas.excludeIdeData);
  30775. args: ["aClass"],
  30776. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  30777. referencedClasses: [],
  30778. //>>excludeEnd("ide");
  30779. messageSends: []
  30780. }),
  30781. $globals.Compiler);
  30782. $core.addMethod(
  30783. $core.method({
  30784. selector: "eval:",
  30785. protocol: 'compiling',
  30786. fn: function (aString){
  30787. var self=this;
  30788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30789. return $core.withContext(function($ctx1) {
  30790. //>>excludeEnd("ctx");
  30791. return eval(aString);
  30792. return self;
  30793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30794. }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString},$globals.Compiler)});
  30795. //>>excludeEnd("ctx");
  30796. },
  30797. //>>excludeStart("ide", pragmas.excludeIdeData);
  30798. args: ["aString"],
  30799. source: "eval: aString\x0a\x09<return eval(aString)>",
  30800. referencedClasses: [],
  30801. //>>excludeEnd("ide");
  30802. messageSends: []
  30803. }),
  30804. $globals.Compiler);
  30805. $core.addMethod(
  30806. $core.method({
  30807. selector: "evaluateExpression:",
  30808. protocol: 'compiling',
  30809. fn: function (aString){
  30810. var self=this;
  30811. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  30812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30813. return $core.withContext(function($ctx1) {
  30814. //>>excludeEnd("ctx");
  30815. var $1;
  30816. $1=self._evaluateExpression_on_(aString,$recv($DoIt())._new());
  30817. return $1;
  30818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30819. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:",{aString:aString},$globals.Compiler)});
  30820. //>>excludeEnd("ctx");
  30821. },
  30822. //>>excludeStart("ide", pragmas.excludeIdeData);
  30823. args: ["aString"],
  30824. source: "evaluateExpression: aString\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression and answer the returned object\x22\x0a\x09^ self evaluateExpression: aString on: DoIt new",
  30825. referencedClasses: ["DoIt"],
  30826. //>>excludeEnd("ide");
  30827. messageSends: ["evaluateExpression:on:", "new"]
  30828. }),
  30829. $globals.Compiler);
  30830. $core.addMethod(
  30831. $core.method({
  30832. selector: "evaluateExpression:on:",
  30833. protocol: 'compiling',
  30834. fn: function (aString,anObject){
  30835. var self=this;
  30836. var result,method;
  30837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30838. return $core.withContext(function($ctx1) {
  30839. //>>excludeEnd("ctx");
  30840. var $1,$2;
  30841. method=self._eval_(self._compileExpression_on_(aString,anObject));
  30842. $recv(method)._protocol_("**xxxDoIt");
  30843. $1=$recv(anObject)._class();
  30844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30845. $ctx1.sendIdx["class"]=1;
  30846. //>>excludeEnd("ctx");
  30847. $recv($1)._addCompiledMethod_(method);
  30848. result=$recv(anObject)._xxxDoIt();
  30849. $recv($recv(anObject)._class())._removeCompiledMethod_(method);
  30850. $2=result;
  30851. return $2;
  30852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30853. }, function($ctx1) {$ctx1.fill(self,"evaluateExpression:on:",{aString:aString,anObject:anObject,result:result,method:method},$globals.Compiler)});
  30854. //>>excludeEnd("ctx");
  30855. },
  30856. //>>excludeStart("ide", pragmas.excludeIdeData);
  30857. args: ["aString", "anObject"],
  30858. source: "evaluateExpression: aString on: anObject\x0a\x09\x22Unlike #eval: evaluate a Smalltalk expression with anObject as the receiver and answer the returned object\x22\x0a\x09| result method |\x0a\x09method := self eval: (self compileExpression: aString on: anObject).\x0a\x09method protocol: '**xxxDoIt'.\x0a\x09anObject class addCompiledMethod: method.\x0a\x09result := anObject xxxDoIt.\x0a\x09anObject class removeCompiledMethod: method.\x0a\x09^ result",
  30859. referencedClasses: [],
  30860. //>>excludeEnd("ide");
  30861. messageSends: ["eval:", "compileExpression:on:", "protocol:", "addCompiledMethod:", "class", "xxxDoIt", "removeCompiledMethod:"]
  30862. }),
  30863. $globals.Compiler);
  30864. $core.addMethod(
  30865. $core.method({
  30866. selector: "install:forClass:protocol:",
  30867. protocol: 'compiling',
  30868. fn: function (aString,aBehavior,anotherString){
  30869. var self=this;
  30870. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  30871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30872. return $core.withContext(function($ctx1) {
  30873. //>>excludeEnd("ctx");
  30874. var $1;
  30875. $1=$recv($recv($ClassBuilder())._new())._installMethod_forClass_protocol_(self._eval_(self._compile_forClass_(aString,aBehavior)),aBehavior,anotherString);
  30876. return $1;
  30877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30878. }, function($ctx1) {$ctx1.fill(self,"install:forClass:protocol:",{aString:aString,aBehavior:aBehavior,anotherString:anotherString},$globals.Compiler)});
  30879. //>>excludeEnd("ctx");
  30880. },
  30881. //>>excludeStart("ide", pragmas.excludeIdeData);
  30882. args: ["aString", "aBehavior", "anotherString"],
  30883. source: "install: aString forClass: aBehavior protocol: anotherString\x0a\x09^ ClassBuilder new\x0a\x09\x09installMethod: (self eval: (self compile: aString forClass: aBehavior))\x0a\x09\x09forClass: aBehavior\x0a\x09\x09protocol: anotherString",
  30884. referencedClasses: ["ClassBuilder"],
  30885. //>>excludeEnd("ide");
  30886. messageSends: ["installMethod:forClass:protocol:", "new", "eval:", "compile:forClass:"]
  30887. }),
  30888. $globals.Compiler);
  30889. $core.addMethod(
  30890. $core.method({
  30891. selector: "parse:",
  30892. protocol: 'compiling',
  30893. fn: function (aString){
  30894. var self=this;
  30895. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  30896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30897. return $core.withContext(function($ctx1) {
  30898. //>>excludeEnd("ctx");
  30899. var $1;
  30900. $1=$recv($Smalltalk())._parse_(aString);
  30901. return $1;
  30902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30903. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.Compiler)});
  30904. //>>excludeEnd("ctx");
  30905. },
  30906. //>>excludeStart("ide", pragmas.excludeIdeData);
  30907. args: ["aString"],
  30908. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  30909. referencedClasses: ["Smalltalk"],
  30910. //>>excludeEnd("ide");
  30911. messageSends: ["parse:"]
  30912. }),
  30913. $globals.Compiler);
  30914. $core.addMethod(
  30915. $core.method({
  30916. selector: "parseExpression:",
  30917. protocol: 'compiling',
  30918. fn: function (aString){
  30919. var self=this;
  30920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30921. return $core.withContext(function($ctx1) {
  30922. //>>excludeEnd("ctx");
  30923. var $2,$1;
  30924. $2=$recv("doIt ^ [ ".__comma(aString)).__comma(" ] value");
  30925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30926. $ctx1.sendIdx[","]=1;
  30927. //>>excludeEnd("ctx");
  30928. $1=self._parse_($2);
  30929. return $1;
  30930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30931. }, function($ctx1) {$ctx1.fill(self,"parseExpression:",{aString:aString},$globals.Compiler)});
  30932. //>>excludeEnd("ctx");
  30933. },
  30934. //>>excludeStart("ide", pragmas.excludeIdeData);
  30935. args: ["aString"],
  30936. source: "parseExpression: aString\x0a\x09^ self parse: 'doIt ^ [ ', aString, ' ] value'",
  30937. referencedClasses: [],
  30938. //>>excludeEnd("ide");
  30939. messageSends: ["parse:", ","]
  30940. }),
  30941. $globals.Compiler);
  30942. $core.addMethod(
  30943. $core.method({
  30944. selector: "recompile:",
  30945. protocol: 'compiling',
  30946. fn: function (aClass){
  30947. var self=this;
  30948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30949. return $core.withContext(function($ctx1) {
  30950. //>>excludeEnd("ctx");
  30951. var $1;
  30952. $recv($recv($recv(aClass)._methodDictionary())._values())._do_displayingProgress_((function(each){
  30953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30954. return $core.withContext(function($ctx2) {
  30955. //>>excludeEnd("ctx");
  30956. return self._install_forClass_protocol_($recv(each)._source(),aClass,$recv(each)._protocol());
  30957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30958. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  30959. //>>excludeEnd("ctx");
  30960. }),"Recompiling ".__comma($recv(aClass)._name()));
  30961. $1=$recv(aClass)._isMetaclass();
  30962. if(!$core.assert($1)){
  30963. self._recompile_($recv(aClass)._class());
  30964. };
  30965. return self;
  30966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30967. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},$globals.Compiler)});
  30968. //>>excludeEnd("ctx");
  30969. },
  30970. //>>excludeStart("ide", pragmas.excludeIdeData);
  30971. args: ["aClass"],
  30972. source: "recompile: aClass\x0a\x09aClass methodDictionary values\x0a\x09\x09do: [ :each | \x0a\x09\x09\x09self \x0a\x09\x09\x09\x09install: each source \x0a\x09\x09\x09\x09forClass: aClass \x0a\x09\x09\x09\x09protocol: each protocol ]\x0a\x09\x09displayingProgress: 'Recompiling ', aClass name.\x0a\x09aClass isMetaclass ifFalse: [ self recompile: aClass class ]",
  30973. referencedClasses: [],
  30974. //>>excludeEnd("ide");
  30975. messageSends: ["do:displayingProgress:", "values", "methodDictionary", "install:forClass:protocol:", "source", "protocol", ",", "name", "ifFalse:", "isMetaclass", "recompile:", "class"]
  30976. }),
  30977. $globals.Compiler);
  30978. $core.addMethod(
  30979. $core.method({
  30980. selector: "recompileAll",
  30981. protocol: 'compiling',
  30982. fn: function (){
  30983. var self=this;
  30984. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  30985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30986. return $core.withContext(function($ctx1) {
  30987. //>>excludeEnd("ctx");
  30988. $recv($recv($Smalltalk())._classes())._do_displayingProgress_((function(each){
  30989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30990. return $core.withContext(function($ctx2) {
  30991. //>>excludeEnd("ctx");
  30992. return self._recompile_(each);
  30993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30994. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  30995. //>>excludeEnd("ctx");
  30996. }),"Compiling all classes...");
  30997. return self;
  30998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30999. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},$globals.Compiler)});
  31000. //>>excludeEnd("ctx");
  31001. },
  31002. //>>excludeStart("ide", pragmas.excludeIdeData);
  31003. args: [],
  31004. source: "recompileAll\x0a\x09Smalltalk classes \x0a\x09\x09do: [ :each | self recompile: each ]\x0a\x09\x09displayingProgress: 'Compiling all classes...'",
  31005. referencedClasses: ["Smalltalk"],
  31006. //>>excludeEnd("ide");
  31007. messageSends: ["do:displayingProgress:", "classes", "recompile:"]
  31008. }),
  31009. $globals.Compiler);
  31010. $core.addMethod(
  31011. $core.method({
  31012. selector: "source",
  31013. protocol: 'accessing',
  31014. fn: function (){
  31015. var self=this;
  31016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31017. return $core.withContext(function($ctx1) {
  31018. //>>excludeEnd("ctx");
  31019. var $2,$1,$receiver;
  31020. $2=self["@source"];
  31021. if(($receiver = $2) == null || $receiver.isNil){
  31022. $1="";
  31023. } else {
  31024. $1=$2;
  31025. };
  31026. return $1;
  31027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31028. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.Compiler)});
  31029. //>>excludeEnd("ctx");
  31030. },
  31031. //>>excludeStart("ide", pragmas.excludeIdeData);
  31032. args: [],
  31033. source: "source\x0a\x09^ source ifNil: [ '' ]",
  31034. referencedClasses: [],
  31035. //>>excludeEnd("ide");
  31036. messageSends: ["ifNil:"]
  31037. }),
  31038. $globals.Compiler);
  31039. $core.addMethod(
  31040. $core.method({
  31041. selector: "source:",
  31042. protocol: 'accessing',
  31043. fn: function (aString){
  31044. var self=this;
  31045. self["@source"]=aString;
  31046. return self;
  31047. },
  31048. //>>excludeStart("ide", pragmas.excludeIdeData);
  31049. args: ["aString"],
  31050. source: "source: aString\x0a\x09source := aString",
  31051. referencedClasses: [],
  31052. //>>excludeEnd("ide");
  31053. messageSends: []
  31054. }),
  31055. $globals.Compiler);
  31056. $core.addMethod(
  31057. $core.method({
  31058. selector: "unknownVariables",
  31059. protocol: 'accessing',
  31060. fn: function (){
  31061. var self=this;
  31062. var $1;
  31063. $1=self["@unknownVariables"];
  31064. return $1;
  31065. },
  31066. //>>excludeStart("ide", pragmas.excludeIdeData);
  31067. args: [],
  31068. source: "unknownVariables\x0a\x09^ unknownVariables",
  31069. referencedClasses: [],
  31070. //>>excludeEnd("ide");
  31071. messageSends: []
  31072. }),
  31073. $globals.Compiler);
  31074. $core.addMethod(
  31075. $core.method({
  31076. selector: "unknownVariables:",
  31077. protocol: 'accessing',
  31078. fn: function (aCollection){
  31079. var self=this;
  31080. self["@unknownVariables"]=aCollection;
  31081. return self;
  31082. },
  31083. //>>excludeStart("ide", pragmas.excludeIdeData);
  31084. args: ["aCollection"],
  31085. source: "unknownVariables: aCollection\x0a\x09unknownVariables := aCollection",
  31086. referencedClasses: [],
  31087. //>>excludeEnd("ide");
  31088. messageSends: []
  31089. }),
  31090. $globals.Compiler);
  31091. $core.addMethod(
  31092. $core.method({
  31093. selector: "recompile:",
  31094. protocol: 'compiling',
  31095. fn: function (aClass){
  31096. var self=this;
  31097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31098. return $core.withContext(function($ctx1) {
  31099. //>>excludeEnd("ctx");
  31100. $recv(self._new())._recompile_(aClass);
  31101. return self;
  31102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31103. }, function($ctx1) {$ctx1.fill(self,"recompile:",{aClass:aClass},$globals.Compiler.klass)});
  31104. //>>excludeEnd("ctx");
  31105. },
  31106. //>>excludeStart("ide", pragmas.excludeIdeData);
  31107. args: ["aClass"],
  31108. source: "recompile: aClass\x0a\x09self new recompile: aClass",
  31109. referencedClasses: [],
  31110. //>>excludeEnd("ide");
  31111. messageSends: ["recompile:", "new"]
  31112. }),
  31113. $globals.Compiler.klass);
  31114. $core.addMethod(
  31115. $core.method({
  31116. selector: "recompileAll",
  31117. protocol: 'compiling',
  31118. fn: function (){
  31119. var self=this;
  31120. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31122. return $core.withContext(function($ctx1) {
  31123. //>>excludeEnd("ctx");
  31124. $recv($recv($Smalltalk())._classes())._do_((function(each){
  31125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31126. return $core.withContext(function($ctx2) {
  31127. //>>excludeEnd("ctx");
  31128. return self._recompile_(each);
  31129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31130. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31131. //>>excludeEnd("ctx");
  31132. }));
  31133. return self;
  31134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31135. }, function($ctx1) {$ctx1.fill(self,"recompileAll",{},$globals.Compiler.klass)});
  31136. //>>excludeEnd("ctx");
  31137. },
  31138. //>>excludeStart("ide", pragmas.excludeIdeData);
  31139. args: [],
  31140. source: "recompileAll\x0a\x09Smalltalk classes do: [ :each |\x0a\x09\x09self recompile: each ]",
  31141. referencedClasses: ["Smalltalk"],
  31142. //>>excludeEnd("ide");
  31143. messageSends: ["do:", "classes", "recompile:"]
  31144. }),
  31145. $globals.Compiler.klass);
  31146. $core.addClass('DoIt', $globals.Object, [], 'Compiler-Core');
  31147. //>>excludeStart("ide", pragmas.excludeIdeData);
  31148. $globals.DoIt.comment="`DoIt` is the class used to compile and evaluate expressions. See `Compiler >> evaluateExpression:`.";
  31149. //>>excludeEnd("ide");
  31150. $core.addClass('Evaluator', $globals.InterfacingObject, [], 'Compiler-Core');
  31151. //>>excludeStart("ide", pragmas.excludeIdeData);
  31152. $globals.Evaluator.comment="I evaluate code against a receiver, dispatching #evaluate:on: to the receiver.";
  31153. //>>excludeEnd("ide");
  31154. $core.addMethod(
  31155. $core.method({
  31156. selector: "evaluate:context:",
  31157. protocol: 'evaluating',
  31158. fn: function (aString,aContext){
  31159. var self=this;
  31160. var compiler,ast;
  31161. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  31162. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  31163. function $AISemanticAnalyzer(){return $globals.AISemanticAnalyzer||(typeof AISemanticAnalyzer=="undefined"?nil:AISemanticAnalyzer)}
  31164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31165. return $core.withContext(function($ctx1) {
  31166. //>>excludeEnd("ctx");
  31167. var $1,$2,$3,$4;
  31168. var $early={};
  31169. try {
  31170. compiler=$recv($Compiler())._new();
  31171. $recv((function(){
  31172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31173. return $core.withContext(function($ctx2) {
  31174. //>>excludeEnd("ctx");
  31175. ast=$recv(compiler)._parseExpression_(aString);
  31176. return ast;
  31177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31178. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  31179. //>>excludeEnd("ctx");
  31180. }))._on_do_($Error(),(function(ex){
  31181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31182. return $core.withContext(function($ctx2) {
  31183. //>>excludeEnd("ctx");
  31184. $1=self._alert_($recv(ex)._messageText());
  31185. throw $early=[$1];
  31186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31187. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  31188. //>>excludeEnd("ctx");
  31189. }));
  31190. $2=$recv($AISemanticAnalyzer())._on_($recv($recv(aContext)._receiver())._class());
  31191. $recv($2)._context_(aContext);
  31192. $3=$recv($2)._visit_(ast);
  31193. $4=$recv(aContext)._evaluateNode_(ast);
  31194. return $4;
  31195. }
  31196. catch(e) {if(e===$early)return e[0]; throw e}
  31197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31198. }, function($ctx1) {$ctx1.fill(self,"evaluate:context:",{aString:aString,aContext:aContext,compiler:compiler,ast:ast},$globals.Evaluator)});
  31199. //>>excludeEnd("ctx");
  31200. },
  31201. //>>excludeStart("ide", pragmas.excludeIdeData);
  31202. args: ["aString", "aContext"],
  31203. source: "evaluate: aString context: aContext\x0a\x09\x22Similar to #evaluate:for:, with the following differences:\x0a\x09- instead of compiling and running `aString`, `aString` is interpreted using an `ASTInterpreter`\x0a\x09- instead of evaluating against a receiver, evaluate in the context of `aContext`\x22\x0a\x0a\x09| compiler ast |\x0a\x09\x0a\x09compiler := Compiler new.\x0a\x09[ ast := compiler parseExpression: aString ] \x0a\x09\x09on: Error \x0a\x09\x09do: [ :ex | ^ self alert: ex messageText ].\x0a\x09\x09\x0a\x09(AISemanticAnalyzer on: aContext receiver class)\x0a\x09\x09context: aContext;\x0a\x09\x09visit: ast.\x0a\x0a\x09^ aContext evaluateNode: ast",
  31204. referencedClasses: ["Compiler", "Error", "AISemanticAnalyzer"],
  31205. //>>excludeEnd("ide");
  31206. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "context:", "on:", "class", "receiver", "visit:", "evaluateNode:"]
  31207. }),
  31208. $globals.Evaluator);
  31209. $core.addMethod(
  31210. $core.method({
  31211. selector: "evaluate:for:",
  31212. protocol: 'evaluating',
  31213. fn: function (aString,anObject){
  31214. var self=this;
  31215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31216. return $core.withContext(function($ctx1) {
  31217. //>>excludeEnd("ctx");
  31218. var $1;
  31219. $1=$recv(anObject)._evaluate_on_(aString,self);
  31220. return $1;
  31221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31222. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Evaluator)});
  31223. //>>excludeEnd("ctx");
  31224. },
  31225. //>>excludeStart("ide", pragmas.excludeIdeData);
  31226. args: ["aString", "anObject"],
  31227. source: "evaluate: aString for: anObject\x0a\x09^ anObject evaluate: aString on: self",
  31228. referencedClasses: [],
  31229. //>>excludeEnd("ide");
  31230. messageSends: ["evaluate:on:"]
  31231. }),
  31232. $globals.Evaluator);
  31233. $core.addMethod(
  31234. $core.method({
  31235. selector: "evaluate:receiver:",
  31236. protocol: 'evaluating',
  31237. fn: function (aString,anObject){
  31238. var self=this;
  31239. var compiler;
  31240. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  31241. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  31242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31243. return $core.withContext(function($ctx1) {
  31244. //>>excludeEnd("ctx");
  31245. var $1,$2;
  31246. var $early={};
  31247. try {
  31248. compiler=$recv($Compiler())._new();
  31249. $recv((function(){
  31250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31251. return $core.withContext(function($ctx2) {
  31252. //>>excludeEnd("ctx");
  31253. return $recv(compiler)._parseExpression_(aString);
  31254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31255. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  31256. //>>excludeEnd("ctx");
  31257. }))._on_do_($Error(),(function(ex){
  31258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31259. return $core.withContext(function($ctx2) {
  31260. //>>excludeEnd("ctx");
  31261. $1=self._alert_($recv(ex)._messageText());
  31262. throw $early=[$1];
  31263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31264. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,2)});
  31265. //>>excludeEnd("ctx");
  31266. }));
  31267. $2=$recv(compiler)._evaluateExpression_on_(aString,anObject);
  31268. return $2;
  31269. }
  31270. catch(e) {if(e===$early)return e[0]; throw e}
  31271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31272. }, function($ctx1) {$ctx1.fill(self,"evaluate:receiver:",{aString:aString,anObject:anObject,compiler:compiler},$globals.Evaluator)});
  31273. //>>excludeEnd("ctx");
  31274. },
  31275. //>>excludeStart("ide", pragmas.excludeIdeData);
  31276. args: ["aString", "anObject"],
  31277. source: "evaluate: aString receiver: anObject\x0a\x09| compiler |\x0a\x09\x0a\x09compiler := Compiler new.\x0a\x09[ compiler parseExpression: aString ] \x0a\x09\x09on: Error \x0a\x09\x09do: [ :ex | ^ self alert: ex messageText ].\x0a\x0a\x09^ compiler evaluateExpression: aString on: anObject",
  31278. referencedClasses: ["Compiler", "Error"],
  31279. //>>excludeEnd("ide");
  31280. messageSends: ["new", "on:do:", "parseExpression:", "alert:", "messageText", "evaluateExpression:on:"]
  31281. }),
  31282. $globals.Evaluator);
  31283. $core.addMethod(
  31284. $core.method({
  31285. selector: "evaluate:for:",
  31286. protocol: 'instance creation',
  31287. fn: function (aString,anObject){
  31288. var self=this;
  31289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31290. return $core.withContext(function($ctx1) {
  31291. //>>excludeEnd("ctx");
  31292. var $1;
  31293. $1=$recv(self._new())._evaluate_for_(aString,anObject);
  31294. return $1;
  31295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31296. }, function($ctx1) {$ctx1.fill(self,"evaluate:for:",{aString:aString,anObject:anObject},$globals.Evaluator.klass)});
  31297. //>>excludeEnd("ctx");
  31298. },
  31299. //>>excludeStart("ide", pragmas.excludeIdeData);
  31300. args: ["aString", "anObject"],
  31301. source: "evaluate: aString for: anObject\x0a\x09^ self new evaluate: aString for: anObject",
  31302. referencedClasses: [],
  31303. //>>excludeEnd("ide");
  31304. messageSends: ["evaluate:for:", "new"]
  31305. }),
  31306. $globals.Evaluator.klass);
  31307. $core.addClass('NodeVisitor', $globals.Object, [], 'Compiler-Core');
  31308. //>>excludeStart("ide", pragmas.excludeIdeData);
  31309. $globals.NodeVisitor.comment="I am the abstract super class of all AST node visitors.";
  31310. //>>excludeEnd("ide");
  31311. $core.addMethod(
  31312. $core.method({
  31313. selector: "visit:",
  31314. protocol: 'visiting',
  31315. fn: function (aNode){
  31316. var self=this;
  31317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31318. return $core.withContext(function($ctx1) {
  31319. //>>excludeEnd("ctx");
  31320. var $1;
  31321. $1=$recv(aNode)._accept_(self);
  31322. return $1;
  31323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31324. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},$globals.NodeVisitor)});
  31325. //>>excludeEnd("ctx");
  31326. },
  31327. //>>excludeStart("ide", pragmas.excludeIdeData);
  31328. args: ["aNode"],
  31329. source: "visit: aNode\x0a\x09^ aNode accept: self",
  31330. referencedClasses: [],
  31331. //>>excludeEnd("ide");
  31332. messageSends: ["accept:"]
  31333. }),
  31334. $globals.NodeVisitor);
  31335. $core.addMethod(
  31336. $core.method({
  31337. selector: "visitAll:",
  31338. protocol: 'visiting',
  31339. fn: function (aCollection){
  31340. var self=this;
  31341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31342. return $core.withContext(function($ctx1) {
  31343. //>>excludeEnd("ctx");
  31344. var $1;
  31345. $1=$recv(aCollection)._collect_((function(each){
  31346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31347. return $core.withContext(function($ctx2) {
  31348. //>>excludeEnd("ctx");
  31349. return self._visit_(each);
  31350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31351. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31352. //>>excludeEnd("ctx");
  31353. }));
  31354. return $1;
  31355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31356. }, function($ctx1) {$ctx1.fill(self,"visitAll:",{aCollection:aCollection},$globals.NodeVisitor)});
  31357. //>>excludeEnd("ctx");
  31358. },
  31359. //>>excludeStart("ide", pragmas.excludeIdeData);
  31360. args: ["aCollection"],
  31361. source: "visitAll: aCollection\x0a\x09^ aCollection collect: [ :each | self visit: each ]",
  31362. referencedClasses: [],
  31363. //>>excludeEnd("ide");
  31364. messageSends: ["collect:", "visit:"]
  31365. }),
  31366. $globals.NodeVisitor);
  31367. $core.addMethod(
  31368. $core.method({
  31369. selector: "visitAssignmentNode:",
  31370. protocol: 'visiting',
  31371. fn: function (aNode){
  31372. var self=this;
  31373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31374. return $core.withContext(function($ctx1) {
  31375. //>>excludeEnd("ctx");
  31376. var $1;
  31377. $1=self._visitNode_(aNode);
  31378. return $1;
  31379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31380. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode},$globals.NodeVisitor)});
  31381. //>>excludeEnd("ctx");
  31382. },
  31383. //>>excludeStart("ide", pragmas.excludeIdeData);
  31384. args: ["aNode"],
  31385. source: "visitAssignmentNode: aNode\x0a\x09^ self visitNode: aNode",
  31386. referencedClasses: [],
  31387. //>>excludeEnd("ide");
  31388. messageSends: ["visitNode:"]
  31389. }),
  31390. $globals.NodeVisitor);
  31391. $core.addMethod(
  31392. $core.method({
  31393. selector: "visitBlockNode:",
  31394. protocol: 'visiting',
  31395. fn: function (aNode){
  31396. var self=this;
  31397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31398. return $core.withContext(function($ctx1) {
  31399. //>>excludeEnd("ctx");
  31400. var $1;
  31401. $1=self._visitNode_(aNode);
  31402. return $1;
  31403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31404. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode},$globals.NodeVisitor)});
  31405. //>>excludeEnd("ctx");
  31406. },
  31407. //>>excludeStart("ide", pragmas.excludeIdeData);
  31408. args: ["aNode"],
  31409. source: "visitBlockNode: aNode\x0a\x09^ self visitNode: aNode",
  31410. referencedClasses: [],
  31411. //>>excludeEnd("ide");
  31412. messageSends: ["visitNode:"]
  31413. }),
  31414. $globals.NodeVisitor);
  31415. $core.addMethod(
  31416. $core.method({
  31417. selector: "visitBlockSequenceNode:",
  31418. protocol: 'visiting',
  31419. fn: function (aNode){
  31420. var self=this;
  31421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31422. return $core.withContext(function($ctx1) {
  31423. //>>excludeEnd("ctx");
  31424. var $1;
  31425. $1=self._visitSequenceNode_(aNode);
  31426. return $1;
  31427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31428. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.NodeVisitor)});
  31429. //>>excludeEnd("ctx");
  31430. },
  31431. //>>excludeStart("ide", pragmas.excludeIdeData);
  31432. args: ["aNode"],
  31433. source: "visitBlockSequenceNode: aNode\x0a\x09^ self visitSequenceNode: aNode",
  31434. referencedClasses: [],
  31435. //>>excludeEnd("ide");
  31436. messageSends: ["visitSequenceNode:"]
  31437. }),
  31438. $globals.NodeVisitor);
  31439. $core.addMethod(
  31440. $core.method({
  31441. selector: "visitCascadeNode:",
  31442. protocol: 'visiting',
  31443. fn: function (aNode){
  31444. var self=this;
  31445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31446. return $core.withContext(function($ctx1) {
  31447. //>>excludeEnd("ctx");
  31448. var $1;
  31449. $1=self._visitNode_(aNode);
  31450. return $1;
  31451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31452. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode},$globals.NodeVisitor)});
  31453. //>>excludeEnd("ctx");
  31454. },
  31455. //>>excludeStart("ide", pragmas.excludeIdeData);
  31456. args: ["aNode"],
  31457. source: "visitCascadeNode: aNode\x0a\x09^ self visitNode: aNode",
  31458. referencedClasses: [],
  31459. //>>excludeEnd("ide");
  31460. messageSends: ["visitNode:"]
  31461. }),
  31462. $globals.NodeVisitor);
  31463. $core.addMethod(
  31464. $core.method({
  31465. selector: "visitDynamicArrayNode:",
  31466. protocol: 'visiting',
  31467. fn: function (aNode){
  31468. var self=this;
  31469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31470. return $core.withContext(function($ctx1) {
  31471. //>>excludeEnd("ctx");
  31472. var $1;
  31473. $1=self._visitNode_(aNode);
  31474. return $1;
  31475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31476. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode},$globals.NodeVisitor)});
  31477. //>>excludeEnd("ctx");
  31478. },
  31479. //>>excludeStart("ide", pragmas.excludeIdeData);
  31480. args: ["aNode"],
  31481. source: "visitDynamicArrayNode: aNode\x0a\x09^ self visitNode: aNode",
  31482. referencedClasses: [],
  31483. //>>excludeEnd("ide");
  31484. messageSends: ["visitNode:"]
  31485. }),
  31486. $globals.NodeVisitor);
  31487. $core.addMethod(
  31488. $core.method({
  31489. selector: "visitDynamicDictionaryNode:",
  31490. protocol: 'visiting',
  31491. fn: function (aNode){
  31492. var self=this;
  31493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31494. return $core.withContext(function($ctx1) {
  31495. //>>excludeEnd("ctx");
  31496. var $1;
  31497. $1=self._visitNode_(aNode);
  31498. return $1;
  31499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31500. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode},$globals.NodeVisitor)});
  31501. //>>excludeEnd("ctx");
  31502. },
  31503. //>>excludeStart("ide", pragmas.excludeIdeData);
  31504. args: ["aNode"],
  31505. source: "visitDynamicDictionaryNode: aNode\x0a\x09^ self visitNode: aNode",
  31506. referencedClasses: [],
  31507. //>>excludeEnd("ide");
  31508. messageSends: ["visitNode:"]
  31509. }),
  31510. $globals.NodeVisitor);
  31511. $core.addMethod(
  31512. $core.method({
  31513. selector: "visitJSStatementNode:",
  31514. protocol: 'visiting',
  31515. fn: function (aNode){
  31516. var self=this;
  31517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31518. return $core.withContext(function($ctx1) {
  31519. //>>excludeEnd("ctx");
  31520. var $1;
  31521. $1=self._visitNode_(aNode);
  31522. return $1;
  31523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31524. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.NodeVisitor)});
  31525. //>>excludeEnd("ctx");
  31526. },
  31527. //>>excludeStart("ide", pragmas.excludeIdeData);
  31528. args: ["aNode"],
  31529. source: "visitJSStatementNode: aNode\x0a\x09^ self visitNode: aNode",
  31530. referencedClasses: [],
  31531. //>>excludeEnd("ide");
  31532. messageSends: ["visitNode:"]
  31533. }),
  31534. $globals.NodeVisitor);
  31535. $core.addMethod(
  31536. $core.method({
  31537. selector: "visitMethodNode:",
  31538. protocol: 'visiting',
  31539. fn: function (aNode){
  31540. var self=this;
  31541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31542. return $core.withContext(function($ctx1) {
  31543. //>>excludeEnd("ctx");
  31544. var $1;
  31545. $1=self._visitNode_(aNode);
  31546. return $1;
  31547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31548. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.NodeVisitor)});
  31549. //>>excludeEnd("ctx");
  31550. },
  31551. //>>excludeStart("ide", pragmas.excludeIdeData);
  31552. args: ["aNode"],
  31553. source: "visitMethodNode: aNode\x0a\x09^ self visitNode: aNode",
  31554. referencedClasses: [],
  31555. //>>excludeEnd("ide");
  31556. messageSends: ["visitNode:"]
  31557. }),
  31558. $globals.NodeVisitor);
  31559. $core.addMethod(
  31560. $core.method({
  31561. selector: "visitNode:",
  31562. protocol: 'visiting',
  31563. fn: function (aNode){
  31564. var self=this;
  31565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31566. return $core.withContext(function($ctx1) {
  31567. //>>excludeEnd("ctx");
  31568. var $1;
  31569. $1=self._visitAll_($recv(aNode)._nodes());
  31570. return $1;
  31571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31572. }, function($ctx1) {$ctx1.fill(self,"visitNode:",{aNode:aNode},$globals.NodeVisitor)});
  31573. //>>excludeEnd("ctx");
  31574. },
  31575. //>>excludeStart("ide", pragmas.excludeIdeData);
  31576. args: ["aNode"],
  31577. source: "visitNode: aNode\x0a\x09^ self visitAll: aNode nodes",
  31578. referencedClasses: [],
  31579. //>>excludeEnd("ide");
  31580. messageSends: ["visitAll:", "nodes"]
  31581. }),
  31582. $globals.NodeVisitor);
  31583. $core.addMethod(
  31584. $core.method({
  31585. selector: "visitReturnNode:",
  31586. protocol: 'visiting',
  31587. fn: function (aNode){
  31588. var self=this;
  31589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31590. return $core.withContext(function($ctx1) {
  31591. //>>excludeEnd("ctx");
  31592. var $1;
  31593. $1=self._visitNode_(aNode);
  31594. return $1;
  31595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31596. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.NodeVisitor)});
  31597. //>>excludeEnd("ctx");
  31598. },
  31599. //>>excludeStart("ide", pragmas.excludeIdeData);
  31600. args: ["aNode"],
  31601. source: "visitReturnNode: aNode\x0a\x09^ self visitNode: aNode",
  31602. referencedClasses: [],
  31603. //>>excludeEnd("ide");
  31604. messageSends: ["visitNode:"]
  31605. }),
  31606. $globals.NodeVisitor);
  31607. $core.addMethod(
  31608. $core.method({
  31609. selector: "visitSendNode:",
  31610. protocol: 'visiting',
  31611. fn: function (aNode){
  31612. var self=this;
  31613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31614. return $core.withContext(function($ctx1) {
  31615. //>>excludeEnd("ctx");
  31616. var $1;
  31617. $1=self._visitNode_(aNode);
  31618. return $1;
  31619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31620. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},$globals.NodeVisitor)});
  31621. //>>excludeEnd("ctx");
  31622. },
  31623. //>>excludeStart("ide", pragmas.excludeIdeData);
  31624. args: ["aNode"],
  31625. source: "visitSendNode: aNode\x0a\x09^ self visitNode: aNode",
  31626. referencedClasses: [],
  31627. //>>excludeEnd("ide");
  31628. messageSends: ["visitNode:"]
  31629. }),
  31630. $globals.NodeVisitor);
  31631. $core.addMethod(
  31632. $core.method({
  31633. selector: "visitSequenceNode:",
  31634. protocol: 'visiting',
  31635. fn: function (aNode){
  31636. var self=this;
  31637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31638. return $core.withContext(function($ctx1) {
  31639. //>>excludeEnd("ctx");
  31640. var $1;
  31641. $1=self._visitNode_(aNode);
  31642. return $1;
  31643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31644. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.NodeVisitor)});
  31645. //>>excludeEnd("ctx");
  31646. },
  31647. //>>excludeStart("ide", pragmas.excludeIdeData);
  31648. args: ["aNode"],
  31649. source: "visitSequenceNode: aNode\x0a\x09^ self visitNode: aNode",
  31650. referencedClasses: [],
  31651. //>>excludeEnd("ide");
  31652. messageSends: ["visitNode:"]
  31653. }),
  31654. $globals.NodeVisitor);
  31655. $core.addMethod(
  31656. $core.method({
  31657. selector: "visitValueNode:",
  31658. protocol: 'visiting',
  31659. fn: function (aNode){
  31660. var self=this;
  31661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31662. return $core.withContext(function($ctx1) {
  31663. //>>excludeEnd("ctx");
  31664. var $1;
  31665. $1=self._visitNode_(aNode);
  31666. return $1;
  31667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31668. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.NodeVisitor)});
  31669. //>>excludeEnd("ctx");
  31670. },
  31671. //>>excludeStart("ide", pragmas.excludeIdeData);
  31672. args: ["aNode"],
  31673. source: "visitValueNode: aNode\x0a\x09^ self visitNode: aNode",
  31674. referencedClasses: [],
  31675. //>>excludeEnd("ide");
  31676. messageSends: ["visitNode:"]
  31677. }),
  31678. $globals.NodeVisitor);
  31679. $core.addMethod(
  31680. $core.method({
  31681. selector: "visitVariableNode:",
  31682. protocol: 'visiting',
  31683. fn: function (aNode){
  31684. var self=this;
  31685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31686. return $core.withContext(function($ctx1) {
  31687. //>>excludeEnd("ctx");
  31688. var $1;
  31689. $1=self._visitNode_(aNode);
  31690. return $1;
  31691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31692. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.NodeVisitor)});
  31693. //>>excludeEnd("ctx");
  31694. },
  31695. //>>excludeStart("ide", pragmas.excludeIdeData);
  31696. args: ["aNode"],
  31697. source: "visitVariableNode: aNode\x0a\x09^ self visitNode: aNode",
  31698. referencedClasses: [],
  31699. //>>excludeEnd("ide");
  31700. messageSends: ["visitNode:"]
  31701. }),
  31702. $globals.NodeVisitor);
  31703. $core.addMethod(
  31704. $core.method({
  31705. selector: "asVariableName",
  31706. protocol: '*Compiler-Core',
  31707. fn: function (){
  31708. var self=this;
  31709. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  31710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31711. return $core.withContext(function($ctx1) {
  31712. //>>excludeEnd("ctx");
  31713. var $2,$1;
  31714. $2=$recv($recv($Smalltalk())._reservedWords())._includes_(self);
  31715. if($core.assert($2)){
  31716. $1=self.__comma("_");
  31717. } else {
  31718. $1=self;
  31719. };
  31720. return $1;
  31721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31722. }, function($ctx1) {$ctx1.fill(self,"asVariableName",{},$globals.String)});
  31723. //>>excludeEnd("ctx");
  31724. },
  31725. //>>excludeStart("ide", pragmas.excludeIdeData);
  31726. args: [],
  31727. source: "asVariableName\x0a\x09^ (Smalltalk reservedWords includes: self)\x0a\x09\x09ifTrue: [ self, '_' ]\x0a\x09\x09ifFalse: [ self ]",
  31728. referencedClasses: ["Smalltalk"],
  31729. //>>excludeEnd("ide");
  31730. messageSends: ["ifTrue:ifFalse:", "includes:", "reservedWords", ","]
  31731. }),
  31732. $globals.String);
  31733. });
  31734. define("amber_core/Compiler-AST", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Methods"], function($boot){
  31735. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  31736. var smalltalk=$core,_st=$recv,globals=$globals;
  31737. $core.addPackage('Compiler-AST');
  31738. $core.packages["Compiler-AST"].transport = {"type":"amd","amdNamespace":"amber_core"};
  31739. $core.addClass('Node', $globals.Object, ['parent', 'position', 'source', 'nodes', 'shouldBeInlined', 'shouldBeAliased'], 'Compiler-AST');
  31740. //>>excludeStart("ide", pragmas.excludeIdeData);
  31741. $globals.Node.comment="I am the abstract root class of the abstract syntax tree.\x0a\x0aConcrete classes should implement `#accept:` to allow visiting.\x0a\x0a`position` holds a point containing line and column number of the symbol location in the original source file.";
  31742. //>>excludeEnd("ide");
  31743. $core.addMethod(
  31744. $core.method({
  31745. selector: "accept:",
  31746. protocol: 'visiting',
  31747. fn: function (aVisitor){
  31748. var self=this;
  31749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31750. return $core.withContext(function($ctx1) {
  31751. //>>excludeEnd("ctx");
  31752. var $1;
  31753. $1=$recv(aVisitor)._visitNode_(self);
  31754. return $1;
  31755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31756. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.Node)});
  31757. //>>excludeEnd("ctx");
  31758. },
  31759. //>>excludeStart("ide", pragmas.excludeIdeData);
  31760. args: ["aVisitor"],
  31761. source: "accept: aVisitor\x0a\x09^ aVisitor visitNode: self",
  31762. referencedClasses: [],
  31763. //>>excludeEnd("ide");
  31764. messageSends: ["visitNode:"]
  31765. }),
  31766. $globals.Node);
  31767. $core.addMethod(
  31768. $core.method({
  31769. selector: "addNode:",
  31770. protocol: 'accessing',
  31771. fn: function (aNode){
  31772. var self=this;
  31773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31774. return $core.withContext(function($ctx1) {
  31775. //>>excludeEnd("ctx");
  31776. $recv(self._nodes())._add_(aNode);
  31777. $recv(aNode)._parent_(self);
  31778. return self;
  31779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31780. }, function($ctx1) {$ctx1.fill(self,"addNode:",{aNode:aNode},$globals.Node)});
  31781. //>>excludeEnd("ctx");
  31782. },
  31783. //>>excludeStart("ide", pragmas.excludeIdeData);
  31784. args: ["aNode"],
  31785. source: "addNode: aNode\x0a\x09self nodes add: aNode.\x0a\x09aNode parent: self",
  31786. referencedClasses: [],
  31787. //>>excludeEnd("ide");
  31788. messageSends: ["add:", "nodes", "parent:"]
  31789. }),
  31790. $globals.Node);
  31791. $core.addMethod(
  31792. $core.method({
  31793. selector: "allNodes",
  31794. protocol: 'accessing',
  31795. fn: function (){
  31796. var self=this;
  31797. var allNodes;
  31798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31799. return $core.withContext(function($ctx1) {
  31800. //>>excludeEnd("ctx");
  31801. var $1,$2;
  31802. $1=self._nodes();
  31803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31804. $ctx1.sendIdx["nodes"]=1;
  31805. //>>excludeEnd("ctx");
  31806. allNodes=$recv($1)._asSet();
  31807. $recv(self._nodes())._do_((function(each){
  31808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31809. return $core.withContext(function($ctx2) {
  31810. //>>excludeEnd("ctx");
  31811. return $recv(allNodes)._addAll_($recv(each)._allNodes());
  31812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31813. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  31814. //>>excludeEnd("ctx");
  31815. }));
  31816. $2=allNodes;
  31817. return $2;
  31818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31819. }, function($ctx1) {$ctx1.fill(self,"allNodes",{allNodes:allNodes},$globals.Node)});
  31820. //>>excludeEnd("ctx");
  31821. },
  31822. //>>excludeStart("ide", pragmas.excludeIdeData);
  31823. args: [],
  31824. source: "allNodes\x0a\x09| allNodes |\x0a\x09\x0a\x09allNodes := self nodes asSet.\x0a\x09self nodes do: [ :each | \x0a\x09\x09allNodes addAll: each allNodes ].\x0a\x09\x0a\x09^ allNodes",
  31825. referencedClasses: [],
  31826. //>>excludeEnd("ide");
  31827. messageSends: ["asSet", "nodes", "do:", "addAll:", "allNodes"]
  31828. }),
  31829. $globals.Node);
  31830. $core.addMethod(
  31831. $core.method({
  31832. selector: "inPosition:",
  31833. protocol: 'testing',
  31834. fn: function (aPoint){
  31835. var self=this;
  31836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31837. return $core.withContext(function($ctx1) {
  31838. //>>excludeEnd("ctx");
  31839. var $1;
  31840. $1=$recv($recv(self._positionStart()).__lt_eq(aPoint))._and_((function(){
  31841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31842. return $core.withContext(function($ctx2) {
  31843. //>>excludeEnd("ctx");
  31844. return $recv(self._positionEnd()).__gt_eq(aPoint);
  31845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31846. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  31847. //>>excludeEnd("ctx");
  31848. }));
  31849. return $1;
  31850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31851. }, function($ctx1) {$ctx1.fill(self,"inPosition:",{aPoint:aPoint},$globals.Node)});
  31852. //>>excludeEnd("ctx");
  31853. },
  31854. //>>excludeStart("ide", pragmas.excludeIdeData);
  31855. args: ["aPoint"],
  31856. source: "inPosition: aPoint\x0a\x09^ (self positionStart <= aPoint and: [\x0a\x09\x09self positionEnd >= aPoint ])",
  31857. referencedClasses: [],
  31858. //>>excludeEnd("ide");
  31859. messageSends: ["and:", "<=", "positionStart", ">=", "positionEnd"]
  31860. }),
  31861. $globals.Node);
  31862. $core.addMethod(
  31863. $core.method({
  31864. selector: "isAssignmentNode",
  31865. protocol: 'testing',
  31866. fn: function (){
  31867. var self=this;
  31868. return false;
  31869. },
  31870. //>>excludeStart("ide", pragmas.excludeIdeData);
  31871. args: [],
  31872. source: "isAssignmentNode\x0a\x09^ false",
  31873. referencedClasses: [],
  31874. //>>excludeEnd("ide");
  31875. messageSends: []
  31876. }),
  31877. $globals.Node);
  31878. $core.addMethod(
  31879. $core.method({
  31880. selector: "isBlockNode",
  31881. protocol: 'testing',
  31882. fn: function (){
  31883. var self=this;
  31884. return false;
  31885. },
  31886. //>>excludeStart("ide", pragmas.excludeIdeData);
  31887. args: [],
  31888. source: "isBlockNode\x0a\x09^ false",
  31889. referencedClasses: [],
  31890. //>>excludeEnd("ide");
  31891. messageSends: []
  31892. }),
  31893. $globals.Node);
  31894. $core.addMethod(
  31895. $core.method({
  31896. selector: "isBlockSequenceNode",
  31897. protocol: 'testing',
  31898. fn: function (){
  31899. var self=this;
  31900. return false;
  31901. },
  31902. //>>excludeStart("ide", pragmas.excludeIdeData);
  31903. args: [],
  31904. source: "isBlockSequenceNode\x0a\x09^ false",
  31905. referencedClasses: [],
  31906. //>>excludeEnd("ide");
  31907. messageSends: []
  31908. }),
  31909. $globals.Node);
  31910. $core.addMethod(
  31911. $core.method({
  31912. selector: "isCascadeNode",
  31913. protocol: 'testing',
  31914. fn: function (){
  31915. var self=this;
  31916. return false;
  31917. },
  31918. //>>excludeStart("ide", pragmas.excludeIdeData);
  31919. args: [],
  31920. source: "isCascadeNode\x0a\x09^ false",
  31921. referencedClasses: [],
  31922. //>>excludeEnd("ide");
  31923. messageSends: []
  31924. }),
  31925. $globals.Node);
  31926. $core.addMethod(
  31927. $core.method({
  31928. selector: "isImmutable",
  31929. protocol: 'testing',
  31930. fn: function (){
  31931. var self=this;
  31932. return false;
  31933. },
  31934. //>>excludeStart("ide", pragmas.excludeIdeData);
  31935. args: [],
  31936. source: "isImmutable\x0a\x09^ false",
  31937. referencedClasses: [],
  31938. //>>excludeEnd("ide");
  31939. messageSends: []
  31940. }),
  31941. $globals.Node);
  31942. $core.addMethod(
  31943. $core.method({
  31944. selector: "isJSStatementNode",
  31945. protocol: 'testing',
  31946. fn: function (){
  31947. var self=this;
  31948. return false;
  31949. },
  31950. //>>excludeStart("ide", pragmas.excludeIdeData);
  31951. args: [],
  31952. source: "isJSStatementNode\x0a\x09^ false",
  31953. referencedClasses: [],
  31954. //>>excludeEnd("ide");
  31955. messageSends: []
  31956. }),
  31957. $globals.Node);
  31958. $core.addMethod(
  31959. $core.method({
  31960. selector: "isLastChild",
  31961. protocol: 'testing',
  31962. fn: function (){
  31963. var self=this;
  31964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31965. return $core.withContext(function($ctx1) {
  31966. //>>excludeEnd("ctx");
  31967. var $1;
  31968. $1=$recv($recv($recv(self._parent())._nodes())._last()).__eq(self);
  31969. return $1;
  31970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  31971. }, function($ctx1) {$ctx1.fill(self,"isLastChild",{},$globals.Node)});
  31972. //>>excludeEnd("ctx");
  31973. },
  31974. //>>excludeStart("ide", pragmas.excludeIdeData);
  31975. args: [],
  31976. source: "isLastChild\x0a\x09^ self parent nodes last = self",
  31977. referencedClasses: [],
  31978. //>>excludeEnd("ide");
  31979. messageSends: ["=", "last", "nodes", "parent"]
  31980. }),
  31981. $globals.Node);
  31982. $core.addMethod(
  31983. $core.method({
  31984. selector: "isNavigationNode",
  31985. protocol: 'testing',
  31986. fn: function (){
  31987. var self=this;
  31988. return false;
  31989. },
  31990. //>>excludeStart("ide", pragmas.excludeIdeData);
  31991. args: [],
  31992. source: "isNavigationNode\x0a\x09\x22Answer true if the node can be navigated to\x22\x0a\x09\x0a\x09^ false",
  31993. referencedClasses: [],
  31994. //>>excludeEnd("ide");
  31995. messageSends: []
  31996. }),
  31997. $globals.Node);
  31998. $core.addMethod(
  31999. $core.method({
  32000. selector: "isNode",
  32001. protocol: 'testing',
  32002. fn: function (){
  32003. var self=this;
  32004. return true;
  32005. },
  32006. //>>excludeStart("ide", pragmas.excludeIdeData);
  32007. args: [],
  32008. source: "isNode\x0a\x09^ true",
  32009. referencedClasses: [],
  32010. //>>excludeEnd("ide");
  32011. messageSends: []
  32012. }),
  32013. $globals.Node);
  32014. $core.addMethod(
  32015. $core.method({
  32016. selector: "isReferenced",
  32017. protocol: 'testing',
  32018. fn: function (){
  32019. var self=this;
  32020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32021. return $core.withContext(function($ctx1) {
  32022. //>>excludeEnd("ctx");
  32023. var $4,$3,$2,$1;
  32024. $4=self._parent();
  32025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32026. $ctx1.sendIdx["parent"]=1;
  32027. //>>excludeEnd("ctx");
  32028. $3=$recv($4)._isSequenceNode();
  32029. $2=$recv($3)._or_((function(){
  32030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32031. return $core.withContext(function($ctx2) {
  32032. //>>excludeEnd("ctx");
  32033. return $recv(self._parent())._isAssignmentNode();
  32034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32035. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32036. //>>excludeEnd("ctx");
  32037. }));
  32038. $1=$recv($2)._not();
  32039. return $1;
  32040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32041. }, function($ctx1) {$ctx1.fill(self,"isReferenced",{},$globals.Node)});
  32042. //>>excludeEnd("ctx");
  32043. },
  32044. //>>excludeStart("ide", pragmas.excludeIdeData);
  32045. args: [],
  32046. source: "isReferenced\x0a\x09\x22Answer true if the receiver is referenced by other nodes.\x0a\x09Do not take sequences or assignments into account\x22\x0a\x09\x0a\x09^ (self parent isSequenceNode or: [\x0a\x09\x09self parent isAssignmentNode ]) not",
  32047. referencedClasses: [],
  32048. //>>excludeEnd("ide");
  32049. messageSends: ["not", "or:", "isSequenceNode", "parent", "isAssignmentNode"]
  32050. }),
  32051. $globals.Node);
  32052. $core.addMethod(
  32053. $core.method({
  32054. selector: "isReturnNode",
  32055. protocol: 'testing',
  32056. fn: function (){
  32057. var self=this;
  32058. return false;
  32059. },
  32060. //>>excludeStart("ide", pragmas.excludeIdeData);
  32061. args: [],
  32062. source: "isReturnNode\x0a\x09^ false",
  32063. referencedClasses: [],
  32064. //>>excludeEnd("ide");
  32065. messageSends: []
  32066. }),
  32067. $globals.Node);
  32068. $core.addMethod(
  32069. $core.method({
  32070. selector: "isSendNode",
  32071. protocol: 'testing',
  32072. fn: function (){
  32073. var self=this;
  32074. return false;
  32075. },
  32076. //>>excludeStart("ide", pragmas.excludeIdeData);
  32077. args: [],
  32078. source: "isSendNode\x0a\x09^ false",
  32079. referencedClasses: [],
  32080. //>>excludeEnd("ide");
  32081. messageSends: []
  32082. }),
  32083. $globals.Node);
  32084. $core.addMethod(
  32085. $core.method({
  32086. selector: "isSequenceNode",
  32087. protocol: 'testing',
  32088. fn: function (){
  32089. var self=this;
  32090. return false;
  32091. },
  32092. //>>excludeStart("ide", pragmas.excludeIdeData);
  32093. args: [],
  32094. source: "isSequenceNode\x0a\x09^ false",
  32095. referencedClasses: [],
  32096. //>>excludeEnd("ide");
  32097. messageSends: []
  32098. }),
  32099. $globals.Node);
  32100. $core.addMethod(
  32101. $core.method({
  32102. selector: "isValueNode",
  32103. protocol: 'testing',
  32104. fn: function (){
  32105. var self=this;
  32106. return false;
  32107. },
  32108. //>>excludeStart("ide", pragmas.excludeIdeData);
  32109. args: [],
  32110. source: "isValueNode\x0a\x09^ false",
  32111. referencedClasses: [],
  32112. //>>excludeEnd("ide");
  32113. messageSends: []
  32114. }),
  32115. $globals.Node);
  32116. $core.addMethod(
  32117. $core.method({
  32118. selector: "isVariableNode",
  32119. protocol: 'testing',
  32120. fn: function (){
  32121. var self=this;
  32122. return false;
  32123. },
  32124. //>>excludeStart("ide", pragmas.excludeIdeData);
  32125. args: [],
  32126. source: "isVariableNode\x0a\x09^ false",
  32127. referencedClasses: [],
  32128. //>>excludeEnd("ide");
  32129. messageSends: []
  32130. }),
  32131. $globals.Node);
  32132. $core.addMethod(
  32133. $core.method({
  32134. selector: "method",
  32135. protocol: 'accessing',
  32136. fn: function (){
  32137. var self=this;
  32138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32139. return $core.withContext(function($ctx1) {
  32140. //>>excludeEnd("ctx");
  32141. var $2,$1,$receiver;
  32142. $2=self._parent();
  32143. if(($receiver = $2) == null || $receiver.isNil){
  32144. $1=$2;
  32145. } else {
  32146. var node;
  32147. node=$receiver;
  32148. $1=$recv(node)._method();
  32149. };
  32150. return $1;
  32151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32152. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.Node)});
  32153. //>>excludeEnd("ctx");
  32154. },
  32155. //>>excludeStart("ide", pragmas.excludeIdeData);
  32156. args: [],
  32157. source: "method\x0a\x09^ self parent ifNotNil: [ :node | node method ]",
  32158. referencedClasses: [],
  32159. //>>excludeEnd("ide");
  32160. messageSends: ["ifNotNil:", "parent", "method"]
  32161. }),
  32162. $globals.Node);
  32163. $core.addMethod(
  32164. $core.method({
  32165. selector: "navigationNodeAt:ifAbsent:",
  32166. protocol: 'accessing',
  32167. fn: function (aPoint,aBlock){
  32168. var self=this;
  32169. var children;
  32170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32171. return $core.withContext(function($ctx1) {
  32172. //>>excludeEnd("ctx");
  32173. var $1,$4,$3,$2;
  32174. var $early={};
  32175. try {
  32176. children=$recv(self._allNodes())._select_((function(each){
  32177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32178. return $core.withContext(function($ctx2) {
  32179. //>>excludeEnd("ctx");
  32180. return $recv($recv(each)._isNavigationNode())._and_((function(){
  32181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32182. return $core.withContext(function($ctx3) {
  32183. //>>excludeEnd("ctx");
  32184. return $recv(each)._inPosition_(aPoint);
  32185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32186. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  32187. //>>excludeEnd("ctx");
  32188. }));
  32189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32190. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32191. //>>excludeEnd("ctx");
  32192. }));
  32193. $recv(children)._ifEmpty_((function(){
  32194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32195. return $core.withContext(function($ctx2) {
  32196. //>>excludeEnd("ctx");
  32197. $1=$recv(aBlock)._value();
  32198. throw $early=[$1];
  32199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32200. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  32201. //>>excludeEnd("ctx");
  32202. }));
  32203. $2=$recv($recv($recv(children)._asArray())._sort_((function(a,b){
  32204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32205. return $core.withContext(function($ctx2) {
  32206. //>>excludeEnd("ctx");
  32207. $4=$recv(a)._positionStart();
  32208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32209. $ctx2.sendIdx["positionStart"]=1;
  32210. //>>excludeEnd("ctx");
  32211. $3=$recv($4)._dist_(aPoint);
  32212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32213. $ctx2.sendIdx["dist:"]=1;
  32214. //>>excludeEnd("ctx");
  32215. return $recv($3).__lt_eq($recv($recv(b)._positionStart())._dist_(aPoint));
  32216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32217. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,4)});
  32218. //>>excludeEnd("ctx");
  32219. })))._first();
  32220. return $2;
  32221. }
  32222. catch(e) {if(e===$early)return e[0]; throw e}
  32223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32224. }, function($ctx1) {$ctx1.fill(self,"navigationNodeAt:ifAbsent:",{aPoint:aPoint,aBlock:aBlock,children:children},$globals.Node)});
  32225. //>>excludeEnd("ctx");
  32226. },
  32227. //>>excludeStart("ide", pragmas.excludeIdeData);
  32228. args: ["aPoint", "aBlock"],
  32229. source: "navigationNodeAt: aPoint ifAbsent: aBlock\x0a\x09\x22Answer the navigation node in the receiver's tree at aPoint \x0a\x09or nil if no navigation node was found.\x0a\x09\x0a\x09See `node >> isNaviationNode`\x22\x0a\x09\x0a\x09| children |\x0a\x09\x0a\x09children := self allNodes select: [ :each | \x0a\x09\x09each isNavigationNode and: [ each inPosition: aPoint ] ].\x0a\x09\x0a\x09children ifEmpty: [ ^ aBlock value ].\x0a\x09\x0a\x09^ (children asArray sort: [ :a :b | \x0a\x09\x09(a positionStart dist: aPoint) <= \x0a\x09\x09(b positionStart dist: aPoint) ]) first",
  32230. referencedClasses: [],
  32231. //>>excludeEnd("ide");
  32232. messageSends: ["select:", "allNodes", "and:", "isNavigationNode", "inPosition:", "ifEmpty:", "value", "first", "sort:", "asArray", "<=", "dist:", "positionStart"]
  32233. }),
  32234. $globals.Node);
  32235. $core.addMethod(
  32236. $core.method({
  32237. selector: "nextChild",
  32238. protocol: 'accessing',
  32239. fn: function (){
  32240. var self=this;
  32241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32242. return $core.withContext(function($ctx1) {
  32243. //>>excludeEnd("ctx");
  32244. var $3,$2,$1;
  32245. $3=self._nodes();
  32246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32247. $ctx1.sendIdx["nodes"]=1;
  32248. //>>excludeEnd("ctx");
  32249. $2=$recv($3)._isEmpty();
  32250. if($core.assert($2)){
  32251. $1=self;
  32252. } else {
  32253. $1=$recv($recv(self._nodes())._first())._nextChild();
  32254. };
  32255. return $1;
  32256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32257. }, function($ctx1) {$ctx1.fill(self,"nextChild",{},$globals.Node)});
  32258. //>>excludeEnd("ctx");
  32259. },
  32260. //>>excludeStart("ide", pragmas.excludeIdeData);
  32261. args: [],
  32262. source: "nextChild\x0a\x09\x22Answer the next node after aNode.\x0a\x09Recurse into the possible children of the receiver to answer the next node to be evaluated\x22\x0a\x09\x0a\x09^ self nodes isEmpty\x0a\x09\x09ifTrue: [ self ]\x0a\x09\x09ifFalse: [ self nodes first nextChild ]",
  32263. referencedClasses: [],
  32264. //>>excludeEnd("ide");
  32265. messageSends: ["ifTrue:ifFalse:", "isEmpty", "nodes", "nextChild", "first"]
  32266. }),
  32267. $globals.Node);
  32268. $core.addMethod(
  32269. $core.method({
  32270. selector: "nextNode",
  32271. protocol: 'accessing',
  32272. fn: function (){
  32273. var self=this;
  32274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32275. return $core.withContext(function($ctx1) {
  32276. //>>excludeEnd("ctx");
  32277. var $2,$1,$receiver;
  32278. $2=self._parent();
  32279. if(($receiver = $2) == null || $receiver.isNil){
  32280. $1=$2;
  32281. } else {
  32282. var node;
  32283. node=$receiver;
  32284. $1=$recv(node)._nextNode_(self);
  32285. };
  32286. return $1;
  32287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32288. }, function($ctx1) {$ctx1.fill(self,"nextNode",{},$globals.Node)});
  32289. //>>excludeEnd("ctx");
  32290. },
  32291. //>>excludeStart("ide", pragmas.excludeIdeData);
  32292. args: [],
  32293. source: "nextNode\x0a\x09^ self parent ifNotNil: [ :node |\x0a\x09\x09node nextNode: self ]",
  32294. referencedClasses: [],
  32295. //>>excludeEnd("ide");
  32296. messageSends: ["ifNotNil:", "parent", "nextNode:"]
  32297. }),
  32298. $globals.Node);
  32299. $core.addMethod(
  32300. $core.method({
  32301. selector: "nextNode:",
  32302. protocol: 'accessing',
  32303. fn: function (aNode){
  32304. var self=this;
  32305. var next;
  32306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32307. return $core.withContext(function($ctx1) {
  32308. //>>excludeEnd("ctx");
  32309. var $1,$2;
  32310. var $early={};
  32311. try {
  32312. $1=self._nodes();
  32313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32314. $ctx1.sendIdx["nodes"]=1;
  32315. //>>excludeEnd("ctx");
  32316. next=$recv($1)._at_ifAbsent_($recv($recv(self._nodes())._indexOf_(aNode)).__plus((1)),(function(){
  32317. throw $early=[self];
  32318. }));
  32319. $2=$recv(next)._nextChild();
  32320. return $2;
  32321. }
  32322. catch(e) {if(e===$early)return e[0]; throw e}
  32323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32324. }, function($ctx1) {$ctx1.fill(self,"nextNode:",{aNode:aNode,next:next},$globals.Node)});
  32325. //>>excludeEnd("ctx");
  32326. },
  32327. //>>excludeStart("ide", pragmas.excludeIdeData);
  32328. args: ["aNode"],
  32329. source: "nextNode: aNode\x0a\x09\x22Answer the next node after aNode.\x0a\x09Recurse into the possible children of the next node to answer the next node to be evaluated\x22\x0a\x09\x0a\x09| next |\x0a\x09\x0a\x09next := self nodes \x0a\x09\x09at: (self nodes indexOf: aNode) + 1\x0a\x09\x09ifAbsent: [ ^ self ].\x0a\x09\x0a\x09^ next nextChild",
  32330. referencedClasses: [],
  32331. //>>excludeEnd("ide");
  32332. messageSends: ["at:ifAbsent:", "nodes", "+", "indexOf:", "nextChild"]
  32333. }),
  32334. $globals.Node);
  32335. $core.addMethod(
  32336. $core.method({
  32337. selector: "nodes",
  32338. protocol: 'accessing',
  32339. fn: function (){
  32340. var self=this;
  32341. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  32342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32343. return $core.withContext(function($ctx1) {
  32344. //>>excludeEnd("ctx");
  32345. var $2,$1,$receiver;
  32346. $2=self["@nodes"];
  32347. if(($receiver = $2) == null || $receiver.isNil){
  32348. self["@nodes"]=$recv($Array())._new();
  32349. $1=self["@nodes"];
  32350. } else {
  32351. $1=$2;
  32352. };
  32353. return $1;
  32354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32355. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.Node)});
  32356. //>>excludeEnd("ctx");
  32357. },
  32358. //>>excludeStart("ide", pragmas.excludeIdeData);
  32359. args: [],
  32360. source: "nodes\x0a\x09^ nodes ifNil: [ nodes := Array new ]",
  32361. referencedClasses: ["Array"],
  32362. //>>excludeEnd("ide");
  32363. messageSends: ["ifNil:", "new"]
  32364. }),
  32365. $globals.Node);
  32366. $core.addMethod(
  32367. $core.method({
  32368. selector: "nodes:",
  32369. protocol: 'building',
  32370. fn: function (aCollection){
  32371. var self=this;
  32372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32373. return $core.withContext(function($ctx1) {
  32374. //>>excludeEnd("ctx");
  32375. self["@nodes"]=aCollection;
  32376. $recv(aCollection)._do_((function(each){
  32377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32378. return $core.withContext(function($ctx2) {
  32379. //>>excludeEnd("ctx");
  32380. return $recv(each)._parent_(self);
  32381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32382. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32383. //>>excludeEnd("ctx");
  32384. }));
  32385. return self;
  32386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32387. }, function($ctx1) {$ctx1.fill(self,"nodes:",{aCollection:aCollection},$globals.Node)});
  32388. //>>excludeEnd("ctx");
  32389. },
  32390. //>>excludeStart("ide", pragmas.excludeIdeData);
  32391. args: ["aCollection"],
  32392. source: "nodes: aCollection\x0a\x09nodes := aCollection.\x0a\x09aCollection do: [ :each | each parent: self ]",
  32393. referencedClasses: [],
  32394. //>>excludeEnd("ide");
  32395. messageSends: ["do:", "parent:"]
  32396. }),
  32397. $globals.Node);
  32398. $core.addMethod(
  32399. $core.method({
  32400. selector: "parent",
  32401. protocol: 'accessing',
  32402. fn: function (){
  32403. var self=this;
  32404. var $1;
  32405. $1=self["@parent"];
  32406. return $1;
  32407. },
  32408. //>>excludeStart("ide", pragmas.excludeIdeData);
  32409. args: [],
  32410. source: "parent\x0a\x09^ parent",
  32411. referencedClasses: [],
  32412. //>>excludeEnd("ide");
  32413. messageSends: []
  32414. }),
  32415. $globals.Node);
  32416. $core.addMethod(
  32417. $core.method({
  32418. selector: "parent:",
  32419. protocol: 'accessing',
  32420. fn: function (aNode){
  32421. var self=this;
  32422. self["@parent"]=aNode;
  32423. return self;
  32424. },
  32425. //>>excludeStart("ide", pragmas.excludeIdeData);
  32426. args: ["aNode"],
  32427. source: "parent: aNode\x0a\x09parent := aNode",
  32428. referencedClasses: [],
  32429. //>>excludeEnd("ide");
  32430. messageSends: []
  32431. }),
  32432. $globals.Node);
  32433. $core.addMethod(
  32434. $core.method({
  32435. selector: "position",
  32436. protocol: 'accessing',
  32437. fn: function (){
  32438. var self=this;
  32439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32440. return $core.withContext(function($ctx1) {
  32441. //>>excludeEnd("ctx");
  32442. var $2,$3,$1,$receiver;
  32443. $2=self["@position"];
  32444. if(($receiver = $2) == null || $receiver.isNil){
  32445. $3=self._parent();
  32446. if(($receiver = $3) == null || $receiver.isNil){
  32447. $1=$3;
  32448. } else {
  32449. var node;
  32450. node=$receiver;
  32451. $1=$recv(node)._position();
  32452. };
  32453. } else {
  32454. $1=$2;
  32455. };
  32456. return $1;
  32457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32458. }, function($ctx1) {$ctx1.fill(self,"position",{},$globals.Node)});
  32459. //>>excludeEnd("ctx");
  32460. },
  32461. //>>excludeStart("ide", pragmas.excludeIdeData);
  32462. args: [],
  32463. source: "position\x0a\x09\x22answer the line and column of the receiver in the source code\x22\x0a\x09\x0a\x09^ position ifNil: [ \x0a\x09\x09self parent ifNotNil: [ :node | node position ] ]",
  32464. referencedClasses: [],
  32465. //>>excludeEnd("ide");
  32466. messageSends: ["ifNil:", "ifNotNil:", "parent", "position"]
  32467. }),
  32468. $globals.Node);
  32469. $core.addMethod(
  32470. $core.method({
  32471. selector: "position:",
  32472. protocol: 'accessing',
  32473. fn: function (aPosition){
  32474. var self=this;
  32475. self["@position"]=aPosition;
  32476. return self;
  32477. },
  32478. //>>excludeStart("ide", pragmas.excludeIdeData);
  32479. args: ["aPosition"],
  32480. source: "position: aPosition\x0a\x09position := aPosition",
  32481. referencedClasses: [],
  32482. //>>excludeEnd("ide");
  32483. messageSends: []
  32484. }),
  32485. $globals.Node);
  32486. $core.addMethod(
  32487. $core.method({
  32488. selector: "positionEnd",
  32489. protocol: 'accessing',
  32490. fn: function (){
  32491. var self=this;
  32492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32493. return $core.withContext(function($ctx1) {
  32494. //>>excludeEnd("ctx");
  32495. var $2,$7,$6,$5,$4,$3,$1;
  32496. $2=self._positionStart();
  32497. $7=self._source();
  32498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32499. $ctx1.sendIdx["source"]=1;
  32500. //>>excludeEnd("ctx");
  32501. $6=$recv($7)._lines();
  32502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32503. $ctx1.sendIdx["lines"]=1;
  32504. //>>excludeEnd("ctx");
  32505. $5=$recv($6)._size();
  32506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32507. $ctx1.sendIdx["size"]=1;
  32508. //>>excludeEnd("ctx");
  32509. $4=$recv($5).__minus((1));
  32510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32511. $ctx1.sendIdx["-"]=1;
  32512. //>>excludeEnd("ctx");
  32513. $3=$recv($4).__at($recv($recv($recv($recv(self._source())._lines())._last())._size()).__minus((1)));
  32514. $1=$recv($2).__plus($3);
  32515. return $1;
  32516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32517. }, function($ctx1) {$ctx1.fill(self,"positionEnd",{},$globals.Node)});
  32518. //>>excludeEnd("ctx");
  32519. },
  32520. //>>excludeStart("ide", pragmas.excludeIdeData);
  32521. args: [],
  32522. source: "positionEnd\x0a\x09^ self positionStart + ((self source lines size - 1) @ (self source lines last size - 1))",
  32523. referencedClasses: [],
  32524. //>>excludeEnd("ide");
  32525. messageSends: ["+", "positionStart", "@", "-", "size", "lines", "source", "last"]
  32526. }),
  32527. $globals.Node);
  32528. $core.addMethod(
  32529. $core.method({
  32530. selector: "positionStart",
  32531. protocol: 'accessing',
  32532. fn: function (){
  32533. var self=this;
  32534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32535. return $core.withContext(function($ctx1) {
  32536. //>>excludeEnd("ctx");
  32537. var $1;
  32538. $1=self._position();
  32539. return $1;
  32540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32541. }, function($ctx1) {$ctx1.fill(self,"positionStart",{},$globals.Node)});
  32542. //>>excludeEnd("ctx");
  32543. },
  32544. //>>excludeStart("ide", pragmas.excludeIdeData);
  32545. args: [],
  32546. source: "positionStart\x0a\x09^ self position",
  32547. referencedClasses: [],
  32548. //>>excludeEnd("ide");
  32549. messageSends: ["position"]
  32550. }),
  32551. $globals.Node);
  32552. $core.addMethod(
  32553. $core.method({
  32554. selector: "postCopy",
  32555. protocol: 'copying',
  32556. fn: function (){
  32557. var self=this;
  32558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32559. return $core.withContext(function($ctx1) {
  32560. //>>excludeEnd("ctx");
  32561. (
  32562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32563. $ctx1.supercall = true,
  32564. //>>excludeEnd("ctx");
  32565. $globals.Node.superclass.fn.prototype._postCopy.apply($recv(self), []));
  32566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32567. $ctx1.supercall = false;
  32568. //>>excludeEnd("ctx");;
  32569. $recv(self._nodes())._do_((function(each){
  32570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32571. return $core.withContext(function($ctx2) {
  32572. //>>excludeEnd("ctx");
  32573. return $recv(each)._parent_(self);
  32574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32575. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32576. //>>excludeEnd("ctx");
  32577. }));
  32578. return self;
  32579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32580. }, function($ctx1) {$ctx1.fill(self,"postCopy",{},$globals.Node)});
  32581. //>>excludeEnd("ctx");
  32582. },
  32583. //>>excludeStart("ide", pragmas.excludeIdeData);
  32584. args: [],
  32585. source: "postCopy\x0a\x09super postCopy.\x0a\x09self nodes do: [ :each | each parent: self ]",
  32586. referencedClasses: [],
  32587. //>>excludeEnd("ide");
  32588. messageSends: ["postCopy", "do:", "nodes", "parent:"]
  32589. }),
  32590. $globals.Node);
  32591. $core.addMethod(
  32592. $core.method({
  32593. selector: "requiresSmalltalkContext",
  32594. protocol: 'testing',
  32595. fn: function (){
  32596. var self=this;
  32597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32598. return $core.withContext(function($ctx1) {
  32599. //>>excludeEnd("ctx");
  32600. var $1;
  32601. $1=$recv($recv(self._nodes())._detect_ifNone_((function(each){
  32602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32603. return $core.withContext(function($ctx2) {
  32604. //>>excludeEnd("ctx");
  32605. return $recv(each)._requiresSmalltalkContext();
  32606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32607. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  32608. //>>excludeEnd("ctx");
  32609. }),(function(){
  32610. return nil;
  32611. })))._notNil();
  32612. return $1;
  32613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32614. }, function($ctx1) {$ctx1.fill(self,"requiresSmalltalkContext",{},$globals.Node)});
  32615. //>>excludeEnd("ctx");
  32616. },
  32617. //>>excludeStart("ide", pragmas.excludeIdeData);
  32618. args: [],
  32619. source: "requiresSmalltalkContext\x0a\x09\x22Answer true if the receiver requires a smalltalk context.\x0a\x09Only send nodes require a context.\x0a\x09\x0a\x09If no node requires a context, the method will be compiled without one.\x0a\x09See `IRJSTranslator` and `JSStream` for context creation\x22\x0a\x09\x0a\x09^ (self nodes \x0a\x09\x09detect: [ :each | each requiresSmalltalkContext ]\x0a\x09\x09ifNone: [ nil ]) notNil",
  32620. referencedClasses: [],
  32621. //>>excludeEnd("ide");
  32622. messageSends: ["notNil", "detect:ifNone:", "nodes", "requiresSmalltalkContext"]
  32623. }),
  32624. $globals.Node);
  32625. $core.addMethod(
  32626. $core.method({
  32627. selector: "shouldBeAliased",
  32628. protocol: 'accessing',
  32629. fn: function (){
  32630. var self=this;
  32631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32632. return $core.withContext(function($ctx1) {
  32633. //>>excludeEnd("ctx");
  32634. var $2,$1,$receiver;
  32635. $2=self["@shouldBeAliased"];
  32636. if(($receiver = $2) == null || $receiver.isNil){
  32637. $1=false;
  32638. } else {
  32639. $1=$2;
  32640. };
  32641. return $1;
  32642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32643. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},$globals.Node)});
  32644. //>>excludeEnd("ctx");
  32645. },
  32646. //>>excludeStart("ide", pragmas.excludeIdeData);
  32647. args: [],
  32648. source: "shouldBeAliased\x0a\x09^ shouldBeAliased ifNil: [ false ]",
  32649. referencedClasses: [],
  32650. //>>excludeEnd("ide");
  32651. messageSends: ["ifNil:"]
  32652. }),
  32653. $globals.Node);
  32654. $core.addMethod(
  32655. $core.method({
  32656. selector: "shouldBeAliased:",
  32657. protocol: 'accessing',
  32658. fn: function (aBoolean){
  32659. var self=this;
  32660. self["@shouldBeAliased"]=aBoolean;
  32661. return self;
  32662. },
  32663. //>>excludeStart("ide", pragmas.excludeIdeData);
  32664. args: ["aBoolean"],
  32665. source: "shouldBeAliased: aBoolean\x0a\x09shouldBeAliased := aBoolean",
  32666. referencedClasses: [],
  32667. //>>excludeEnd("ide");
  32668. messageSends: []
  32669. }),
  32670. $globals.Node);
  32671. $core.addMethod(
  32672. $core.method({
  32673. selector: "shouldBeInlined",
  32674. protocol: 'accessing',
  32675. fn: function (){
  32676. var self=this;
  32677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32678. return $core.withContext(function($ctx1) {
  32679. //>>excludeEnd("ctx");
  32680. var $2,$1,$receiver;
  32681. $2=self["@shouldBeInlined"];
  32682. if(($receiver = $2) == null || $receiver.isNil){
  32683. $1=false;
  32684. } else {
  32685. $1=$2;
  32686. };
  32687. return $1;
  32688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32689. }, function($ctx1) {$ctx1.fill(self,"shouldBeInlined",{},$globals.Node)});
  32690. //>>excludeEnd("ctx");
  32691. },
  32692. //>>excludeStart("ide", pragmas.excludeIdeData);
  32693. args: [],
  32694. source: "shouldBeInlined\x0a\x09^ shouldBeInlined ifNil: [ false ]",
  32695. referencedClasses: [],
  32696. //>>excludeEnd("ide");
  32697. messageSends: ["ifNil:"]
  32698. }),
  32699. $globals.Node);
  32700. $core.addMethod(
  32701. $core.method({
  32702. selector: "shouldBeInlined:",
  32703. protocol: 'accessing',
  32704. fn: function (aBoolean){
  32705. var self=this;
  32706. self["@shouldBeInlined"]=aBoolean;
  32707. return self;
  32708. },
  32709. //>>excludeStart("ide", pragmas.excludeIdeData);
  32710. args: ["aBoolean"],
  32711. source: "shouldBeInlined: aBoolean\x0a\x09shouldBeInlined := aBoolean",
  32712. referencedClasses: [],
  32713. //>>excludeEnd("ide");
  32714. messageSends: []
  32715. }),
  32716. $globals.Node);
  32717. $core.addMethod(
  32718. $core.method({
  32719. selector: "size",
  32720. protocol: 'accessing',
  32721. fn: function (){
  32722. var self=this;
  32723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32724. return $core.withContext(function($ctx1) {
  32725. //>>excludeEnd("ctx");
  32726. var $1;
  32727. $1=$recv(self._source())._size();
  32728. return $1;
  32729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32730. }, function($ctx1) {$ctx1.fill(self,"size",{},$globals.Node)});
  32731. //>>excludeEnd("ctx");
  32732. },
  32733. //>>excludeStart("ide", pragmas.excludeIdeData);
  32734. args: [],
  32735. source: "size\x0a\x09^ self source size",
  32736. referencedClasses: [],
  32737. //>>excludeEnd("ide");
  32738. messageSends: ["size", "source"]
  32739. }),
  32740. $globals.Node);
  32741. $core.addMethod(
  32742. $core.method({
  32743. selector: "source",
  32744. protocol: 'accessing',
  32745. fn: function (){
  32746. var self=this;
  32747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32748. return $core.withContext(function($ctx1) {
  32749. //>>excludeEnd("ctx");
  32750. var $2,$1,$receiver;
  32751. $2=self["@source"];
  32752. if(($receiver = $2) == null || $receiver.isNil){
  32753. $1="";
  32754. } else {
  32755. $1=$2;
  32756. };
  32757. return $1;
  32758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32759. }, function($ctx1) {$ctx1.fill(self,"source",{},$globals.Node)});
  32760. //>>excludeEnd("ctx");
  32761. },
  32762. //>>excludeStart("ide", pragmas.excludeIdeData);
  32763. args: [],
  32764. source: "source\x0a\x09^ source ifNil: [ '' ]",
  32765. referencedClasses: [],
  32766. //>>excludeEnd("ide");
  32767. messageSends: ["ifNil:"]
  32768. }),
  32769. $globals.Node);
  32770. $core.addMethod(
  32771. $core.method({
  32772. selector: "source:",
  32773. protocol: 'accessing',
  32774. fn: function (aString){
  32775. var self=this;
  32776. self["@source"]=aString;
  32777. return self;
  32778. },
  32779. //>>excludeStart("ide", pragmas.excludeIdeData);
  32780. args: ["aString"],
  32781. source: "source: aString\x0a\x09source := aString",
  32782. referencedClasses: [],
  32783. //>>excludeEnd("ide");
  32784. messageSends: []
  32785. }),
  32786. $globals.Node);
  32787. $core.addMethod(
  32788. $core.method({
  32789. selector: "stopOnStepping",
  32790. protocol: 'testing',
  32791. fn: function (){
  32792. var self=this;
  32793. return false;
  32794. },
  32795. //>>excludeStart("ide", pragmas.excludeIdeData);
  32796. args: [],
  32797. source: "stopOnStepping\x0a\x09^ false",
  32798. referencedClasses: [],
  32799. //>>excludeEnd("ide");
  32800. messageSends: []
  32801. }),
  32802. $globals.Node);
  32803. $core.addMethod(
  32804. $core.method({
  32805. selector: "subtreeNeedsAliasing",
  32806. protocol: 'testing',
  32807. fn: function (){
  32808. var self=this;
  32809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32810. return $core.withContext(function($ctx1) {
  32811. //>>excludeEnd("ctx");
  32812. var $1;
  32813. $1=$recv($recv(self._shouldBeAliased())._or_((function(){
  32814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32815. return $core.withContext(function($ctx2) {
  32816. //>>excludeEnd("ctx");
  32817. return self._shouldBeInlined();
  32818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32819. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  32820. //>>excludeEnd("ctx");
  32821. })))._or_((function(){
  32822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32823. return $core.withContext(function($ctx2) {
  32824. //>>excludeEnd("ctx");
  32825. return $recv(self._nodes())._anySatisfy_((function(each){
  32826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32827. return $core.withContext(function($ctx3) {
  32828. //>>excludeEnd("ctx");
  32829. return $recv(each)._subtreeNeedsAliasing();
  32830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32831. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,3)});
  32832. //>>excludeEnd("ctx");
  32833. }));
  32834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32835. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  32836. //>>excludeEnd("ctx");
  32837. }));
  32838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32839. $ctx1.sendIdx["or:"]=1;
  32840. //>>excludeEnd("ctx");
  32841. return $1;
  32842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32843. }, function($ctx1) {$ctx1.fill(self,"subtreeNeedsAliasing",{},$globals.Node)});
  32844. //>>excludeEnd("ctx");
  32845. },
  32846. //>>excludeStart("ide", pragmas.excludeIdeData);
  32847. args: [],
  32848. source: "subtreeNeedsAliasing\x0a\x09^ (self shouldBeAliased or: [ self shouldBeInlined ]) or: [\x0a\x09\x09self nodes anySatisfy: [ :each | each subtreeNeedsAliasing ] ]",
  32849. referencedClasses: [],
  32850. //>>excludeEnd("ide");
  32851. messageSends: ["or:", "shouldBeAliased", "shouldBeInlined", "anySatisfy:", "nodes", "subtreeNeedsAliasing"]
  32852. }),
  32853. $globals.Node);
  32854. $core.addClass('AssignmentNode', $globals.Node, ['left', 'right'], 'Compiler-AST');
  32855. //>>excludeStart("ide", pragmas.excludeIdeData);
  32856. $globals.AssignmentNode.comment="I represent an assignment node.";
  32857. //>>excludeEnd("ide");
  32858. $core.addMethod(
  32859. $core.method({
  32860. selector: "accept:",
  32861. protocol: 'visiting',
  32862. fn: function (aVisitor){
  32863. var self=this;
  32864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32865. return $core.withContext(function($ctx1) {
  32866. //>>excludeEnd("ctx");
  32867. var $1;
  32868. $1=$recv(aVisitor)._visitAssignmentNode_(self);
  32869. return $1;
  32870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32871. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.AssignmentNode)});
  32872. //>>excludeEnd("ctx");
  32873. },
  32874. //>>excludeStart("ide", pragmas.excludeIdeData);
  32875. args: ["aVisitor"],
  32876. source: "accept: aVisitor\x0a\x09^ aVisitor visitAssignmentNode: self",
  32877. referencedClasses: [],
  32878. //>>excludeEnd("ide");
  32879. messageSends: ["visitAssignmentNode:"]
  32880. }),
  32881. $globals.AssignmentNode);
  32882. $core.addMethod(
  32883. $core.method({
  32884. selector: "isAssignmentNode",
  32885. protocol: 'testing',
  32886. fn: function (){
  32887. var self=this;
  32888. return true;
  32889. },
  32890. //>>excludeStart("ide", pragmas.excludeIdeData);
  32891. args: [],
  32892. source: "isAssignmentNode\x0a\x09^ true",
  32893. referencedClasses: [],
  32894. //>>excludeEnd("ide");
  32895. messageSends: []
  32896. }),
  32897. $globals.AssignmentNode);
  32898. $core.addMethod(
  32899. $core.method({
  32900. selector: "left",
  32901. protocol: 'accessing',
  32902. fn: function (){
  32903. var self=this;
  32904. var $1;
  32905. $1=self["@left"];
  32906. return $1;
  32907. },
  32908. //>>excludeStart("ide", pragmas.excludeIdeData);
  32909. args: [],
  32910. source: "left\x0a\x09^ left",
  32911. referencedClasses: [],
  32912. //>>excludeEnd("ide");
  32913. messageSends: []
  32914. }),
  32915. $globals.AssignmentNode);
  32916. $core.addMethod(
  32917. $core.method({
  32918. selector: "left:",
  32919. protocol: 'accessing',
  32920. fn: function (aNode){
  32921. var self=this;
  32922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32923. return $core.withContext(function($ctx1) {
  32924. //>>excludeEnd("ctx");
  32925. self["@left"]=aNode;
  32926. $recv(aNode)._parent_(self);
  32927. return self;
  32928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32929. }, function($ctx1) {$ctx1.fill(self,"left:",{aNode:aNode},$globals.AssignmentNode)});
  32930. //>>excludeEnd("ctx");
  32931. },
  32932. //>>excludeStart("ide", pragmas.excludeIdeData);
  32933. args: ["aNode"],
  32934. source: "left: aNode\x0a\x09left := aNode.\x0a\x09aNode parent: self",
  32935. referencedClasses: [],
  32936. //>>excludeEnd("ide");
  32937. messageSends: ["parent:"]
  32938. }),
  32939. $globals.AssignmentNode);
  32940. $core.addMethod(
  32941. $core.method({
  32942. selector: "nodes",
  32943. protocol: 'accessing',
  32944. fn: function (){
  32945. var self=this;
  32946. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  32947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32948. return $core.withContext(function($ctx1) {
  32949. //>>excludeEnd("ctx");
  32950. var $1;
  32951. $1=$recv($Array())._with_with_(self._left(),self._right());
  32952. return $1;
  32953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32954. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.AssignmentNode)});
  32955. //>>excludeEnd("ctx");
  32956. },
  32957. //>>excludeStart("ide", pragmas.excludeIdeData);
  32958. args: [],
  32959. source: "nodes\x0a\x09^ Array with: self left with: self right",
  32960. referencedClasses: ["Array"],
  32961. //>>excludeEnd("ide");
  32962. messageSends: ["with:with:", "left", "right"]
  32963. }),
  32964. $globals.AssignmentNode);
  32965. $core.addMethod(
  32966. $core.method({
  32967. selector: "right",
  32968. protocol: 'accessing',
  32969. fn: function (){
  32970. var self=this;
  32971. var $1;
  32972. $1=self["@right"];
  32973. return $1;
  32974. },
  32975. //>>excludeStart("ide", pragmas.excludeIdeData);
  32976. args: [],
  32977. source: "right\x0a\x09^ right",
  32978. referencedClasses: [],
  32979. //>>excludeEnd("ide");
  32980. messageSends: []
  32981. }),
  32982. $globals.AssignmentNode);
  32983. $core.addMethod(
  32984. $core.method({
  32985. selector: "right:",
  32986. protocol: 'accessing',
  32987. fn: function (aNode){
  32988. var self=this;
  32989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32990. return $core.withContext(function($ctx1) {
  32991. //>>excludeEnd("ctx");
  32992. self["@right"]=aNode;
  32993. $recv(aNode)._parent_(self);
  32994. return self;
  32995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32996. }, function($ctx1) {$ctx1.fill(self,"right:",{aNode:aNode},$globals.AssignmentNode)});
  32997. //>>excludeEnd("ctx");
  32998. },
  32999. //>>excludeStart("ide", pragmas.excludeIdeData);
  33000. args: ["aNode"],
  33001. source: "right: aNode\x0a\x09right := aNode.\x0a\x09aNode parent: self",
  33002. referencedClasses: [],
  33003. //>>excludeEnd("ide");
  33004. messageSends: ["parent:"]
  33005. }),
  33006. $globals.AssignmentNode);
  33007. $core.addMethod(
  33008. $core.method({
  33009. selector: "shouldBeAliased",
  33010. protocol: 'testing',
  33011. fn: function (){
  33012. var self=this;
  33013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33014. return $core.withContext(function($ctx1) {
  33015. //>>excludeEnd("ctx");
  33016. var $2,$1;
  33017. $2=(
  33018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33019. $ctx1.supercall = true,
  33020. //>>excludeEnd("ctx");
  33021. $globals.AssignmentNode.superclass.fn.prototype._shouldBeAliased.apply($recv(self), []));
  33022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33023. $ctx1.supercall = false;
  33024. //>>excludeEnd("ctx");;
  33025. $1=$recv($2)._or_((function(){
  33026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33027. return $core.withContext(function($ctx2) {
  33028. //>>excludeEnd("ctx");
  33029. return self._isReferenced();
  33030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33031. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  33032. //>>excludeEnd("ctx");
  33033. }));
  33034. return $1;
  33035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33036. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{},$globals.AssignmentNode)});
  33037. //>>excludeEnd("ctx");
  33038. },
  33039. //>>excludeStart("ide", pragmas.excludeIdeData);
  33040. args: [],
  33041. source: "shouldBeAliased\x0a\x09^ super shouldBeAliased or: [ self isReferenced ]",
  33042. referencedClasses: [],
  33043. //>>excludeEnd("ide");
  33044. messageSends: ["or:", "shouldBeAliased", "isReferenced"]
  33045. }),
  33046. $globals.AssignmentNode);
  33047. $core.addClass('BlockNode', $globals.Node, ['parameters', 'scope'], 'Compiler-AST');
  33048. //>>excludeStart("ide", pragmas.excludeIdeData);
  33049. $globals.BlockNode.comment="I represent an block closure node.";
  33050. //>>excludeEnd("ide");
  33051. $core.addMethod(
  33052. $core.method({
  33053. selector: "accept:",
  33054. protocol: 'visiting',
  33055. fn: function (aVisitor){
  33056. var self=this;
  33057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33058. return $core.withContext(function($ctx1) {
  33059. //>>excludeEnd("ctx");
  33060. var $1;
  33061. $1=$recv(aVisitor)._visitBlockNode_(self);
  33062. return $1;
  33063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33064. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.BlockNode)});
  33065. //>>excludeEnd("ctx");
  33066. },
  33067. //>>excludeStart("ide", pragmas.excludeIdeData);
  33068. args: ["aVisitor"],
  33069. source: "accept: aVisitor\x0a\x09^ aVisitor visitBlockNode: self",
  33070. referencedClasses: [],
  33071. //>>excludeEnd("ide");
  33072. messageSends: ["visitBlockNode:"]
  33073. }),
  33074. $globals.BlockNode);
  33075. $core.addMethod(
  33076. $core.method({
  33077. selector: "isBlockNode",
  33078. protocol: 'testing',
  33079. fn: function (){
  33080. var self=this;
  33081. return true;
  33082. },
  33083. //>>excludeStart("ide", pragmas.excludeIdeData);
  33084. args: [],
  33085. source: "isBlockNode\x0a\x09^ true",
  33086. referencedClasses: [],
  33087. //>>excludeEnd("ide");
  33088. messageSends: []
  33089. }),
  33090. $globals.BlockNode);
  33091. $core.addMethod(
  33092. $core.method({
  33093. selector: "nextChild",
  33094. protocol: 'accessing',
  33095. fn: function (){
  33096. var self=this;
  33097. return self;
  33098. },
  33099. //>>excludeStart("ide", pragmas.excludeIdeData);
  33100. args: [],
  33101. source: "nextChild\x0a\x09\x22Answer the receiver as we want to avoid eager evaluation\x22\x0a\x09\x0a\x09^ self",
  33102. referencedClasses: [],
  33103. //>>excludeEnd("ide");
  33104. messageSends: []
  33105. }),
  33106. $globals.BlockNode);
  33107. $core.addMethod(
  33108. $core.method({
  33109. selector: "nextNode:",
  33110. protocol: 'accessing',
  33111. fn: function (aNode){
  33112. var self=this;
  33113. return self;
  33114. },
  33115. //>>excludeStart("ide", pragmas.excludeIdeData);
  33116. args: ["aNode"],
  33117. source: "nextNode: aNode\x0a\x09\x22Answer the receiver as we want to avoid eager evaluation\x22\x0a\x09\x0a\x09^ self",
  33118. referencedClasses: [],
  33119. //>>excludeEnd("ide");
  33120. messageSends: []
  33121. }),
  33122. $globals.BlockNode);
  33123. $core.addMethod(
  33124. $core.method({
  33125. selector: "parameters",
  33126. protocol: 'accessing',
  33127. fn: function (){
  33128. var self=this;
  33129. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  33130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33131. return $core.withContext(function($ctx1) {
  33132. //>>excludeEnd("ctx");
  33133. var $2,$1,$receiver;
  33134. $2=self["@parameters"];
  33135. if(($receiver = $2) == null || $receiver.isNil){
  33136. self["@parameters"]=$recv($Array())._new();
  33137. $1=self["@parameters"];
  33138. } else {
  33139. $1=$2;
  33140. };
  33141. return $1;
  33142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33143. }, function($ctx1) {$ctx1.fill(self,"parameters",{},$globals.BlockNode)});
  33144. //>>excludeEnd("ctx");
  33145. },
  33146. //>>excludeStart("ide", pragmas.excludeIdeData);
  33147. args: [],
  33148. source: "parameters\x0a\x09^ parameters ifNil: [ parameters := Array new ]",
  33149. referencedClasses: ["Array"],
  33150. //>>excludeEnd("ide");
  33151. messageSends: ["ifNil:", "new"]
  33152. }),
  33153. $globals.BlockNode);
  33154. $core.addMethod(
  33155. $core.method({
  33156. selector: "parameters:",
  33157. protocol: 'accessing',
  33158. fn: function (aCollection){
  33159. var self=this;
  33160. self["@parameters"]=aCollection;
  33161. return self;
  33162. },
  33163. //>>excludeStart("ide", pragmas.excludeIdeData);
  33164. args: ["aCollection"],
  33165. source: "parameters: aCollection\x0a\x09parameters := aCollection",
  33166. referencedClasses: [],
  33167. //>>excludeEnd("ide");
  33168. messageSends: []
  33169. }),
  33170. $globals.BlockNode);
  33171. $core.addMethod(
  33172. $core.method({
  33173. selector: "scope",
  33174. protocol: 'accessing',
  33175. fn: function (){
  33176. var self=this;
  33177. var $1;
  33178. $1=self["@scope"];
  33179. return $1;
  33180. },
  33181. //>>excludeStart("ide", pragmas.excludeIdeData);
  33182. args: [],
  33183. source: "scope\x0a\x09^ scope",
  33184. referencedClasses: [],
  33185. //>>excludeEnd("ide");
  33186. messageSends: []
  33187. }),
  33188. $globals.BlockNode);
  33189. $core.addMethod(
  33190. $core.method({
  33191. selector: "scope:",
  33192. protocol: 'accessing',
  33193. fn: function (aLexicalScope){
  33194. var self=this;
  33195. self["@scope"]=aLexicalScope;
  33196. return self;
  33197. },
  33198. //>>excludeStart("ide", pragmas.excludeIdeData);
  33199. args: ["aLexicalScope"],
  33200. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  33201. referencedClasses: [],
  33202. //>>excludeEnd("ide");
  33203. messageSends: []
  33204. }),
  33205. $globals.BlockNode);
  33206. $core.addMethod(
  33207. $core.method({
  33208. selector: "subtreeNeedsAliasing",
  33209. protocol: 'testing',
  33210. fn: function (){
  33211. var self=this;
  33212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33213. return $core.withContext(function($ctx1) {
  33214. //>>excludeEnd("ctx");
  33215. var $1;
  33216. $1=$recv(self._shouldBeAliased())._or_((function(){
  33217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33218. return $core.withContext(function($ctx2) {
  33219. //>>excludeEnd("ctx");
  33220. return self._shouldBeInlined();
  33221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33222. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  33223. //>>excludeEnd("ctx");
  33224. }));
  33225. return $1;
  33226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33227. }, function($ctx1) {$ctx1.fill(self,"subtreeNeedsAliasing",{},$globals.BlockNode)});
  33228. //>>excludeEnd("ctx");
  33229. },
  33230. //>>excludeStart("ide", pragmas.excludeIdeData);
  33231. args: [],
  33232. source: "subtreeNeedsAliasing\x0a\x09^ self shouldBeAliased or: [ self shouldBeInlined ]",
  33233. referencedClasses: [],
  33234. //>>excludeEnd("ide");
  33235. messageSends: ["or:", "shouldBeAliased", "shouldBeInlined"]
  33236. }),
  33237. $globals.BlockNode);
  33238. $core.addClass('CascadeNode', $globals.Node, ['receiver'], 'Compiler-AST');
  33239. //>>excludeStart("ide", pragmas.excludeIdeData);
  33240. $globals.CascadeNode.comment="I represent an cascade node.";
  33241. //>>excludeEnd("ide");
  33242. $core.addMethod(
  33243. $core.method({
  33244. selector: "accept:",
  33245. protocol: 'visiting',
  33246. fn: function (aVisitor){
  33247. var self=this;
  33248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33249. return $core.withContext(function($ctx1) {
  33250. //>>excludeEnd("ctx");
  33251. var $1;
  33252. $1=$recv(aVisitor)._visitCascadeNode_(self);
  33253. return $1;
  33254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33255. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.CascadeNode)});
  33256. //>>excludeEnd("ctx");
  33257. },
  33258. //>>excludeStart("ide", pragmas.excludeIdeData);
  33259. args: ["aVisitor"],
  33260. source: "accept: aVisitor\x0a\x09^ aVisitor visitCascadeNode: self",
  33261. referencedClasses: [],
  33262. //>>excludeEnd("ide");
  33263. messageSends: ["visitCascadeNode:"]
  33264. }),
  33265. $globals.CascadeNode);
  33266. $core.addMethod(
  33267. $core.method({
  33268. selector: "isCascadeNode",
  33269. protocol: 'testing',
  33270. fn: function (){
  33271. var self=this;
  33272. return true;
  33273. },
  33274. //>>excludeStart("ide", pragmas.excludeIdeData);
  33275. args: [],
  33276. source: "isCascadeNode\x0a\x09^ true",
  33277. referencedClasses: [],
  33278. //>>excludeEnd("ide");
  33279. messageSends: []
  33280. }),
  33281. $globals.CascadeNode);
  33282. $core.addMethod(
  33283. $core.method({
  33284. selector: "receiver",
  33285. protocol: 'accessing',
  33286. fn: function (){
  33287. var self=this;
  33288. var $1;
  33289. $1=self["@receiver"];
  33290. return $1;
  33291. },
  33292. //>>excludeStart("ide", pragmas.excludeIdeData);
  33293. args: [],
  33294. source: "receiver\x0a\x09^ receiver",
  33295. referencedClasses: [],
  33296. //>>excludeEnd("ide");
  33297. messageSends: []
  33298. }),
  33299. $globals.CascadeNode);
  33300. $core.addMethod(
  33301. $core.method({
  33302. selector: "receiver:",
  33303. protocol: 'accessing',
  33304. fn: function (aNode){
  33305. var self=this;
  33306. self["@receiver"]=aNode;
  33307. return self;
  33308. },
  33309. //>>excludeStart("ide", pragmas.excludeIdeData);
  33310. args: ["aNode"],
  33311. source: "receiver: aNode\x0a\x09receiver := aNode",
  33312. referencedClasses: [],
  33313. //>>excludeEnd("ide");
  33314. messageSends: []
  33315. }),
  33316. $globals.CascadeNode);
  33317. $core.addClass('DynamicArrayNode', $globals.Node, [], 'Compiler-AST');
  33318. //>>excludeStart("ide", pragmas.excludeIdeData);
  33319. $globals.DynamicArrayNode.comment="I represent an dynamic array node.";
  33320. //>>excludeEnd("ide");
  33321. $core.addMethod(
  33322. $core.method({
  33323. selector: "accept:",
  33324. protocol: 'visiting',
  33325. fn: function (aVisitor){
  33326. var self=this;
  33327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33328. return $core.withContext(function($ctx1) {
  33329. //>>excludeEnd("ctx");
  33330. var $1;
  33331. $1=$recv(aVisitor)._visitDynamicArrayNode_(self);
  33332. return $1;
  33333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33334. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.DynamicArrayNode)});
  33335. //>>excludeEnd("ctx");
  33336. },
  33337. //>>excludeStart("ide", pragmas.excludeIdeData);
  33338. args: ["aVisitor"],
  33339. source: "accept: aVisitor\x0a\x09^ aVisitor visitDynamicArrayNode: self",
  33340. referencedClasses: [],
  33341. //>>excludeEnd("ide");
  33342. messageSends: ["visitDynamicArrayNode:"]
  33343. }),
  33344. $globals.DynamicArrayNode);
  33345. $core.addClass('DynamicDictionaryNode', $globals.Node, [], 'Compiler-AST');
  33346. //>>excludeStart("ide", pragmas.excludeIdeData);
  33347. $globals.DynamicDictionaryNode.comment="I represent an dynamic dictionary node.";
  33348. //>>excludeEnd("ide");
  33349. $core.addMethod(
  33350. $core.method({
  33351. selector: "accept:",
  33352. protocol: 'visiting',
  33353. fn: function (aVisitor){
  33354. var self=this;
  33355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33356. return $core.withContext(function($ctx1) {
  33357. //>>excludeEnd("ctx");
  33358. var $1;
  33359. $1=$recv(aVisitor)._visitDynamicDictionaryNode_(self);
  33360. return $1;
  33361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33362. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.DynamicDictionaryNode)});
  33363. //>>excludeEnd("ctx");
  33364. },
  33365. //>>excludeStart("ide", pragmas.excludeIdeData);
  33366. args: ["aVisitor"],
  33367. source: "accept: aVisitor\x0a\x09^ aVisitor visitDynamicDictionaryNode: self",
  33368. referencedClasses: [],
  33369. //>>excludeEnd("ide");
  33370. messageSends: ["visitDynamicDictionaryNode:"]
  33371. }),
  33372. $globals.DynamicDictionaryNode);
  33373. $core.addClass('JSStatementNode', $globals.Node, [], 'Compiler-AST');
  33374. //>>excludeStart("ide", pragmas.excludeIdeData);
  33375. $globals.JSStatementNode.comment="I represent an JavaScript statement node.";
  33376. //>>excludeEnd("ide");
  33377. $core.addMethod(
  33378. $core.method({
  33379. selector: "accept:",
  33380. protocol: 'visiting',
  33381. fn: function (aVisitor){
  33382. var self=this;
  33383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33384. return $core.withContext(function($ctx1) {
  33385. //>>excludeEnd("ctx");
  33386. var $1;
  33387. $1=$recv(aVisitor)._visitJSStatementNode_(self);
  33388. return $1;
  33389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33390. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.JSStatementNode)});
  33391. //>>excludeEnd("ctx");
  33392. },
  33393. //>>excludeStart("ide", pragmas.excludeIdeData);
  33394. args: ["aVisitor"],
  33395. source: "accept: aVisitor\x0a\x09^ aVisitor visitJSStatementNode: self",
  33396. referencedClasses: [],
  33397. //>>excludeEnd("ide");
  33398. messageSends: ["visitJSStatementNode:"]
  33399. }),
  33400. $globals.JSStatementNode);
  33401. $core.addMethod(
  33402. $core.method({
  33403. selector: "isJSStatementNode",
  33404. protocol: 'testing',
  33405. fn: function (){
  33406. var self=this;
  33407. return true;
  33408. },
  33409. //>>excludeStart("ide", pragmas.excludeIdeData);
  33410. args: [],
  33411. source: "isJSStatementNode\x0a\x09^ true",
  33412. referencedClasses: [],
  33413. //>>excludeEnd("ide");
  33414. messageSends: []
  33415. }),
  33416. $globals.JSStatementNode);
  33417. $core.addMethod(
  33418. $core.method({
  33419. selector: "requiresSmalltalkContext",
  33420. protocol: 'testing',
  33421. fn: function (){
  33422. var self=this;
  33423. return true;
  33424. },
  33425. //>>excludeStart("ide", pragmas.excludeIdeData);
  33426. args: [],
  33427. source: "requiresSmalltalkContext\x0a\x09^ true",
  33428. referencedClasses: [],
  33429. //>>excludeEnd("ide");
  33430. messageSends: []
  33431. }),
  33432. $globals.JSStatementNode);
  33433. $core.addClass('MethodNode', $globals.Node, ['selector', 'arguments', 'source', 'scope', 'classReferences', 'sendIndexes', 'superSends'], 'Compiler-AST');
  33434. //>>excludeStart("ide", pragmas.excludeIdeData);
  33435. $globals.MethodNode.comment="I represent an method node.\x0a\x0aA method node must be the root and only method node of a valid AST.";
  33436. //>>excludeEnd("ide");
  33437. $core.addMethod(
  33438. $core.method({
  33439. selector: "accept:",
  33440. protocol: 'visiting',
  33441. fn: function (aVisitor){
  33442. var self=this;
  33443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33444. return $core.withContext(function($ctx1) {
  33445. //>>excludeEnd("ctx");
  33446. var $1;
  33447. $1=$recv(aVisitor)._visitMethodNode_(self);
  33448. return $1;
  33449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33450. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.MethodNode)});
  33451. //>>excludeEnd("ctx");
  33452. },
  33453. //>>excludeStart("ide", pragmas.excludeIdeData);
  33454. args: ["aVisitor"],
  33455. source: "accept: aVisitor\x0a\x09^ aVisitor visitMethodNode: self",
  33456. referencedClasses: [],
  33457. //>>excludeEnd("ide");
  33458. messageSends: ["visitMethodNode:"]
  33459. }),
  33460. $globals.MethodNode);
  33461. $core.addMethod(
  33462. $core.method({
  33463. selector: "arguments",
  33464. protocol: 'accessing',
  33465. fn: function (){
  33466. var self=this;
  33467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33468. return $core.withContext(function($ctx1) {
  33469. //>>excludeEnd("ctx");
  33470. var $2,$1,$receiver;
  33471. $2=self["@arguments"];
  33472. if(($receiver = $2) == null || $receiver.isNil){
  33473. $1=[];
  33474. } else {
  33475. $1=$2;
  33476. };
  33477. return $1;
  33478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33479. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.MethodNode)});
  33480. //>>excludeEnd("ctx");
  33481. },
  33482. //>>excludeStart("ide", pragmas.excludeIdeData);
  33483. args: [],
  33484. source: "arguments\x0a\x09^ arguments ifNil: [ #() ]",
  33485. referencedClasses: [],
  33486. //>>excludeEnd("ide");
  33487. messageSends: ["ifNil:"]
  33488. }),
  33489. $globals.MethodNode);
  33490. $core.addMethod(
  33491. $core.method({
  33492. selector: "arguments:",
  33493. protocol: 'accessing',
  33494. fn: function (aCollection){
  33495. var self=this;
  33496. self["@arguments"]=aCollection;
  33497. return self;
  33498. },
  33499. //>>excludeStart("ide", pragmas.excludeIdeData);
  33500. args: ["aCollection"],
  33501. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  33502. referencedClasses: [],
  33503. //>>excludeEnd("ide");
  33504. messageSends: []
  33505. }),
  33506. $globals.MethodNode);
  33507. $core.addMethod(
  33508. $core.method({
  33509. selector: "classReferences",
  33510. protocol: 'accessing',
  33511. fn: function (){
  33512. var self=this;
  33513. var $1;
  33514. $1=self["@classReferences"];
  33515. return $1;
  33516. },
  33517. //>>excludeStart("ide", pragmas.excludeIdeData);
  33518. args: [],
  33519. source: "classReferences\x0a\x09^ classReferences",
  33520. referencedClasses: [],
  33521. //>>excludeEnd("ide");
  33522. messageSends: []
  33523. }),
  33524. $globals.MethodNode);
  33525. $core.addMethod(
  33526. $core.method({
  33527. selector: "classReferences:",
  33528. protocol: 'accessing',
  33529. fn: function (aCollection){
  33530. var self=this;
  33531. self["@classReferences"]=aCollection;
  33532. return self;
  33533. },
  33534. //>>excludeStart("ide", pragmas.excludeIdeData);
  33535. args: ["aCollection"],
  33536. source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
  33537. referencedClasses: [],
  33538. //>>excludeEnd("ide");
  33539. messageSends: []
  33540. }),
  33541. $globals.MethodNode);
  33542. $core.addMethod(
  33543. $core.method({
  33544. selector: "messageSends",
  33545. protocol: 'accessing',
  33546. fn: function (){
  33547. var self=this;
  33548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33549. return $core.withContext(function($ctx1) {
  33550. //>>excludeEnd("ctx");
  33551. var $1;
  33552. $1=$recv(self._sendIndexes())._keys();
  33553. return $1;
  33554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33555. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.MethodNode)});
  33556. //>>excludeEnd("ctx");
  33557. },
  33558. //>>excludeStart("ide", pragmas.excludeIdeData);
  33559. args: [],
  33560. source: "messageSends\x0a\x09^ self sendIndexes keys",
  33561. referencedClasses: [],
  33562. //>>excludeEnd("ide");
  33563. messageSends: ["keys", "sendIndexes"]
  33564. }),
  33565. $globals.MethodNode);
  33566. $core.addMethod(
  33567. $core.method({
  33568. selector: "method",
  33569. protocol: 'accessing',
  33570. fn: function (){
  33571. var self=this;
  33572. return self;
  33573. },
  33574. //>>excludeStart("ide", pragmas.excludeIdeData);
  33575. args: [],
  33576. source: "method\x0a\x09^ self",
  33577. referencedClasses: [],
  33578. //>>excludeEnd("ide");
  33579. messageSends: []
  33580. }),
  33581. $globals.MethodNode);
  33582. $core.addMethod(
  33583. $core.method({
  33584. selector: "scope",
  33585. protocol: 'accessing',
  33586. fn: function (){
  33587. var self=this;
  33588. var $1;
  33589. $1=self["@scope"];
  33590. return $1;
  33591. },
  33592. //>>excludeStart("ide", pragmas.excludeIdeData);
  33593. args: [],
  33594. source: "scope\x0a\x09^ scope",
  33595. referencedClasses: [],
  33596. //>>excludeEnd("ide");
  33597. messageSends: []
  33598. }),
  33599. $globals.MethodNode);
  33600. $core.addMethod(
  33601. $core.method({
  33602. selector: "scope:",
  33603. protocol: 'accessing',
  33604. fn: function (aMethodScope){
  33605. var self=this;
  33606. self["@scope"]=aMethodScope;
  33607. return self;
  33608. },
  33609. //>>excludeStart("ide", pragmas.excludeIdeData);
  33610. args: ["aMethodScope"],
  33611. source: "scope: aMethodScope\x0a\x09scope := aMethodScope",
  33612. referencedClasses: [],
  33613. //>>excludeEnd("ide");
  33614. messageSends: []
  33615. }),
  33616. $globals.MethodNode);
  33617. $core.addMethod(
  33618. $core.method({
  33619. selector: "selector",
  33620. protocol: 'accessing',
  33621. fn: function (){
  33622. var self=this;
  33623. var $1;
  33624. $1=self["@selector"];
  33625. return $1;
  33626. },
  33627. //>>excludeStart("ide", pragmas.excludeIdeData);
  33628. args: [],
  33629. source: "selector\x0a\x09^ selector",
  33630. referencedClasses: [],
  33631. //>>excludeEnd("ide");
  33632. messageSends: []
  33633. }),
  33634. $globals.MethodNode);
  33635. $core.addMethod(
  33636. $core.method({
  33637. selector: "selector:",
  33638. protocol: 'accessing',
  33639. fn: function (aString){
  33640. var self=this;
  33641. self["@selector"]=aString;
  33642. return self;
  33643. },
  33644. //>>excludeStart("ide", pragmas.excludeIdeData);
  33645. args: ["aString"],
  33646. source: "selector: aString\x0a\x09selector := aString",
  33647. referencedClasses: [],
  33648. //>>excludeEnd("ide");
  33649. messageSends: []
  33650. }),
  33651. $globals.MethodNode);
  33652. $core.addMethod(
  33653. $core.method({
  33654. selector: "sendIndexes",
  33655. protocol: 'accessing',
  33656. fn: function (){
  33657. var self=this;
  33658. var $1;
  33659. $1=self["@sendIndexes"];
  33660. return $1;
  33661. },
  33662. //>>excludeStart("ide", pragmas.excludeIdeData);
  33663. args: [],
  33664. source: "sendIndexes\x0a\x09^ sendIndexes",
  33665. referencedClasses: [],
  33666. //>>excludeEnd("ide");
  33667. messageSends: []
  33668. }),
  33669. $globals.MethodNode);
  33670. $core.addMethod(
  33671. $core.method({
  33672. selector: "sendIndexes:",
  33673. protocol: 'accessing',
  33674. fn: function (aDictionary){
  33675. var self=this;
  33676. self["@sendIndexes"]=aDictionary;
  33677. return self;
  33678. },
  33679. //>>excludeStart("ide", pragmas.excludeIdeData);
  33680. args: ["aDictionary"],
  33681. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  33682. referencedClasses: [],
  33683. //>>excludeEnd("ide");
  33684. messageSends: []
  33685. }),
  33686. $globals.MethodNode);
  33687. $core.addMethod(
  33688. $core.method({
  33689. selector: "sequenceNode",
  33690. protocol: 'accessing',
  33691. fn: function (){
  33692. var self=this;
  33693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33694. return $core.withContext(function($ctx1) {
  33695. //>>excludeEnd("ctx");
  33696. var $1;
  33697. var $early={};
  33698. try {
  33699. $recv(self._nodes())._do_((function(each){
  33700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33701. return $core.withContext(function($ctx2) {
  33702. //>>excludeEnd("ctx");
  33703. $1=$recv(each)._isSequenceNode();
  33704. if($core.assert($1)){
  33705. throw $early=[each];
  33706. };
  33707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33708. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33709. //>>excludeEnd("ctx");
  33710. }));
  33711. return nil;
  33712. }
  33713. catch(e) {if(e===$early)return e[0]; throw e}
  33714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33715. }, function($ctx1) {$ctx1.fill(self,"sequenceNode",{},$globals.MethodNode)});
  33716. //>>excludeEnd("ctx");
  33717. },
  33718. //>>excludeStart("ide", pragmas.excludeIdeData);
  33719. args: [],
  33720. source: "sequenceNode\x0a\x09self nodes do: [ :each |\x0a\x09\x09each isSequenceNode ifTrue: [ ^ each ] ].\x0a\x09\x09\x0a\x09^ nil",
  33721. referencedClasses: [],
  33722. //>>excludeEnd("ide");
  33723. messageSends: ["do:", "nodes", "ifTrue:", "isSequenceNode"]
  33724. }),
  33725. $globals.MethodNode);
  33726. $core.addMethod(
  33727. $core.method({
  33728. selector: "source",
  33729. protocol: 'accessing',
  33730. fn: function (){
  33731. var self=this;
  33732. var $1;
  33733. $1=self["@source"];
  33734. return $1;
  33735. },
  33736. //>>excludeStart("ide", pragmas.excludeIdeData);
  33737. args: [],
  33738. source: "source\x0a\x09^ source",
  33739. referencedClasses: [],
  33740. //>>excludeEnd("ide");
  33741. messageSends: []
  33742. }),
  33743. $globals.MethodNode);
  33744. $core.addMethod(
  33745. $core.method({
  33746. selector: "source:",
  33747. protocol: 'accessing',
  33748. fn: function (aString){
  33749. var self=this;
  33750. self["@source"]=aString;
  33751. return self;
  33752. },
  33753. //>>excludeStart("ide", pragmas.excludeIdeData);
  33754. args: ["aString"],
  33755. source: "source: aString\x0a\x09source := aString",
  33756. referencedClasses: [],
  33757. //>>excludeEnd("ide");
  33758. messageSends: []
  33759. }),
  33760. $globals.MethodNode);
  33761. $core.addMethod(
  33762. $core.method({
  33763. selector: "superSends",
  33764. protocol: 'accessing',
  33765. fn: function (){
  33766. var self=this;
  33767. var $1;
  33768. $1=self["@superSends"];
  33769. return $1;
  33770. },
  33771. //>>excludeStart("ide", pragmas.excludeIdeData);
  33772. args: [],
  33773. source: "superSends\x0a\x09^ superSends",
  33774. referencedClasses: [],
  33775. //>>excludeEnd("ide");
  33776. messageSends: []
  33777. }),
  33778. $globals.MethodNode);
  33779. $core.addMethod(
  33780. $core.method({
  33781. selector: "superSends:",
  33782. protocol: 'accessing',
  33783. fn: function (aCollection){
  33784. var self=this;
  33785. self["@superSends"]=aCollection;
  33786. return self;
  33787. },
  33788. //>>excludeStart("ide", pragmas.excludeIdeData);
  33789. args: ["aCollection"],
  33790. source: "superSends: aCollection\x0a\x09superSends := aCollection",
  33791. referencedClasses: [],
  33792. //>>excludeEnd("ide");
  33793. messageSends: []
  33794. }),
  33795. $globals.MethodNode);
  33796. $core.addClass('ReturnNode', $globals.Node, ['scope'], 'Compiler-AST');
  33797. //>>excludeStart("ide", pragmas.excludeIdeData);
  33798. $globals.ReturnNode.comment="I represent an return node. At the AST level, there is not difference between a local return or non-local return.";
  33799. //>>excludeEnd("ide");
  33800. $core.addMethod(
  33801. $core.method({
  33802. selector: "accept:",
  33803. protocol: 'visiting',
  33804. fn: function (aVisitor){
  33805. var self=this;
  33806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33807. return $core.withContext(function($ctx1) {
  33808. //>>excludeEnd("ctx");
  33809. var $1;
  33810. $1=$recv(aVisitor)._visitReturnNode_(self);
  33811. return $1;
  33812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33813. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.ReturnNode)});
  33814. //>>excludeEnd("ctx");
  33815. },
  33816. //>>excludeStart("ide", pragmas.excludeIdeData);
  33817. args: ["aVisitor"],
  33818. source: "accept: aVisitor\x0a\x09^ aVisitor visitReturnNode: self",
  33819. referencedClasses: [],
  33820. //>>excludeEnd("ide");
  33821. messageSends: ["visitReturnNode:"]
  33822. }),
  33823. $globals.ReturnNode);
  33824. $core.addMethod(
  33825. $core.method({
  33826. selector: "isReturnNode",
  33827. protocol: 'testing',
  33828. fn: function (){
  33829. var self=this;
  33830. return true;
  33831. },
  33832. //>>excludeStart("ide", pragmas.excludeIdeData);
  33833. args: [],
  33834. source: "isReturnNode\x0a\x09^ true",
  33835. referencedClasses: [],
  33836. //>>excludeEnd("ide");
  33837. messageSends: []
  33838. }),
  33839. $globals.ReturnNode);
  33840. $core.addMethod(
  33841. $core.method({
  33842. selector: "nonLocalReturn",
  33843. protocol: 'testing',
  33844. fn: function (){
  33845. var self=this;
  33846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33847. return $core.withContext(function($ctx1) {
  33848. //>>excludeEnd("ctx");
  33849. var $1;
  33850. $1=$recv($recv(self._scope())._isMethodScope())._not();
  33851. return $1;
  33852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33853. }, function($ctx1) {$ctx1.fill(self,"nonLocalReturn",{},$globals.ReturnNode)});
  33854. //>>excludeEnd("ctx");
  33855. },
  33856. //>>excludeStart("ide", pragmas.excludeIdeData);
  33857. args: [],
  33858. source: "nonLocalReturn\x0a\x09^ self scope isMethodScope not",
  33859. referencedClasses: [],
  33860. //>>excludeEnd("ide");
  33861. messageSends: ["not", "isMethodScope", "scope"]
  33862. }),
  33863. $globals.ReturnNode);
  33864. $core.addMethod(
  33865. $core.method({
  33866. selector: "scope",
  33867. protocol: 'accessing',
  33868. fn: function (){
  33869. var self=this;
  33870. var $1;
  33871. $1=self["@scope"];
  33872. return $1;
  33873. },
  33874. //>>excludeStart("ide", pragmas.excludeIdeData);
  33875. args: [],
  33876. source: "scope\x0a\x09^ scope",
  33877. referencedClasses: [],
  33878. //>>excludeEnd("ide");
  33879. messageSends: []
  33880. }),
  33881. $globals.ReturnNode);
  33882. $core.addMethod(
  33883. $core.method({
  33884. selector: "scope:",
  33885. protocol: 'accessing',
  33886. fn: function (aLexicalScope){
  33887. var self=this;
  33888. self["@scope"]=aLexicalScope;
  33889. return self;
  33890. },
  33891. //>>excludeStart("ide", pragmas.excludeIdeData);
  33892. args: ["aLexicalScope"],
  33893. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  33894. referencedClasses: [],
  33895. //>>excludeEnd("ide");
  33896. messageSends: []
  33897. }),
  33898. $globals.ReturnNode);
  33899. $core.addClass('SendNode', $globals.Node, ['selector', 'arguments', 'receiver', 'superSend', 'index'], 'Compiler-AST');
  33900. //>>excludeStart("ide", pragmas.excludeIdeData);
  33901. $globals.SendNode.comment="I represent an message send node.";
  33902. //>>excludeEnd("ide");
  33903. $core.addMethod(
  33904. $core.method({
  33905. selector: "accept:",
  33906. protocol: 'visiting',
  33907. fn: function (aVisitor){
  33908. var self=this;
  33909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33910. return $core.withContext(function($ctx1) {
  33911. //>>excludeEnd("ctx");
  33912. var $1;
  33913. $1=$recv(aVisitor)._visitSendNode_(self);
  33914. return $1;
  33915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33916. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.SendNode)});
  33917. //>>excludeEnd("ctx");
  33918. },
  33919. //>>excludeStart("ide", pragmas.excludeIdeData);
  33920. args: ["aVisitor"],
  33921. source: "accept: aVisitor\x0a\x09^ aVisitor visitSendNode: self",
  33922. referencedClasses: [],
  33923. //>>excludeEnd("ide");
  33924. messageSends: ["visitSendNode:"]
  33925. }),
  33926. $globals.SendNode);
  33927. $core.addMethod(
  33928. $core.method({
  33929. selector: "arguments",
  33930. protocol: 'accessing',
  33931. fn: function (){
  33932. var self=this;
  33933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33934. return $core.withContext(function($ctx1) {
  33935. //>>excludeEnd("ctx");
  33936. var $2,$1,$receiver;
  33937. $2=self["@arguments"];
  33938. if(($receiver = $2) == null || $receiver.isNil){
  33939. self["@arguments"]=[];
  33940. $1=self["@arguments"];
  33941. } else {
  33942. $1=$2;
  33943. };
  33944. return $1;
  33945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33946. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.SendNode)});
  33947. //>>excludeEnd("ctx");
  33948. },
  33949. //>>excludeStart("ide", pragmas.excludeIdeData);
  33950. args: [],
  33951. source: "arguments\x0a\x09^ arguments ifNil: [ arguments := #() ]",
  33952. referencedClasses: [],
  33953. //>>excludeEnd("ide");
  33954. messageSends: ["ifNil:"]
  33955. }),
  33956. $globals.SendNode);
  33957. $core.addMethod(
  33958. $core.method({
  33959. selector: "arguments:",
  33960. protocol: 'accessing',
  33961. fn: function (aCollection){
  33962. var self=this;
  33963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33964. return $core.withContext(function($ctx1) {
  33965. //>>excludeEnd("ctx");
  33966. self["@arguments"]=aCollection;
  33967. $recv(aCollection)._do_((function(each){
  33968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33969. return $core.withContext(function($ctx2) {
  33970. //>>excludeEnd("ctx");
  33971. return $recv(each)._parent_(self);
  33972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33973. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  33974. //>>excludeEnd("ctx");
  33975. }));
  33976. return self;
  33977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  33978. }, function($ctx1) {$ctx1.fill(self,"arguments:",{aCollection:aCollection},$globals.SendNode)});
  33979. //>>excludeEnd("ctx");
  33980. },
  33981. //>>excludeStart("ide", pragmas.excludeIdeData);
  33982. args: ["aCollection"],
  33983. source: "arguments: aCollection\x0a\x09arguments := aCollection.\x0a\x09aCollection do: [ :each | each parent: self ]",
  33984. referencedClasses: [],
  33985. //>>excludeEnd("ide");
  33986. messageSends: ["do:", "parent:"]
  33987. }),
  33988. $globals.SendNode);
  33989. $core.addMethod(
  33990. $core.method({
  33991. selector: "cascadeNodeWithMessages:",
  33992. protocol: 'accessing',
  33993. fn: function (aCollection){
  33994. var self=this;
  33995. var first;
  33996. function $SendNode(){return $globals.SendNode||(typeof SendNode=="undefined"?nil:SendNode)}
  33997. function $CascadeNode(){return $globals.CascadeNode||(typeof CascadeNode=="undefined"?nil:CascadeNode)}
  33998. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  33999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34000. return $core.withContext(function($ctx1) {
  34001. //>>excludeEnd("ctx");
  34002. var $1,$2,$4,$5,$3;
  34003. $1=$recv($SendNode())._new();
  34004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34005. $ctx1.sendIdx["new"]=1;
  34006. //>>excludeEnd("ctx");
  34007. $recv($1)._selector_(self._selector());
  34008. $recv($1)._arguments_(self._arguments());
  34009. $2=$recv($1)._yourself();
  34010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34011. $ctx1.sendIdx["yourself"]=1;
  34012. //>>excludeEnd("ctx");
  34013. first=$2;
  34014. $4=$recv($CascadeNode())._new();
  34015. $recv($4)._receiver_(self._receiver());
  34016. $recv($4)._nodes_($recv($recv($Array())._with_(first)).__comma(aCollection));
  34017. $5=$recv($4)._yourself();
  34018. $3=$5;
  34019. return $3;
  34020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34021. }, function($ctx1) {$ctx1.fill(self,"cascadeNodeWithMessages:",{aCollection:aCollection,first:first},$globals.SendNode)});
  34022. //>>excludeEnd("ctx");
  34023. },
  34024. //>>excludeStart("ide", pragmas.excludeIdeData);
  34025. args: ["aCollection"],
  34026. source: "cascadeNodeWithMessages: aCollection\x0a\x09| first |\x0a\x09first := SendNode new\x0a\x09\x09selector: self selector;\x0a\x09\x09arguments: self arguments;\x0a\x09\x09yourself.\x0a\x09^ CascadeNode new\x0a\x09\x09receiver: self receiver;\x0a\x09\x09nodes: (Array with: first), aCollection;\x0a\x09\x09yourself",
  34027. referencedClasses: ["SendNode", "CascadeNode", "Array"],
  34028. //>>excludeEnd("ide");
  34029. messageSends: ["selector:", "new", "selector", "arguments:", "arguments", "yourself", "receiver:", "receiver", "nodes:", ",", "with:"]
  34030. }),
  34031. $globals.SendNode);
  34032. $core.addMethod(
  34033. $core.method({
  34034. selector: "index",
  34035. protocol: 'accessing',
  34036. fn: function (){
  34037. var self=this;
  34038. var $1;
  34039. $1=self["@index"];
  34040. return $1;
  34041. },
  34042. //>>excludeStart("ide", pragmas.excludeIdeData);
  34043. args: [],
  34044. source: "index\x0a\x09^ index",
  34045. referencedClasses: [],
  34046. //>>excludeEnd("ide");
  34047. messageSends: []
  34048. }),
  34049. $globals.SendNode);
  34050. $core.addMethod(
  34051. $core.method({
  34052. selector: "index:",
  34053. protocol: 'accessing',
  34054. fn: function (anInteger){
  34055. var self=this;
  34056. self["@index"]=anInteger;
  34057. return self;
  34058. },
  34059. //>>excludeStart("ide", pragmas.excludeIdeData);
  34060. args: ["anInteger"],
  34061. source: "index: anInteger\x0a\x09index := anInteger",
  34062. referencedClasses: [],
  34063. //>>excludeEnd("ide");
  34064. messageSends: []
  34065. }),
  34066. $globals.SendNode);
  34067. $core.addMethod(
  34068. $core.method({
  34069. selector: "isCascadeSendNode",
  34070. protocol: 'testing',
  34071. fn: function (){
  34072. var self=this;
  34073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34074. return $core.withContext(function($ctx1) {
  34075. //>>excludeEnd("ctx");
  34076. var $1;
  34077. $1=$recv(self._parent())._isCascadeNode();
  34078. return $1;
  34079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34080. }, function($ctx1) {$ctx1.fill(self,"isCascadeSendNode",{},$globals.SendNode)});
  34081. //>>excludeEnd("ctx");
  34082. },
  34083. //>>excludeStart("ide", pragmas.excludeIdeData);
  34084. args: [],
  34085. source: "isCascadeSendNode\x0a\x09^ self parent isCascadeNode",
  34086. referencedClasses: [],
  34087. //>>excludeEnd("ide");
  34088. messageSends: ["isCascadeNode", "parent"]
  34089. }),
  34090. $globals.SendNode);
  34091. $core.addMethod(
  34092. $core.method({
  34093. selector: "isNavigationNode",
  34094. protocol: 'testing',
  34095. fn: function (){
  34096. var self=this;
  34097. return true;
  34098. },
  34099. //>>excludeStart("ide", pragmas.excludeIdeData);
  34100. args: [],
  34101. source: "isNavigationNode\x0a\x09^ true",
  34102. referencedClasses: [],
  34103. //>>excludeEnd("ide");
  34104. messageSends: []
  34105. }),
  34106. $globals.SendNode);
  34107. $core.addMethod(
  34108. $core.method({
  34109. selector: "isSendNode",
  34110. protocol: 'testing',
  34111. fn: function (){
  34112. var self=this;
  34113. return true;
  34114. },
  34115. //>>excludeStart("ide", pragmas.excludeIdeData);
  34116. args: [],
  34117. source: "isSendNode\x0a\x09^ true",
  34118. referencedClasses: [],
  34119. //>>excludeEnd("ide");
  34120. messageSends: []
  34121. }),
  34122. $globals.SendNode);
  34123. $core.addMethod(
  34124. $core.method({
  34125. selector: "navigationLink",
  34126. protocol: 'accessing',
  34127. fn: function (){
  34128. var self=this;
  34129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34130. return $core.withContext(function($ctx1) {
  34131. //>>excludeEnd("ctx");
  34132. var $1;
  34133. $1=self._selector();
  34134. return $1;
  34135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34136. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{},$globals.SendNode)});
  34137. //>>excludeEnd("ctx");
  34138. },
  34139. //>>excludeStart("ide", pragmas.excludeIdeData);
  34140. args: [],
  34141. source: "navigationLink\x0a\x09^ self selector",
  34142. referencedClasses: [],
  34143. //>>excludeEnd("ide");
  34144. messageSends: ["selector"]
  34145. }),
  34146. $globals.SendNode);
  34147. $core.addMethod(
  34148. $core.method({
  34149. selector: "nodes",
  34150. protocol: 'accessing',
  34151. fn: function (){
  34152. var self=this;
  34153. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  34154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34155. return $core.withContext(function($ctx1) {
  34156. //>>excludeEnd("ctx");
  34157. var $1,$3,$2,$5,$6,$4,$receiver;
  34158. $1=self._receiver();
  34159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34160. $ctx1.sendIdx["receiver"]=1;
  34161. //>>excludeEnd("ctx");
  34162. if(($receiver = $1) == null || $receiver.isNil){
  34163. $3=self._arguments();
  34164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34165. $ctx1.sendIdx["arguments"]=1;
  34166. //>>excludeEnd("ctx");
  34167. $2=$recv($3)._copy();
  34168. return $2;
  34169. } else {
  34170. $1;
  34171. };
  34172. $5=$recv($Array())._with_(self._receiver());
  34173. $recv($5)._addAll_(self._arguments());
  34174. $6=$recv($5)._yourself();
  34175. $4=$6;
  34176. return $4;
  34177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34178. }, function($ctx1) {$ctx1.fill(self,"nodes",{},$globals.SendNode)});
  34179. //>>excludeEnd("ctx");
  34180. },
  34181. //>>excludeStart("ide", pragmas.excludeIdeData);
  34182. args: [],
  34183. source: "nodes\x0a\x09self receiver ifNil: [ ^ self arguments copy ].\x0a\x09\x0a\x09^ (Array with: self receiver)\x0a\x09\x09addAll: self arguments;\x0a\x09\x09yourself",
  34184. referencedClasses: ["Array"],
  34185. //>>excludeEnd("ide");
  34186. messageSends: ["ifNil:", "receiver", "copy", "arguments", "addAll:", "with:", "yourself"]
  34187. }),
  34188. $globals.SendNode);
  34189. $core.addMethod(
  34190. $core.method({
  34191. selector: "receiver",
  34192. protocol: 'accessing',
  34193. fn: function (){
  34194. var self=this;
  34195. var $1;
  34196. $1=self["@receiver"];
  34197. return $1;
  34198. },
  34199. //>>excludeStart("ide", pragmas.excludeIdeData);
  34200. args: [],
  34201. source: "receiver\x0a\x09^ receiver",
  34202. referencedClasses: [],
  34203. //>>excludeEnd("ide");
  34204. messageSends: []
  34205. }),
  34206. $globals.SendNode);
  34207. $core.addMethod(
  34208. $core.method({
  34209. selector: "receiver:",
  34210. protocol: 'accessing',
  34211. fn: function (aNode){
  34212. var self=this;
  34213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34214. return $core.withContext(function($ctx1) {
  34215. //>>excludeEnd("ctx");
  34216. var $1;
  34217. self["@receiver"]=aNode;
  34218. $1=$recv(aNode)._isNode();
  34219. if($core.assert($1)){
  34220. $recv(aNode)._parent_(self);
  34221. };
  34222. return self;
  34223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34224. }, function($ctx1) {$ctx1.fill(self,"receiver:",{aNode:aNode},$globals.SendNode)});
  34225. //>>excludeEnd("ctx");
  34226. },
  34227. //>>excludeStart("ide", pragmas.excludeIdeData);
  34228. args: ["aNode"],
  34229. source: "receiver: aNode\x0a\x09receiver := aNode.\x0a\x09aNode isNode ifTrue: [\x0a\x09\x09aNode parent: self ]",
  34230. referencedClasses: [],
  34231. //>>excludeEnd("ide");
  34232. messageSends: ["ifTrue:", "isNode", "parent:"]
  34233. }),
  34234. $globals.SendNode);
  34235. $core.addMethod(
  34236. $core.method({
  34237. selector: "requiresSmalltalkContext",
  34238. protocol: 'testing',
  34239. fn: function (){
  34240. var self=this;
  34241. return true;
  34242. },
  34243. //>>excludeStart("ide", pragmas.excludeIdeData);
  34244. args: [],
  34245. source: "requiresSmalltalkContext\x0a\x09^ true",
  34246. referencedClasses: [],
  34247. //>>excludeEnd("ide");
  34248. messageSends: []
  34249. }),
  34250. $globals.SendNode);
  34251. $core.addMethod(
  34252. $core.method({
  34253. selector: "selector",
  34254. protocol: 'accessing',
  34255. fn: function (){
  34256. var self=this;
  34257. var $1;
  34258. $1=self["@selector"];
  34259. return $1;
  34260. },
  34261. //>>excludeStart("ide", pragmas.excludeIdeData);
  34262. args: [],
  34263. source: "selector\x0a\x09^ selector",
  34264. referencedClasses: [],
  34265. //>>excludeEnd("ide");
  34266. messageSends: []
  34267. }),
  34268. $globals.SendNode);
  34269. $core.addMethod(
  34270. $core.method({
  34271. selector: "selector:",
  34272. protocol: 'accessing',
  34273. fn: function (aString){
  34274. var self=this;
  34275. self["@selector"]=aString;
  34276. return self;
  34277. },
  34278. //>>excludeStart("ide", pragmas.excludeIdeData);
  34279. args: ["aString"],
  34280. source: "selector: aString\x0a\x09selector := aString",
  34281. referencedClasses: [],
  34282. //>>excludeEnd("ide");
  34283. messageSends: []
  34284. }),
  34285. $globals.SendNode);
  34286. $core.addMethod(
  34287. $core.method({
  34288. selector: "shouldBeAliased",
  34289. protocol: 'testing',
  34290. fn: function (){
  34291. var self=this;
  34292. var sends;
  34293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34294. return $core.withContext(function($ctx1) {
  34295. //>>excludeEnd("ctx");
  34296. var $2,$1;
  34297. sends=$recv($recv($recv(self._method())._sendIndexes())._at_(self._selector()))._size();
  34298. $2=(
  34299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34300. $ctx1.supercall = true,
  34301. //>>excludeEnd("ctx");
  34302. $globals.SendNode.superclass.fn.prototype._shouldBeAliased.apply($recv(self), []));
  34303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34304. $ctx1.supercall = false;
  34305. //>>excludeEnd("ctx");;
  34306. $1=$recv($2)._or_((function(){
  34307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34308. return $core.withContext(function($ctx2) {
  34309. //>>excludeEnd("ctx");
  34310. return $recv(self._isReferenced())._and_((function(){
  34311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34312. return $core.withContext(function($ctx3) {
  34313. //>>excludeEnd("ctx");
  34314. return $recv($recv($recv(sends).__gt((1)))._and_((function(){
  34315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34316. return $core.withContext(function($ctx4) {
  34317. //>>excludeEnd("ctx");
  34318. return $recv(self._index()).__lt(sends);
  34319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34320. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  34321. //>>excludeEnd("ctx");
  34322. })))._or_((function(){
  34323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34324. return $core.withContext(function($ctx4) {
  34325. //>>excludeEnd("ctx");
  34326. return self._superSend();
  34327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34328. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,4)});
  34329. //>>excludeEnd("ctx");
  34330. }));
  34331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34332. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  34333. //>>excludeEnd("ctx");
  34334. }));
  34335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34336. $ctx2.sendIdx["and:"]=1;
  34337. //>>excludeEnd("ctx");
  34338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34339. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  34340. //>>excludeEnd("ctx");
  34341. }));
  34342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34343. $ctx1.sendIdx["or:"]=1;
  34344. //>>excludeEnd("ctx");
  34345. return $1;
  34346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34347. }, function($ctx1) {$ctx1.fill(self,"shouldBeAliased",{sends:sends},$globals.SendNode)});
  34348. //>>excludeEnd("ctx");
  34349. },
  34350. //>>excludeStart("ide", pragmas.excludeIdeData);
  34351. args: [],
  34352. source: "shouldBeAliased\x0a\x09\x22Because we keep track of send indexes, some send nodes need additional care for aliasing. \x0a\x09See IRJSVisitor >> visitIRSend:\x22\x0a\x09\x0a\x09| sends |\x0a\x09\x0a\x09sends := (self method sendIndexes at: self selector) size.\x0a\x09\x0a\x09^ (super shouldBeAliased or: [\x0a\x09\x09self isReferenced and: [\x0a\x09\x09\x09(sends > 1 and: [ self index < sends ])\x0a\x09\x09\x09\x09or: [ self superSend ] ] ])",
  34353. referencedClasses: [],
  34354. //>>excludeEnd("ide");
  34355. messageSends: ["size", "at:", "sendIndexes", "method", "selector", "or:", "shouldBeAliased", "and:", "isReferenced", ">", "<", "index", "superSend"]
  34356. }),
  34357. $globals.SendNode);
  34358. $core.addMethod(
  34359. $core.method({
  34360. selector: "stopOnStepping",
  34361. protocol: 'testing',
  34362. fn: function (){
  34363. var self=this;
  34364. return true;
  34365. },
  34366. //>>excludeStart("ide", pragmas.excludeIdeData);
  34367. args: [],
  34368. source: "stopOnStepping\x0a\x09^ true",
  34369. referencedClasses: [],
  34370. //>>excludeEnd("ide");
  34371. messageSends: []
  34372. }),
  34373. $globals.SendNode);
  34374. $core.addMethod(
  34375. $core.method({
  34376. selector: "superSend",
  34377. protocol: 'accessing',
  34378. fn: function (){
  34379. var self=this;
  34380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34381. return $core.withContext(function($ctx1) {
  34382. //>>excludeEnd("ctx");
  34383. var $2,$1,$receiver;
  34384. $2=self["@superSend"];
  34385. if(($receiver = $2) == null || $receiver.isNil){
  34386. $1=false;
  34387. } else {
  34388. $1=$2;
  34389. };
  34390. return $1;
  34391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34392. }, function($ctx1) {$ctx1.fill(self,"superSend",{},$globals.SendNode)});
  34393. //>>excludeEnd("ctx");
  34394. },
  34395. //>>excludeStart("ide", pragmas.excludeIdeData);
  34396. args: [],
  34397. source: "superSend\x0a\x09^ superSend ifNil: [ false ]",
  34398. referencedClasses: [],
  34399. //>>excludeEnd("ide");
  34400. messageSends: ["ifNil:"]
  34401. }),
  34402. $globals.SendNode);
  34403. $core.addMethod(
  34404. $core.method({
  34405. selector: "superSend:",
  34406. protocol: 'accessing',
  34407. fn: function (aBoolean){
  34408. var self=this;
  34409. self["@superSend"]=aBoolean;
  34410. return self;
  34411. },
  34412. //>>excludeStart("ide", pragmas.excludeIdeData);
  34413. args: ["aBoolean"],
  34414. source: "superSend: aBoolean\x0a\x09superSend := aBoolean",
  34415. referencedClasses: [],
  34416. //>>excludeEnd("ide");
  34417. messageSends: []
  34418. }),
  34419. $globals.SendNode);
  34420. $core.addMethod(
  34421. $core.method({
  34422. selector: "valueForReceiver:",
  34423. protocol: 'accessing',
  34424. fn: function (anObject){
  34425. var self=this;
  34426. function $SendNode(){return $globals.SendNode||(typeof SendNode=="undefined"?nil:SendNode)}
  34427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34428. return $core.withContext(function($ctx1) {
  34429. //>>excludeEnd("ctx");
  34430. var $2,$3,$5,$4,$6,$1,$receiver;
  34431. $2=$recv($SendNode())._new();
  34432. $recv($2)._position_(self._position());
  34433. $recv($2)._source_(self._source());
  34434. $3=$2;
  34435. $5=self._receiver();
  34436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34437. $ctx1.sendIdx["receiver"]=1;
  34438. //>>excludeEnd("ctx");
  34439. if(($receiver = $5) == null || $receiver.isNil){
  34440. $4=anObject;
  34441. } else {
  34442. $4=$recv(self._receiver())._valueForReceiver_(anObject);
  34443. };
  34444. $recv($3)._receiver_($4);
  34445. $recv($2)._selector_(self._selector());
  34446. $recv($2)._arguments_(self._arguments());
  34447. $6=$recv($2)._yourself();
  34448. $1=$6;
  34449. return $1;
  34450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34451. }, function($ctx1) {$ctx1.fill(self,"valueForReceiver:",{anObject:anObject},$globals.SendNode)});
  34452. //>>excludeEnd("ctx");
  34453. },
  34454. //>>excludeStart("ide", pragmas.excludeIdeData);
  34455. args: ["anObject"],
  34456. source: "valueForReceiver: anObject\x0a\x09^ SendNode new\x0a\x09\x09position: self position;\x0a\x09\x09source: self source;\x0a\x09\x09receiver: (self receiver\x0a\x09\x09ifNil: [ anObject ] \x0a\x09\x09ifNotNil: [ self receiver valueForReceiver: anObject ]);\x0a\x09\x09selector: self selector;\x0a\x09\x09arguments: self arguments;\x0a\x09\x09yourself",
  34457. referencedClasses: ["SendNode"],
  34458. //>>excludeEnd("ide");
  34459. messageSends: ["position:", "new", "position", "source:", "source", "receiver:", "ifNil:ifNotNil:", "receiver", "valueForReceiver:", "selector:", "selector", "arguments:", "arguments", "yourself"]
  34460. }),
  34461. $globals.SendNode);
  34462. $core.addClass('SequenceNode', $globals.Node, ['temps', 'scope'], 'Compiler-AST');
  34463. //>>excludeStart("ide", pragmas.excludeIdeData);
  34464. $globals.SequenceNode.comment="I represent an sequence node. A sequence represent a set of instructions inside the same scope (the method scope or a block scope).";
  34465. //>>excludeEnd("ide");
  34466. $core.addMethod(
  34467. $core.method({
  34468. selector: "accept:",
  34469. protocol: 'visiting',
  34470. fn: function (aVisitor){
  34471. var self=this;
  34472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34473. return $core.withContext(function($ctx1) {
  34474. //>>excludeEnd("ctx");
  34475. var $1;
  34476. $1=$recv(aVisitor)._visitSequenceNode_(self);
  34477. return $1;
  34478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34479. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.SequenceNode)});
  34480. //>>excludeEnd("ctx");
  34481. },
  34482. //>>excludeStart("ide", pragmas.excludeIdeData);
  34483. args: ["aVisitor"],
  34484. source: "accept: aVisitor\x0a\x09^ aVisitor visitSequenceNode: self",
  34485. referencedClasses: [],
  34486. //>>excludeEnd("ide");
  34487. messageSends: ["visitSequenceNode:"]
  34488. }),
  34489. $globals.SequenceNode);
  34490. $core.addMethod(
  34491. $core.method({
  34492. selector: "asBlockSequenceNode",
  34493. protocol: 'converting',
  34494. fn: function (){
  34495. var self=this;
  34496. function $BlockSequenceNode(){return $globals.BlockSequenceNode||(typeof BlockSequenceNode=="undefined"?nil:BlockSequenceNode)}
  34497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34498. return $core.withContext(function($ctx1) {
  34499. //>>excludeEnd("ctx");
  34500. var $2,$3,$1;
  34501. $2=$recv($BlockSequenceNode())._new();
  34502. $recv($2)._position_(self._position());
  34503. $recv($2)._source_(self._source());
  34504. $recv($2)._nodes_(self._nodes());
  34505. $recv($2)._temps_(self._temps());
  34506. $3=$recv($2)._yourself();
  34507. $1=$3;
  34508. return $1;
  34509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34510. }, function($ctx1) {$ctx1.fill(self,"asBlockSequenceNode",{},$globals.SequenceNode)});
  34511. //>>excludeEnd("ctx");
  34512. },
  34513. //>>excludeStart("ide", pragmas.excludeIdeData);
  34514. args: [],
  34515. source: "asBlockSequenceNode\x0a\x09^ BlockSequenceNode new\x0a\x09\x09position: self position;\x0a\x09\x09source: self source;\x0a\x09\x09nodes: self nodes;\x0a\x09\x09temps: self temps;\x0a\x09\x09yourself",
  34516. referencedClasses: ["BlockSequenceNode"],
  34517. //>>excludeEnd("ide");
  34518. messageSends: ["position:", "new", "position", "source:", "source", "nodes:", "nodes", "temps:", "temps", "yourself"]
  34519. }),
  34520. $globals.SequenceNode);
  34521. $core.addMethod(
  34522. $core.method({
  34523. selector: "isSequenceNode",
  34524. protocol: 'testing',
  34525. fn: function (){
  34526. var self=this;
  34527. return true;
  34528. },
  34529. //>>excludeStart("ide", pragmas.excludeIdeData);
  34530. args: [],
  34531. source: "isSequenceNode\x0a\x09^ true",
  34532. referencedClasses: [],
  34533. //>>excludeEnd("ide");
  34534. messageSends: []
  34535. }),
  34536. $globals.SequenceNode);
  34537. $core.addMethod(
  34538. $core.method({
  34539. selector: "scope",
  34540. protocol: 'accessing',
  34541. fn: function (){
  34542. var self=this;
  34543. var $1;
  34544. $1=self["@scope"];
  34545. return $1;
  34546. },
  34547. //>>excludeStart("ide", pragmas.excludeIdeData);
  34548. args: [],
  34549. source: "scope\x0a\x09^ scope",
  34550. referencedClasses: [],
  34551. //>>excludeEnd("ide");
  34552. messageSends: []
  34553. }),
  34554. $globals.SequenceNode);
  34555. $core.addMethod(
  34556. $core.method({
  34557. selector: "scope:",
  34558. protocol: 'accessing',
  34559. fn: function (aLexicalScope){
  34560. var self=this;
  34561. self["@scope"]=aLexicalScope;
  34562. return self;
  34563. },
  34564. //>>excludeStart("ide", pragmas.excludeIdeData);
  34565. args: ["aLexicalScope"],
  34566. source: "scope: aLexicalScope\x0a\x09scope := aLexicalScope",
  34567. referencedClasses: [],
  34568. //>>excludeEnd("ide");
  34569. messageSends: []
  34570. }),
  34571. $globals.SequenceNode);
  34572. $core.addMethod(
  34573. $core.method({
  34574. selector: "temps",
  34575. protocol: 'accessing',
  34576. fn: function (){
  34577. var self=this;
  34578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34579. return $core.withContext(function($ctx1) {
  34580. //>>excludeEnd("ctx");
  34581. var $2,$1,$receiver;
  34582. $2=self["@temps"];
  34583. if(($receiver = $2) == null || $receiver.isNil){
  34584. $1=[];
  34585. } else {
  34586. $1=$2;
  34587. };
  34588. return $1;
  34589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34590. }, function($ctx1) {$ctx1.fill(self,"temps",{},$globals.SequenceNode)});
  34591. //>>excludeEnd("ctx");
  34592. },
  34593. //>>excludeStart("ide", pragmas.excludeIdeData);
  34594. args: [],
  34595. source: "temps\x0a\x09^ temps ifNil: [ #() ]",
  34596. referencedClasses: [],
  34597. //>>excludeEnd("ide");
  34598. messageSends: ["ifNil:"]
  34599. }),
  34600. $globals.SequenceNode);
  34601. $core.addMethod(
  34602. $core.method({
  34603. selector: "temps:",
  34604. protocol: 'accessing',
  34605. fn: function (aCollection){
  34606. var self=this;
  34607. self["@temps"]=aCollection;
  34608. return self;
  34609. },
  34610. //>>excludeStart("ide", pragmas.excludeIdeData);
  34611. args: ["aCollection"],
  34612. source: "temps: aCollection\x0a\x09temps := aCollection",
  34613. referencedClasses: [],
  34614. //>>excludeEnd("ide");
  34615. messageSends: []
  34616. }),
  34617. $globals.SequenceNode);
  34618. $core.addClass('BlockSequenceNode', $globals.SequenceNode, [], 'Compiler-AST');
  34619. //>>excludeStart("ide", pragmas.excludeIdeData);
  34620. $globals.BlockSequenceNode.comment="I represent an special sequence node for block scopes.";
  34621. //>>excludeEnd("ide");
  34622. $core.addMethod(
  34623. $core.method({
  34624. selector: "accept:",
  34625. protocol: 'visiting',
  34626. fn: function (aVisitor){
  34627. var self=this;
  34628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34629. return $core.withContext(function($ctx1) {
  34630. //>>excludeEnd("ctx");
  34631. var $1;
  34632. $1=$recv(aVisitor)._visitBlockSequenceNode_(self);
  34633. return $1;
  34634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34635. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.BlockSequenceNode)});
  34636. //>>excludeEnd("ctx");
  34637. },
  34638. //>>excludeStart("ide", pragmas.excludeIdeData);
  34639. args: ["aVisitor"],
  34640. source: "accept: aVisitor\x0a\x09^ aVisitor visitBlockSequenceNode: self",
  34641. referencedClasses: [],
  34642. //>>excludeEnd("ide");
  34643. messageSends: ["visitBlockSequenceNode:"]
  34644. }),
  34645. $globals.BlockSequenceNode);
  34646. $core.addMethod(
  34647. $core.method({
  34648. selector: "isBlockSequenceNode",
  34649. protocol: 'testing',
  34650. fn: function (){
  34651. var self=this;
  34652. return true;
  34653. },
  34654. //>>excludeStart("ide", pragmas.excludeIdeData);
  34655. args: [],
  34656. source: "isBlockSequenceNode\x0a\x09^ true",
  34657. referencedClasses: [],
  34658. //>>excludeEnd("ide");
  34659. messageSends: []
  34660. }),
  34661. $globals.BlockSequenceNode);
  34662. $core.addClass('ValueNode', $globals.Node, ['value'], 'Compiler-AST');
  34663. //>>excludeStart("ide", pragmas.excludeIdeData);
  34664. $globals.ValueNode.comment="I represent a value node.";
  34665. //>>excludeEnd("ide");
  34666. $core.addMethod(
  34667. $core.method({
  34668. selector: "accept:",
  34669. protocol: 'visiting',
  34670. fn: function (aVisitor){
  34671. var self=this;
  34672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34673. return $core.withContext(function($ctx1) {
  34674. //>>excludeEnd("ctx");
  34675. var $1;
  34676. $1=$recv(aVisitor)._visitValueNode_(self);
  34677. return $1;
  34678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34679. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.ValueNode)});
  34680. //>>excludeEnd("ctx");
  34681. },
  34682. //>>excludeStart("ide", pragmas.excludeIdeData);
  34683. args: ["aVisitor"],
  34684. source: "accept: aVisitor\x0a\x09^ aVisitor visitValueNode: self",
  34685. referencedClasses: [],
  34686. //>>excludeEnd("ide");
  34687. messageSends: ["visitValueNode:"]
  34688. }),
  34689. $globals.ValueNode);
  34690. $core.addMethod(
  34691. $core.method({
  34692. selector: "isImmutable",
  34693. protocol: 'testing',
  34694. fn: function (){
  34695. var self=this;
  34696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34697. return $core.withContext(function($ctx1) {
  34698. //>>excludeEnd("ctx");
  34699. var $1;
  34700. $1=$recv(self._value())._isImmutable();
  34701. return $1;
  34702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34703. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},$globals.ValueNode)});
  34704. //>>excludeEnd("ctx");
  34705. },
  34706. //>>excludeStart("ide", pragmas.excludeIdeData);
  34707. args: [],
  34708. source: "isImmutable\x0a\x09^ self value isImmutable",
  34709. referencedClasses: [],
  34710. //>>excludeEnd("ide");
  34711. messageSends: ["isImmutable", "value"]
  34712. }),
  34713. $globals.ValueNode);
  34714. $core.addMethod(
  34715. $core.method({
  34716. selector: "isValueNode",
  34717. protocol: 'testing',
  34718. fn: function (){
  34719. var self=this;
  34720. return true;
  34721. },
  34722. //>>excludeStart("ide", pragmas.excludeIdeData);
  34723. args: [],
  34724. source: "isValueNode\x0a\x09^ true",
  34725. referencedClasses: [],
  34726. //>>excludeEnd("ide");
  34727. messageSends: []
  34728. }),
  34729. $globals.ValueNode);
  34730. $core.addMethod(
  34731. $core.method({
  34732. selector: "value",
  34733. protocol: 'accessing',
  34734. fn: function (){
  34735. var self=this;
  34736. var $1;
  34737. $1=self["@value"];
  34738. return $1;
  34739. },
  34740. //>>excludeStart("ide", pragmas.excludeIdeData);
  34741. args: [],
  34742. source: "value\x0a\x09^ value",
  34743. referencedClasses: [],
  34744. //>>excludeEnd("ide");
  34745. messageSends: []
  34746. }),
  34747. $globals.ValueNode);
  34748. $core.addMethod(
  34749. $core.method({
  34750. selector: "value:",
  34751. protocol: 'accessing',
  34752. fn: function (anObject){
  34753. var self=this;
  34754. self["@value"]=anObject;
  34755. return self;
  34756. },
  34757. //>>excludeStart("ide", pragmas.excludeIdeData);
  34758. args: ["anObject"],
  34759. source: "value: anObject\x0a\x09value := anObject",
  34760. referencedClasses: [],
  34761. //>>excludeEnd("ide");
  34762. messageSends: []
  34763. }),
  34764. $globals.ValueNode);
  34765. $core.addClass('VariableNode', $globals.ValueNode, ['assigned', 'binding'], 'Compiler-AST');
  34766. //>>excludeStart("ide", pragmas.excludeIdeData);
  34767. $globals.VariableNode.comment="I represent an variable node.";
  34768. //>>excludeEnd("ide");
  34769. $core.addMethod(
  34770. $core.method({
  34771. selector: "accept:",
  34772. protocol: 'visiting',
  34773. fn: function (aVisitor){
  34774. var self=this;
  34775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34776. return $core.withContext(function($ctx1) {
  34777. //>>excludeEnd("ctx");
  34778. var $1;
  34779. $1=$recv(aVisitor)._visitVariableNode_(self);
  34780. return $1;
  34781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34782. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.VariableNode)});
  34783. //>>excludeEnd("ctx");
  34784. },
  34785. //>>excludeStart("ide", pragmas.excludeIdeData);
  34786. args: ["aVisitor"],
  34787. source: "accept: aVisitor\x0a\x09^ aVisitor visitVariableNode: self",
  34788. referencedClasses: [],
  34789. //>>excludeEnd("ide");
  34790. messageSends: ["visitVariableNode:"]
  34791. }),
  34792. $globals.VariableNode);
  34793. $core.addMethod(
  34794. $core.method({
  34795. selector: "alias",
  34796. protocol: 'accessing',
  34797. fn: function (){
  34798. var self=this;
  34799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34800. return $core.withContext(function($ctx1) {
  34801. //>>excludeEnd("ctx");
  34802. var $1;
  34803. $1=$recv(self._binding())._alias();
  34804. return $1;
  34805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34806. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.VariableNode)});
  34807. //>>excludeEnd("ctx");
  34808. },
  34809. //>>excludeStart("ide", pragmas.excludeIdeData);
  34810. args: [],
  34811. source: "alias\x0a\x09^ self binding alias",
  34812. referencedClasses: [],
  34813. //>>excludeEnd("ide");
  34814. messageSends: ["alias", "binding"]
  34815. }),
  34816. $globals.VariableNode);
  34817. $core.addMethod(
  34818. $core.method({
  34819. selector: "assigned",
  34820. protocol: 'accessing',
  34821. fn: function (){
  34822. var self=this;
  34823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34824. return $core.withContext(function($ctx1) {
  34825. //>>excludeEnd("ctx");
  34826. var $2,$1,$receiver;
  34827. $2=self["@assigned"];
  34828. if(($receiver = $2) == null || $receiver.isNil){
  34829. $1=false;
  34830. } else {
  34831. $1=$2;
  34832. };
  34833. return $1;
  34834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34835. }, function($ctx1) {$ctx1.fill(self,"assigned",{},$globals.VariableNode)});
  34836. //>>excludeEnd("ctx");
  34837. },
  34838. //>>excludeStart("ide", pragmas.excludeIdeData);
  34839. args: [],
  34840. source: "assigned\x0a\x09^ assigned ifNil: [ false ]",
  34841. referencedClasses: [],
  34842. //>>excludeEnd("ide");
  34843. messageSends: ["ifNil:"]
  34844. }),
  34845. $globals.VariableNode);
  34846. $core.addMethod(
  34847. $core.method({
  34848. selector: "assigned:",
  34849. protocol: 'accessing',
  34850. fn: function (aBoolean){
  34851. var self=this;
  34852. self["@assigned"]=aBoolean;
  34853. return self;
  34854. },
  34855. //>>excludeStart("ide", pragmas.excludeIdeData);
  34856. args: ["aBoolean"],
  34857. source: "assigned: aBoolean\x0a\x09assigned := aBoolean",
  34858. referencedClasses: [],
  34859. //>>excludeEnd("ide");
  34860. messageSends: []
  34861. }),
  34862. $globals.VariableNode);
  34863. $core.addMethod(
  34864. $core.method({
  34865. selector: "beAssigned",
  34866. protocol: 'accessing',
  34867. fn: function (){
  34868. var self=this;
  34869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34870. return $core.withContext(function($ctx1) {
  34871. //>>excludeEnd("ctx");
  34872. $recv(self._binding())._validateAssignment();
  34873. self["@assigned"]=true;
  34874. return self;
  34875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34876. }, function($ctx1) {$ctx1.fill(self,"beAssigned",{},$globals.VariableNode)});
  34877. //>>excludeEnd("ctx");
  34878. },
  34879. //>>excludeStart("ide", pragmas.excludeIdeData);
  34880. args: [],
  34881. source: "beAssigned\x0a\x09self binding validateAssignment.\x0a\x09assigned := true",
  34882. referencedClasses: [],
  34883. //>>excludeEnd("ide");
  34884. messageSends: ["validateAssignment", "binding"]
  34885. }),
  34886. $globals.VariableNode);
  34887. $core.addMethod(
  34888. $core.method({
  34889. selector: "binding",
  34890. protocol: 'accessing',
  34891. fn: function (){
  34892. var self=this;
  34893. var $1;
  34894. $1=self["@binding"];
  34895. return $1;
  34896. },
  34897. //>>excludeStart("ide", pragmas.excludeIdeData);
  34898. args: [],
  34899. source: "binding\x0a\x09^ binding",
  34900. referencedClasses: [],
  34901. //>>excludeEnd("ide");
  34902. messageSends: []
  34903. }),
  34904. $globals.VariableNode);
  34905. $core.addMethod(
  34906. $core.method({
  34907. selector: "binding:",
  34908. protocol: 'accessing',
  34909. fn: function (aScopeVar){
  34910. var self=this;
  34911. self["@binding"]=aScopeVar;
  34912. return self;
  34913. },
  34914. //>>excludeStart("ide", pragmas.excludeIdeData);
  34915. args: ["aScopeVar"],
  34916. source: "binding: aScopeVar\x0a\x09binding := aScopeVar",
  34917. referencedClasses: [],
  34918. //>>excludeEnd("ide");
  34919. messageSends: []
  34920. }),
  34921. $globals.VariableNode);
  34922. $core.addMethod(
  34923. $core.method({
  34924. selector: "isArgument",
  34925. protocol: 'testing',
  34926. fn: function (){
  34927. var self=this;
  34928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34929. return $core.withContext(function($ctx1) {
  34930. //>>excludeEnd("ctx");
  34931. var $1;
  34932. $1=$recv(self._binding())._isArgVar();
  34933. return $1;
  34934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34935. }, function($ctx1) {$ctx1.fill(self,"isArgument",{},$globals.VariableNode)});
  34936. //>>excludeEnd("ctx");
  34937. },
  34938. //>>excludeStart("ide", pragmas.excludeIdeData);
  34939. args: [],
  34940. source: "isArgument\x0a\x09^ self binding isArgVar",
  34941. referencedClasses: [],
  34942. //>>excludeEnd("ide");
  34943. messageSends: ["isArgVar", "binding"]
  34944. }),
  34945. $globals.VariableNode);
  34946. $core.addMethod(
  34947. $core.method({
  34948. selector: "isImmutable",
  34949. protocol: 'testing',
  34950. fn: function (){
  34951. var self=this;
  34952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34953. return $core.withContext(function($ctx1) {
  34954. //>>excludeEnd("ctx");
  34955. var $1;
  34956. $1=$recv(self._binding())._isImmutable();
  34957. return $1;
  34958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34959. }, function($ctx1) {$ctx1.fill(self,"isImmutable",{},$globals.VariableNode)});
  34960. //>>excludeEnd("ctx");
  34961. },
  34962. //>>excludeStart("ide", pragmas.excludeIdeData);
  34963. args: [],
  34964. source: "isImmutable\x0a\x09^ self binding isImmutable",
  34965. referencedClasses: [],
  34966. //>>excludeEnd("ide");
  34967. messageSends: ["isImmutable", "binding"]
  34968. }),
  34969. $globals.VariableNode);
  34970. $core.addMethod(
  34971. $core.method({
  34972. selector: "isNavigationNode",
  34973. protocol: 'testing',
  34974. fn: function (){
  34975. var self=this;
  34976. return true;
  34977. },
  34978. //>>excludeStart("ide", pragmas.excludeIdeData);
  34979. args: [],
  34980. source: "isNavigationNode\x0a\x09^ true",
  34981. referencedClasses: [],
  34982. //>>excludeEnd("ide");
  34983. messageSends: []
  34984. }),
  34985. $globals.VariableNode);
  34986. $core.addMethod(
  34987. $core.method({
  34988. selector: "isVariableNode",
  34989. protocol: 'testing',
  34990. fn: function (){
  34991. var self=this;
  34992. return true;
  34993. },
  34994. //>>excludeStart("ide", pragmas.excludeIdeData);
  34995. args: [],
  34996. source: "isVariableNode\x0a\x09^ true",
  34997. referencedClasses: [],
  34998. //>>excludeEnd("ide");
  34999. messageSends: []
  35000. }),
  35001. $globals.VariableNode);
  35002. $core.addMethod(
  35003. $core.method({
  35004. selector: "navigationLink",
  35005. protocol: 'accessing',
  35006. fn: function (){
  35007. var self=this;
  35008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35009. return $core.withContext(function($ctx1) {
  35010. //>>excludeEnd("ctx");
  35011. var $1;
  35012. $1=self._value();
  35013. return $1;
  35014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35015. }, function($ctx1) {$ctx1.fill(self,"navigationLink",{},$globals.VariableNode)});
  35016. //>>excludeEnd("ctx");
  35017. },
  35018. //>>excludeStart("ide", pragmas.excludeIdeData);
  35019. args: [],
  35020. source: "navigationLink\x0a\x09^ self value",
  35021. referencedClasses: [],
  35022. //>>excludeEnd("ide");
  35023. messageSends: ["value"]
  35024. }),
  35025. $globals.VariableNode);
  35026. $core.addMethod(
  35027. $core.method({
  35028. selector: "ast",
  35029. protocol: '*Compiler-AST',
  35030. fn: function (){
  35031. var self=this;
  35032. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  35033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35034. return $core.withContext(function($ctx1) {
  35035. //>>excludeEnd("ctx");
  35036. var $1,$2;
  35037. $1=self._source();
  35038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35039. $ctx1.sendIdx["source"]=1;
  35040. //>>excludeEnd("ctx");
  35041. $recv($1)._ifEmpty_((function(){
  35042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35043. return $core.withContext(function($ctx2) {
  35044. //>>excludeEnd("ctx");
  35045. return self._error_("Method source is empty");
  35046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35047. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  35048. //>>excludeEnd("ctx");
  35049. }));
  35050. $2=$recv($Smalltalk())._parse_(self._source());
  35051. return $2;
  35052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35053. }, function($ctx1) {$ctx1.fill(self,"ast",{},$globals.CompiledMethod)});
  35054. //>>excludeEnd("ctx");
  35055. },
  35056. //>>excludeStart("ide", pragmas.excludeIdeData);
  35057. args: [],
  35058. source: "ast\x0a\x09self source ifEmpty: [ self error: 'Method source is empty' ].\x0a\x09\x0a\x09^ Smalltalk parse: self source",
  35059. referencedClasses: ["Smalltalk"],
  35060. //>>excludeEnd("ide");
  35061. messageSends: ["ifEmpty:", "source", "error:", "parse:"]
  35062. }),
  35063. $globals.CompiledMethod);
  35064. $core.addMethod(
  35065. $core.method({
  35066. selector: "isNode",
  35067. protocol: '*Compiler-AST',
  35068. fn: function (){
  35069. var self=this;
  35070. return false;
  35071. },
  35072. //>>excludeStart("ide", pragmas.excludeIdeData);
  35073. args: [],
  35074. source: "isNode\x0a\x09^ false",
  35075. referencedClasses: [],
  35076. //>>excludeEnd("ide");
  35077. messageSends: []
  35078. }),
  35079. $globals.Object);
  35080. });
  35081. define("amber_core/Compiler-IR", ["amber/boot", "amber_core/Compiler-Core", "amber_core/Kernel-Objects", "amber_core/Kernel-Methods"], function($boot){
  35082. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  35083. var smalltalk=$core,_st=$recv,globals=$globals;
  35084. $core.addPackage('Compiler-IR');
  35085. $core.packages["Compiler-IR"].transport = {"type":"amd","amdNamespace":"amber_core"};
  35086. $core.addClass('IRASTTranslator', $globals.NodeVisitor, ['source', 'theClass', 'method', 'sequence', 'nextAlias'], 'Compiler-IR');
  35087. //>>excludeStart("ide", pragmas.excludeIdeData);
  35088. $globals.IRASTTranslator.comment="I am the AST (abstract syntax tree) visitor responsible for building the intermediate representation graph.";
  35089. //>>excludeEnd("ide");
  35090. $core.addMethod(
  35091. $core.method({
  35092. selector: "alias:",
  35093. protocol: 'visiting',
  35094. fn: function (aNode){
  35095. var self=this;
  35096. var variable;
  35097. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  35098. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  35099. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  35100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35101. return $core.withContext(function($ctx1) {
  35102. //>>excludeEnd("ctx");
  35103. var $1,$2,$3,$4,$6,$5,$7,$8,$10,$11,$9,$12;
  35104. $1=$recv(aNode)._isImmutable();
  35105. if($core.assert($1)){
  35106. $2=self._visit_(aNode);
  35107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35108. $ctx1.sendIdx["visit:"]=1;
  35109. //>>excludeEnd("ctx");
  35110. return $2;
  35111. };
  35112. $3=$recv($IRVariable())._new();
  35113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35114. $ctx1.sendIdx["new"]=1;
  35115. //>>excludeEnd("ctx");
  35116. $4=$3;
  35117. $6=$recv($AliasVar())._new();
  35118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35119. $ctx1.sendIdx["new"]=2;
  35120. //>>excludeEnd("ctx");
  35121. $5=$recv($6)._name_("$".__comma(self._nextAlias()));
  35122. $recv($4)._variable_($5);
  35123. $7=$recv($3)._yourself();
  35124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35125. $ctx1.sendIdx["yourself"]=1;
  35126. //>>excludeEnd("ctx");
  35127. variable=$7;
  35128. $8=self._sequence();
  35129. $10=$recv($IRAssignment())._new();
  35130. $recv($10)._add_(variable);
  35131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35132. $ctx1.sendIdx["add:"]=2;
  35133. //>>excludeEnd("ctx");
  35134. $recv($10)._add_(self._visit_(aNode));
  35135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35136. $ctx1.sendIdx["add:"]=3;
  35137. //>>excludeEnd("ctx");
  35138. $11=$recv($10)._yourself();
  35139. $9=$11;
  35140. $recv($8)._add_($9);
  35141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35142. $ctx1.sendIdx["add:"]=1;
  35143. //>>excludeEnd("ctx");
  35144. $recv($recv(self._method())._internalVariables())._add_(variable);
  35145. $12=variable;
  35146. return $12;
  35147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35148. }, function($ctx1) {$ctx1.fill(self,"alias:",{aNode:aNode,variable:variable},$globals.IRASTTranslator)});
  35149. //>>excludeEnd("ctx");
  35150. },
  35151. //>>excludeStart("ide", pragmas.excludeIdeData);
  35152. args: ["aNode"],
  35153. source: "alias: aNode\x0a\x09| variable |\x0a\x0a\x09aNode isImmutable ifTrue: [ ^ self visit: aNode ].\x0a\x0a\x09variable := IRVariable new\x0a\x09\x09variable: (AliasVar new name: '$', self nextAlias);\x0a\x09\x09yourself.\x0a\x0a\x09self sequence add: (IRAssignment new\x0a\x09\x09add: variable;\x0a\x09\x09add: (self visit: aNode);\x0a\x09\x09yourself).\x0a\x0a\x09self method internalVariables add: variable.\x0a\x0a\x09^ variable",
  35154. referencedClasses: ["IRVariable", "AliasVar", "IRAssignment"],
  35155. //>>excludeEnd("ide");
  35156. messageSends: ["ifTrue:", "isImmutable", "visit:", "variable:", "new", "name:", ",", "nextAlias", "yourself", "add:", "sequence", "internalVariables", "method"]
  35157. }),
  35158. $globals.IRASTTranslator);
  35159. $core.addMethod(
  35160. $core.method({
  35161. selector: "aliasTemporally:",
  35162. protocol: 'visiting',
  35163. fn: function (aCollection){
  35164. var self=this;
  35165. var threshold,result;
  35166. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  35167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35168. return $core.withContext(function($ctx1) {
  35169. //>>excludeEnd("ctx");
  35170. var $1,$2,$4,$3,$5;
  35171. threshold=(0);
  35172. $recv(aCollection)._withIndexDo_((function(each,i){
  35173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35174. return $core.withContext(function($ctx2) {
  35175. //>>excludeEnd("ctx");
  35176. $1=$recv(each)._subtreeNeedsAliasing();
  35177. if($core.assert($1)){
  35178. threshold=i;
  35179. return threshold;
  35180. };
  35181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35182. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,1)});
  35183. //>>excludeEnd("ctx");
  35184. }));
  35185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35186. $ctx1.sendIdx["withIndexDo:"]=1;
  35187. //>>excludeEnd("ctx");
  35188. result=$recv($OrderedCollection())._new();
  35189. $recv(aCollection)._withIndexDo_((function(each,i){
  35190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35191. return $core.withContext(function($ctx2) {
  35192. //>>excludeEnd("ctx");
  35193. $2=result;
  35194. $4=$recv(i).__lt_eq(threshold);
  35195. if($core.assert($4)){
  35196. $3=self._alias_(each);
  35197. } else {
  35198. $3=self._visit_(each);
  35199. };
  35200. return $recv($2)._add_($3);
  35201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35202. }, function($ctx2) {$ctx2.fillBlock({each:each,i:i},$ctx1,3)});
  35203. //>>excludeEnd("ctx");
  35204. }));
  35205. $5=result;
  35206. return $5;
  35207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35208. }, function($ctx1) {$ctx1.fill(self,"aliasTemporally:",{aCollection:aCollection,threshold:threshold,result:result},$globals.IRASTTranslator)});
  35209. //>>excludeEnd("ctx");
  35210. },
  35211. //>>excludeStart("ide", pragmas.excludeIdeData);
  35212. args: ["aCollection"],
  35213. source: "aliasTemporally: aCollection\x0a\x09\x22https://github.com/NicolasPetton/amber/issues/296\x0a\x09\x0a\x09If a node is aliased, all preceding ones are aliased as well.\x0a\x09The tree is iterated twice. First we get the aliasing dependency,\x0a\x09then the aliasing itself is done\x22\x0a\x0a\x09| threshold result |\x0a\x09threshold := 0.\x0a\x09\x0a\x09aCollection withIndexDo: [ :each :i |\x0a\x09\x09each subtreeNeedsAliasing\x0a\x09\x09\x09ifTrue: [ threshold := i ] ].\x0a\x0a\x09result := OrderedCollection new.\x0a\x09aCollection withIndexDo: [ :each :i |\x0a\x09\x09result add: (i <= threshold\x0a\x09\x09\x09ifTrue: [ self alias: each ]\x0a\x09\x09\x09ifFalse: [ self visit: each ]) ].\x0a\x0a\x09^ result",
  35214. referencedClasses: ["OrderedCollection"],
  35215. //>>excludeEnd("ide");
  35216. messageSends: ["withIndexDo:", "ifTrue:", "subtreeNeedsAliasing", "new", "add:", "ifTrue:ifFalse:", "<=", "alias:", "visit:"]
  35217. }),
  35218. $globals.IRASTTranslator);
  35219. $core.addMethod(
  35220. $core.method({
  35221. selector: "method",
  35222. protocol: 'accessing',
  35223. fn: function (){
  35224. var self=this;
  35225. var $1;
  35226. $1=self["@method"];
  35227. return $1;
  35228. },
  35229. //>>excludeStart("ide", pragmas.excludeIdeData);
  35230. args: [],
  35231. source: "method\x0a\x09^ method",
  35232. referencedClasses: [],
  35233. //>>excludeEnd("ide");
  35234. messageSends: []
  35235. }),
  35236. $globals.IRASTTranslator);
  35237. $core.addMethod(
  35238. $core.method({
  35239. selector: "method:",
  35240. protocol: 'accessing',
  35241. fn: function (anIRMethod){
  35242. var self=this;
  35243. self["@method"]=anIRMethod;
  35244. return self;
  35245. },
  35246. //>>excludeStart("ide", pragmas.excludeIdeData);
  35247. args: ["anIRMethod"],
  35248. source: "method: anIRMethod\x0a\x09method := anIRMethod",
  35249. referencedClasses: [],
  35250. //>>excludeEnd("ide");
  35251. messageSends: []
  35252. }),
  35253. $globals.IRASTTranslator);
  35254. $core.addMethod(
  35255. $core.method({
  35256. selector: "nextAlias",
  35257. protocol: 'accessing',
  35258. fn: function (){
  35259. var self=this;
  35260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35261. return $core.withContext(function($ctx1) {
  35262. //>>excludeEnd("ctx");
  35263. var $1,$2,$receiver;
  35264. $1=self["@nextAlias"];
  35265. if(($receiver = $1) == null || $receiver.isNil){
  35266. self["@nextAlias"]=(0);
  35267. self["@nextAlias"];
  35268. } else {
  35269. $1;
  35270. };
  35271. self["@nextAlias"]=$recv(self["@nextAlias"]).__plus((1));
  35272. $2=$recv(self["@nextAlias"])._asString();
  35273. return $2;
  35274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35275. }, function($ctx1) {$ctx1.fill(self,"nextAlias",{},$globals.IRASTTranslator)});
  35276. //>>excludeEnd("ctx");
  35277. },
  35278. //>>excludeStart("ide", pragmas.excludeIdeData);
  35279. args: [],
  35280. source: "nextAlias\x0a\x09nextAlias ifNil: [ nextAlias := 0 ].\x0a\x09nextAlias := nextAlias + 1.\x0a\x09^ nextAlias asString",
  35281. referencedClasses: [],
  35282. //>>excludeEnd("ide");
  35283. messageSends: ["ifNil:", "+", "asString"]
  35284. }),
  35285. $globals.IRASTTranslator);
  35286. $core.addMethod(
  35287. $core.method({
  35288. selector: "sequence",
  35289. protocol: 'accessing',
  35290. fn: function (){
  35291. var self=this;
  35292. var $1;
  35293. $1=self["@sequence"];
  35294. return $1;
  35295. },
  35296. //>>excludeStart("ide", pragmas.excludeIdeData);
  35297. args: [],
  35298. source: "sequence\x0a\x09^ sequence",
  35299. referencedClasses: [],
  35300. //>>excludeEnd("ide");
  35301. messageSends: []
  35302. }),
  35303. $globals.IRASTTranslator);
  35304. $core.addMethod(
  35305. $core.method({
  35306. selector: "sequence:",
  35307. protocol: 'accessing',
  35308. fn: function (anIRSequence){
  35309. var self=this;
  35310. self["@sequence"]=anIRSequence;
  35311. return self;
  35312. },
  35313. //>>excludeStart("ide", pragmas.excludeIdeData);
  35314. args: ["anIRSequence"],
  35315. source: "sequence: anIRSequence\x0a\x09sequence := anIRSequence",
  35316. referencedClasses: [],
  35317. //>>excludeEnd("ide");
  35318. messageSends: []
  35319. }),
  35320. $globals.IRASTTranslator);
  35321. $core.addMethod(
  35322. $core.method({
  35323. selector: "source",
  35324. protocol: 'accessing',
  35325. fn: function (){
  35326. var self=this;
  35327. var $1;
  35328. $1=self["@source"];
  35329. return $1;
  35330. },
  35331. //>>excludeStart("ide", pragmas.excludeIdeData);
  35332. args: [],
  35333. source: "source\x0a\x09^ source",
  35334. referencedClasses: [],
  35335. //>>excludeEnd("ide");
  35336. messageSends: []
  35337. }),
  35338. $globals.IRASTTranslator);
  35339. $core.addMethod(
  35340. $core.method({
  35341. selector: "source:",
  35342. protocol: 'accessing',
  35343. fn: function (aString){
  35344. var self=this;
  35345. self["@source"]=aString;
  35346. return self;
  35347. },
  35348. //>>excludeStart("ide", pragmas.excludeIdeData);
  35349. args: ["aString"],
  35350. source: "source: aString\x0a\x09source := aString",
  35351. referencedClasses: [],
  35352. //>>excludeEnd("ide");
  35353. messageSends: []
  35354. }),
  35355. $globals.IRASTTranslator);
  35356. $core.addMethod(
  35357. $core.method({
  35358. selector: "theClass",
  35359. protocol: 'accessing',
  35360. fn: function (){
  35361. var self=this;
  35362. var $1;
  35363. $1=self["@theClass"];
  35364. return $1;
  35365. },
  35366. //>>excludeStart("ide", pragmas.excludeIdeData);
  35367. args: [],
  35368. source: "theClass\x0a\x09^ theClass",
  35369. referencedClasses: [],
  35370. //>>excludeEnd("ide");
  35371. messageSends: []
  35372. }),
  35373. $globals.IRASTTranslator);
  35374. $core.addMethod(
  35375. $core.method({
  35376. selector: "theClass:",
  35377. protocol: 'accessing',
  35378. fn: function (aClass){
  35379. var self=this;
  35380. self["@theClass"]=aClass;
  35381. return self;
  35382. },
  35383. //>>excludeStart("ide", pragmas.excludeIdeData);
  35384. args: ["aClass"],
  35385. source: "theClass: aClass\x0a\x09theClass := aClass",
  35386. referencedClasses: [],
  35387. //>>excludeEnd("ide");
  35388. messageSends: []
  35389. }),
  35390. $globals.IRASTTranslator);
  35391. $core.addMethod(
  35392. $core.method({
  35393. selector: "visitAssignmentNode:",
  35394. protocol: 'visiting',
  35395. fn: function (aNode){
  35396. var self=this;
  35397. var left,right,assignment;
  35398. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  35399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35400. return $core.withContext(function($ctx1) {
  35401. //>>excludeEnd("ctx");
  35402. var $1,$3,$4,$2,$5;
  35403. right=self._visit_($recv(aNode)._right());
  35404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35405. $ctx1.sendIdx["visit:"]=1;
  35406. //>>excludeEnd("ctx");
  35407. left=self._visit_($recv(aNode)._left());
  35408. $1=self._sequence();
  35409. $3=$recv($IRAssignment())._new();
  35410. $recv($3)._add_(left);
  35411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35412. $ctx1.sendIdx["add:"]=2;
  35413. //>>excludeEnd("ctx");
  35414. $recv($3)._add_(right);
  35415. $4=$recv($3)._yourself();
  35416. $2=$4;
  35417. $recv($1)._add_($2);
  35418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35419. $ctx1.sendIdx["add:"]=1;
  35420. //>>excludeEnd("ctx");
  35421. $5=left;
  35422. return $5;
  35423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35424. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode,left:left,right:right,assignment:assignment},$globals.IRASTTranslator)});
  35425. //>>excludeEnd("ctx");
  35426. },
  35427. //>>excludeStart("ide", pragmas.excludeIdeData);
  35428. args: ["aNode"],
  35429. source: "visitAssignmentNode: aNode\x0a\x09| left right assignment |\x0a\x09right := self visit: aNode right.\x0a\x09left := self visit: aNode left.\x0a\x09self sequence add: (IRAssignment new\x0a\x09\x09add: left;\x0a\x09\x09add: right;\x0a\x09\x09yourself).\x0a\x09^ left",
  35430. referencedClasses: ["IRAssignment"],
  35431. //>>excludeEnd("ide");
  35432. messageSends: ["visit:", "right", "left", "add:", "sequence", "new", "yourself"]
  35433. }),
  35434. $globals.IRASTTranslator);
  35435. $core.addMethod(
  35436. $core.method({
  35437. selector: "visitBlockNode:",
  35438. protocol: 'visiting',
  35439. fn: function (aNode){
  35440. var self=this;
  35441. var closure;
  35442. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  35443. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  35444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35445. return $core.withContext(function($ctx1) {
  35446. //>>excludeEnd("ctx");
  35447. var $1,$2,$3,$4,$6,$5,$7,$8,$9;
  35448. $1=$recv($IRClosure())._new();
  35449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35450. $ctx1.sendIdx["new"]=1;
  35451. //>>excludeEnd("ctx");
  35452. $recv($1)._arguments_($recv(aNode)._parameters());
  35453. $recv($1)._requiresSmalltalkContext_($recv(aNode)._requiresSmalltalkContext());
  35454. $2=$1;
  35455. $3=$recv(aNode)._scope();
  35456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35457. $ctx1.sendIdx["scope"]=1;
  35458. //>>excludeEnd("ctx");
  35459. $recv($2)._scope_($3);
  35460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35461. $ctx1.sendIdx["scope:"]=1;
  35462. //>>excludeEnd("ctx");
  35463. $4=$recv($1)._yourself();
  35464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35465. $ctx1.sendIdx["yourself"]=1;
  35466. //>>excludeEnd("ctx");
  35467. closure=$4;
  35468. $6=$recv(aNode)._scope();
  35469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35470. $ctx1.sendIdx["scope"]=2;
  35471. //>>excludeEnd("ctx");
  35472. $5=$recv($6)._temps();
  35473. $recv($5)._do_((function(each){
  35474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35475. return $core.withContext(function($ctx2) {
  35476. //>>excludeEnd("ctx");
  35477. $7=$recv($IRTempDeclaration())._new();
  35478. $recv($7)._name_($recv(each)._name());
  35479. $recv($7)._scope_($recv(aNode)._scope());
  35480. $8=$recv($7)._yourself();
  35481. return $recv(closure)._add_($8);
  35482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35483. $ctx2.sendIdx["add:"]=1;
  35484. //>>excludeEnd("ctx");
  35485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35486. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  35487. //>>excludeEnd("ctx");
  35488. }));
  35489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35490. $ctx1.sendIdx["do:"]=1;
  35491. //>>excludeEnd("ctx");
  35492. $recv($recv(aNode)._nodes())._do_((function(each){
  35493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35494. return $core.withContext(function($ctx2) {
  35495. //>>excludeEnd("ctx");
  35496. return $recv(closure)._add_(self._visit_(each));
  35497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35498. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  35499. //>>excludeEnd("ctx");
  35500. }));
  35501. $9=closure;
  35502. return $9;
  35503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35504. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode,closure:closure},$globals.IRASTTranslator)});
  35505. //>>excludeEnd("ctx");
  35506. },
  35507. //>>excludeStart("ide", pragmas.excludeIdeData);
  35508. args: ["aNode"],
  35509. source: "visitBlockNode: aNode\x0a\x09| closure |\x0a\x09closure := IRClosure new\x0a\x09\x09arguments: aNode parameters;\x0a\x09\x09requiresSmalltalkContext: aNode requiresSmalltalkContext;\x0a\x09\x09scope: aNode scope;\x0a\x09\x09yourself.\x0a\x09aNode scope temps do: [ :each |\x0a\x09\x09closure add: (IRTempDeclaration new\x0a\x09\x09\x09name: each name;\x0a\x09\x09\x09scope: aNode scope;\x0a\x09\x09\x09yourself) ].\x0a\x09aNode nodes do: [ :each | closure add: (self visit: each) ].\x0a\x09^ closure",
  35510. referencedClasses: ["IRClosure", "IRTempDeclaration"],
  35511. //>>excludeEnd("ide");
  35512. messageSends: ["arguments:", "new", "parameters", "requiresSmalltalkContext:", "requiresSmalltalkContext", "scope:", "scope", "yourself", "do:", "temps", "add:", "name:", "name", "nodes", "visit:"]
  35513. }),
  35514. $globals.IRASTTranslator);
  35515. $core.addMethod(
  35516. $core.method({
  35517. selector: "visitBlockSequenceNode:",
  35518. protocol: 'visiting',
  35519. fn: function (aNode){
  35520. var self=this;
  35521. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  35522. function $IRBlockReturn(){return $globals.IRBlockReturn||(typeof IRBlockReturn=="undefined"?nil:IRBlockReturn)}
  35523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35524. return $core.withContext(function($ctx1) {
  35525. //>>excludeEnd("ctx");
  35526. var $2,$3,$5,$4,$6,$7,$10,$9,$8,$11,$13,$14,$17,$16,$15,$18,$12,$1;
  35527. $2=$recv($IRBlockSequence())._new();
  35528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35529. $ctx1.sendIdx["new"]=1;
  35530. //>>excludeEnd("ctx");
  35531. $1=self._withSequence_do_($2,(function(){
  35532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35533. return $core.withContext(function($ctx2) {
  35534. //>>excludeEnd("ctx");
  35535. $3=$recv(aNode)._nodes();
  35536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35537. $ctx2.sendIdx["nodes"]=1;
  35538. //>>excludeEnd("ctx");
  35539. return $recv($3)._ifNotEmpty_((function(){
  35540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35541. return $core.withContext(function($ctx3) {
  35542. //>>excludeEnd("ctx");
  35543. $5=$recv(aNode)._nodes();
  35544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35545. $ctx3.sendIdx["nodes"]=2;
  35546. //>>excludeEnd("ctx");
  35547. $4=$recv($5)._allButLast();
  35548. $recv($4)._do_((function(each){
  35549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35550. return $core.withContext(function($ctx4) {
  35551. //>>excludeEnd("ctx");
  35552. $6=self._sequence();
  35553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35554. $ctx4.sendIdx["sequence"]=1;
  35555. //>>excludeEnd("ctx");
  35556. $7=self._visitOrAlias_(each);
  35557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35558. $ctx4.sendIdx["visitOrAlias:"]=1;
  35559. //>>excludeEnd("ctx");
  35560. return $recv($6)._add_($7);
  35561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35562. $ctx4.sendIdx["add:"]=1;
  35563. //>>excludeEnd("ctx");
  35564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35565. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,3)});
  35566. //>>excludeEnd("ctx");
  35567. }));
  35568. $10=$recv(aNode)._nodes();
  35569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35570. $ctx3.sendIdx["nodes"]=3;
  35571. //>>excludeEnd("ctx");
  35572. $9=$recv($10)._last();
  35573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35574. $ctx3.sendIdx["last"]=1;
  35575. //>>excludeEnd("ctx");
  35576. $8=$recv($9)._isReturnNode();
  35577. if($core.assert($8)){
  35578. return $recv(self._sequence())._add_(self._visitOrAlias_($recv($recv(aNode)._nodes())._last()));
  35579. } else {
  35580. $11=self._sequence();
  35581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35582. $ctx3.sendIdx["sequence"]=2;
  35583. //>>excludeEnd("ctx");
  35584. $13=$recv($IRBlockReturn())._new();
  35585. $14=$13;
  35586. $17=$recv(aNode)._nodes();
  35587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35588. $ctx3.sendIdx["nodes"]=4;
  35589. //>>excludeEnd("ctx");
  35590. $16=$recv($17)._last();
  35591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35592. $ctx3.sendIdx["last"]=2;
  35593. //>>excludeEnd("ctx");
  35594. $15=self._visitOrAlias_($16);
  35595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35596. $ctx3.sendIdx["visitOrAlias:"]=2;
  35597. //>>excludeEnd("ctx");
  35598. $recv($14)._add_($15);
  35599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35600. $ctx3.sendIdx["add:"]=3;
  35601. //>>excludeEnd("ctx");
  35602. $18=$recv($13)._yourself();
  35603. $12=$18;
  35604. return $recv($11)._add_($12);
  35605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35606. $ctx3.sendIdx["add:"]=2;
  35607. //>>excludeEnd("ctx");
  35608. };
  35609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35610. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  35611. //>>excludeEnd("ctx");
  35612. }));
  35613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35614. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  35615. //>>excludeEnd("ctx");
  35616. }));
  35617. return $1;
  35618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35619. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.IRASTTranslator)});
  35620. //>>excludeEnd("ctx");
  35621. },
  35622. //>>excludeStart("ide", pragmas.excludeIdeData);
  35623. args: ["aNode"],
  35624. source: "visitBlockSequenceNode: aNode\x0a\x09^ self\x0a\x09\x09withSequence: IRBlockSequence new\x0a\x09\x09do: [\x0a\x09\x09\x09aNode nodes ifNotEmpty: [\x0a\x09\x09\x09\x09aNode nodes allButLast do: [ :each |\x0a\x09\x09\x09\x09\x09self sequence add: (self visitOrAlias: each) ].\x0a\x09\x09\x09\x09aNode nodes last isReturnNode\x0a\x09\x09\x09\x09\x09ifFalse: [ self sequence add: (IRBlockReturn new add: (self visitOrAlias: aNode nodes last); yourself) ]\x0a\x09\x09\x09\x09\x09ifTrue: [ self sequence add: (self visitOrAlias: aNode nodes last) ] ]]",
  35625. referencedClasses: ["IRBlockSequence", "IRBlockReturn"],
  35626. //>>excludeEnd("ide");
  35627. messageSends: ["withSequence:do:", "new", "ifNotEmpty:", "nodes", "do:", "allButLast", "add:", "sequence", "visitOrAlias:", "ifFalse:ifTrue:", "isReturnNode", "last", "yourself"]
  35628. }),
  35629. $globals.IRASTTranslator);
  35630. $core.addMethod(
  35631. $core.method({
  35632. selector: "visitCascadeNode:",
  35633. protocol: 'visiting',
  35634. fn: function (aNode){
  35635. var self=this;
  35636. var alias,receiver;
  35637. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  35638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35639. return $core.withContext(function($ctx1) {
  35640. //>>excludeEnd("ctx");
  35641. var $2,$1,$3,$5,$4,$6;
  35642. $2=$recv(aNode)._receiver();
  35643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35644. $ctx1.sendIdx["receiver"]=1;
  35645. //>>excludeEnd("ctx");
  35646. $1=$recv($2)._isImmutable();
  35647. if($core.assert($1)){
  35648. receiver=$recv(aNode)._receiver();
  35649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35650. $ctx1.sendIdx["receiver"]=2;
  35651. //>>excludeEnd("ctx");
  35652. receiver;
  35653. } else {
  35654. alias=self._alias_($recv(aNode)._receiver());
  35655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35656. $ctx1.sendIdx["alias:"]=1;
  35657. //>>excludeEnd("ctx");
  35658. alias;
  35659. receiver=$recv($recv($VariableNode())._new())._binding_($recv(alias)._variable());
  35660. receiver;
  35661. };
  35662. $3=$recv(aNode)._nodes();
  35663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35664. $ctx1.sendIdx["nodes"]=1;
  35665. //>>excludeEnd("ctx");
  35666. $recv($3)._do_((function(each){
  35667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35668. return $core.withContext(function($ctx2) {
  35669. //>>excludeEnd("ctx");
  35670. return $recv(each)._receiver_(receiver);
  35671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35672. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  35673. //>>excludeEnd("ctx");
  35674. }));
  35675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35676. $ctx1.sendIdx["do:"]=1;
  35677. //>>excludeEnd("ctx");
  35678. $5=$recv(aNode)._nodes();
  35679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35680. $ctx1.sendIdx["nodes"]=2;
  35681. //>>excludeEnd("ctx");
  35682. $4=$recv($5)._allButLast();
  35683. $recv($4)._do_((function(each){
  35684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35685. return $core.withContext(function($ctx2) {
  35686. //>>excludeEnd("ctx");
  35687. return $recv(self._sequence())._add_(self._visit_(each));
  35688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35689. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  35690. //>>excludeEnd("ctx");
  35691. }));
  35692. $6=self._alias_($recv($recv(aNode)._nodes())._last());
  35693. return $6;
  35694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35695. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode,alias:alias,receiver:receiver},$globals.IRASTTranslator)});
  35696. //>>excludeEnd("ctx");
  35697. },
  35698. //>>excludeStart("ide", pragmas.excludeIdeData);
  35699. args: ["aNode"],
  35700. source: "visitCascadeNode: aNode\x0a\x09| alias receiver |\x0a\x0a\x09aNode receiver isImmutable \x0a\x09\x09ifTrue: [ receiver := aNode receiver ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09alias := self alias: aNode receiver.\x0a\x09\x09\x09receiver := VariableNode new binding: alias variable ].\x0a\x09\x0a\x09aNode nodes do: [ :each |\x0a\x09\x09\x09each receiver: receiver ].\x0a\x0a\x09aNode nodes allButLast do: [ :each |\x0a\x09\x09self sequence add: (self visit: each) ].\x0a\x0a\x09^ self alias: aNode nodes last",
  35701. referencedClasses: ["VariableNode"],
  35702. //>>excludeEnd("ide");
  35703. messageSends: ["ifTrue:ifFalse:", "isImmutable", "receiver", "alias:", "binding:", "new", "variable", "do:", "nodes", "receiver:", "allButLast", "add:", "sequence", "visit:", "last"]
  35704. }),
  35705. $globals.IRASTTranslator);
  35706. $core.addMethod(
  35707. $core.method({
  35708. selector: "visitDynamicArrayNode:",
  35709. protocol: 'visiting',
  35710. fn: function (aNode){
  35711. var self=this;
  35712. var array;
  35713. function $IRDynamicArray(){return $globals.IRDynamicArray||(typeof IRDynamicArray=="undefined"?nil:IRDynamicArray)}
  35714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35715. return $core.withContext(function($ctx1) {
  35716. //>>excludeEnd("ctx");
  35717. var $1;
  35718. array=$recv($IRDynamicArray())._new();
  35719. $recv(self._aliasTemporally_($recv(aNode)._nodes()))._do_((function(each){
  35720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35721. return $core.withContext(function($ctx2) {
  35722. //>>excludeEnd("ctx");
  35723. return $recv(array)._add_(each);
  35724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35725. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  35726. //>>excludeEnd("ctx");
  35727. }));
  35728. $1=array;
  35729. return $1;
  35730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35731. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode,array:array},$globals.IRASTTranslator)});
  35732. //>>excludeEnd("ctx");
  35733. },
  35734. //>>excludeStart("ide", pragmas.excludeIdeData);
  35735. args: ["aNode"],
  35736. source: "visitDynamicArrayNode: aNode\x0a\x09| array |\x0a\x09array := IRDynamicArray new.\x0a\x09(self aliasTemporally: aNode nodes) do: [ :each | array add: each ].\x0a\x09^ array",
  35737. referencedClasses: ["IRDynamicArray"],
  35738. //>>excludeEnd("ide");
  35739. messageSends: ["new", "do:", "aliasTemporally:", "nodes", "add:"]
  35740. }),
  35741. $globals.IRASTTranslator);
  35742. $core.addMethod(
  35743. $core.method({
  35744. selector: "visitDynamicDictionaryNode:",
  35745. protocol: 'visiting',
  35746. fn: function (aNode){
  35747. var self=this;
  35748. var dictionary;
  35749. function $IRDynamicDictionary(){return $globals.IRDynamicDictionary||(typeof IRDynamicDictionary=="undefined"?nil:IRDynamicDictionary)}
  35750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35751. return $core.withContext(function($ctx1) {
  35752. //>>excludeEnd("ctx");
  35753. var $1;
  35754. dictionary=$recv($IRDynamicDictionary())._new();
  35755. $recv(self._aliasTemporally_($recv(aNode)._nodes()))._do_((function(each){
  35756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35757. return $core.withContext(function($ctx2) {
  35758. //>>excludeEnd("ctx");
  35759. return $recv(dictionary)._add_(each);
  35760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35761. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  35762. //>>excludeEnd("ctx");
  35763. }));
  35764. $1=dictionary;
  35765. return $1;
  35766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35767. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode,dictionary:dictionary},$globals.IRASTTranslator)});
  35768. //>>excludeEnd("ctx");
  35769. },
  35770. //>>excludeStart("ide", pragmas.excludeIdeData);
  35771. args: ["aNode"],
  35772. source: "visitDynamicDictionaryNode: aNode\x0a\x09| dictionary |\x0a\x09dictionary := IRDynamicDictionary new.\x0a\x09(self aliasTemporally: aNode nodes) do: [ :each | dictionary add: each ].\x0a\x09^ dictionary",
  35773. referencedClasses: ["IRDynamicDictionary"],
  35774. //>>excludeEnd("ide");
  35775. messageSends: ["new", "do:", "aliasTemporally:", "nodes", "add:"]
  35776. }),
  35777. $globals.IRASTTranslator);
  35778. $core.addMethod(
  35779. $core.method({
  35780. selector: "visitJSStatementNode:",
  35781. protocol: 'visiting',
  35782. fn: function (aNode){
  35783. var self=this;
  35784. function $IRVerbatim(){return $globals.IRVerbatim||(typeof IRVerbatim=="undefined"?nil:IRVerbatim)}
  35785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35786. return $core.withContext(function($ctx1) {
  35787. //>>excludeEnd("ctx");
  35788. var $2,$3,$1;
  35789. $2=$recv($IRVerbatim())._new();
  35790. $recv($2)._source_($recv($recv(aNode)._source())._crlfSanitized());
  35791. $3=$recv($2)._yourself();
  35792. $1=$3;
  35793. return $1;
  35794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35795. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.IRASTTranslator)});
  35796. //>>excludeEnd("ctx");
  35797. },
  35798. //>>excludeStart("ide", pragmas.excludeIdeData);
  35799. args: ["aNode"],
  35800. source: "visitJSStatementNode: aNode\x0a\x09^ IRVerbatim new\x0a\x09\x09source: aNode source crlfSanitized;\x0a\x09\x09yourself",
  35801. referencedClasses: ["IRVerbatim"],
  35802. //>>excludeEnd("ide");
  35803. messageSends: ["source:", "new", "crlfSanitized", "source", "yourself"]
  35804. }),
  35805. $globals.IRASTTranslator);
  35806. $core.addMethod(
  35807. $core.method({
  35808. selector: "visitMethodNode:",
  35809. protocol: 'visiting',
  35810. fn: function (aNode){
  35811. var self=this;
  35812. function $IRMethod(){return $globals.IRMethod||(typeof IRMethod=="undefined"?nil:IRMethod)}
  35813. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  35814. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  35815. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  35816. function $IRVerbatim(){return $globals.IRVerbatim||(typeof IRVerbatim=="undefined"?nil:IRVerbatim)}
  35817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35818. return $core.withContext(function($ctx1) {
  35819. //>>excludeEnd("ctx");
  35820. var $2,$3,$4,$5,$1,$7,$6,$8,$10,$11,$12,$13,$9,$14,$16,$15,$17,$18,$20,$21,$23,$24,$22,$25,$19,$27,$28,$26,$29;
  35821. $2=$recv($IRMethod())._new();
  35822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35823. $ctx1.sendIdx["new"]=1;
  35824. //>>excludeEnd("ctx");
  35825. $recv($2)._source_($recv(self._source())._crlfSanitized());
  35826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35827. $ctx1.sendIdx["source:"]=1;
  35828. //>>excludeEnd("ctx");
  35829. $recv($2)._theClass_(self._theClass());
  35830. $recv($2)._arguments_($recv(aNode)._arguments());
  35831. $recv($2)._selector_($recv(aNode)._selector());
  35832. $recv($2)._sendIndexes_($recv(aNode)._sendIndexes());
  35833. $recv($2)._superSends_($recv(aNode)._superSends());
  35834. $recv($2)._requiresSmalltalkContext_($recv(aNode)._requiresSmalltalkContext());
  35835. $recv($2)._classReferences_($recv(aNode)._classReferences());
  35836. $3=$2;
  35837. $4=$recv(aNode)._scope();
  35838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35839. $ctx1.sendIdx["scope"]=1;
  35840. //>>excludeEnd("ctx");
  35841. $recv($3)._scope_($4);
  35842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35843. $ctx1.sendIdx["scope:"]=1;
  35844. //>>excludeEnd("ctx");
  35845. $5=$recv($2)._yourself();
  35846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35847. $ctx1.sendIdx["yourself"]=1;
  35848. //>>excludeEnd("ctx");
  35849. $1=$5;
  35850. self._method_($1);
  35851. $7=$recv(aNode)._scope();
  35852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35853. $ctx1.sendIdx["scope"]=2;
  35854. //>>excludeEnd("ctx");
  35855. $6=$recv($7)._temps();
  35856. $recv($6)._do_((function(each){
  35857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35858. return $core.withContext(function($ctx2) {
  35859. //>>excludeEnd("ctx");
  35860. $8=self._method();
  35861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35862. $ctx2.sendIdx["method"]=1;
  35863. //>>excludeEnd("ctx");
  35864. $10=$recv($IRTempDeclaration())._new();
  35865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35866. $ctx2.sendIdx["new"]=2;
  35867. //>>excludeEnd("ctx");
  35868. $recv($10)._name_($recv(each)._name());
  35869. $11=$10;
  35870. $12=$recv(aNode)._scope();
  35871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35872. $ctx2.sendIdx["scope"]=3;
  35873. //>>excludeEnd("ctx");
  35874. $recv($11)._scope_($12);
  35875. $13=$recv($10)._yourself();
  35876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35877. $ctx2.sendIdx["yourself"]=2;
  35878. //>>excludeEnd("ctx");
  35879. $9=$13;
  35880. return $recv($8)._add_($9);
  35881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35882. $ctx2.sendIdx["add:"]=1;
  35883. //>>excludeEnd("ctx");
  35884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35885. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  35886. //>>excludeEnd("ctx");
  35887. }));
  35888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35889. $ctx1.sendIdx["do:"]=1;
  35890. //>>excludeEnd("ctx");
  35891. $recv($recv(aNode)._nodes())._do_((function(each){
  35892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35893. return $core.withContext(function($ctx2) {
  35894. //>>excludeEnd("ctx");
  35895. $14=self._method();
  35896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35897. $ctx2.sendIdx["method"]=2;
  35898. //>>excludeEnd("ctx");
  35899. return $recv($14)._add_(self._visit_(each));
  35900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35901. $ctx2.sendIdx["add:"]=2;
  35902. //>>excludeEnd("ctx");
  35903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35904. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  35905. //>>excludeEnd("ctx");
  35906. }));
  35907. $16=$recv(aNode)._scope();
  35908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35909. $ctx1.sendIdx["scope"]=4;
  35910. //>>excludeEnd("ctx");
  35911. $15=$recv($16)._hasLocalReturn();
  35912. if(!$core.assert($15)){
  35913. $17=self._method();
  35914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35915. $ctx1.sendIdx["method"]=3;
  35916. //>>excludeEnd("ctx");
  35917. $18=$17;
  35918. $20=$recv($IRReturn())._new();
  35919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35920. $ctx1.sendIdx["new"]=3;
  35921. //>>excludeEnd("ctx");
  35922. $21=$20;
  35923. $23=$recv($IRVariable())._new();
  35924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35925. $ctx1.sendIdx["new"]=4;
  35926. //>>excludeEnd("ctx");
  35927. $recv($23)._variable_($recv($recv($recv(aNode)._scope())._pseudoVars())._at_("self"));
  35928. $24=$recv($23)._yourself();
  35929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35930. $ctx1.sendIdx["yourself"]=3;
  35931. //>>excludeEnd("ctx");
  35932. $22=$24;
  35933. $recv($21)._add_($22);
  35934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35935. $ctx1.sendIdx["add:"]=4;
  35936. //>>excludeEnd("ctx");
  35937. $25=$recv($20)._yourself();
  35938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35939. $ctx1.sendIdx["yourself"]=4;
  35940. //>>excludeEnd("ctx");
  35941. $19=$25;
  35942. $recv($18)._add_($19);
  35943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35944. $ctx1.sendIdx["add:"]=3;
  35945. //>>excludeEnd("ctx");
  35946. $27=$recv($IRVerbatim())._new();
  35947. $recv($27)._source_("");
  35948. $28=$recv($27)._yourself();
  35949. $26=$recv($17)._add_($28);
  35950. $26;
  35951. };
  35952. $29=self._method();
  35953. return $29;
  35954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35955. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.IRASTTranslator)});
  35956. //>>excludeEnd("ctx");
  35957. },
  35958. //>>excludeStart("ide", pragmas.excludeIdeData);
  35959. args: ["aNode"],
  35960. source: "visitMethodNode: aNode\x0a\x0a\x09self method: (IRMethod new\x0a\x09\x09source: self source crlfSanitized;\x0a\x09\x09theClass: self theClass;\x0a\x09\x09arguments: aNode arguments;\x0a\x09\x09selector: aNode selector;\x0a\x09\x09sendIndexes: aNode sendIndexes;\x0a\x09\x09superSends: aNode superSends;\x0a\x09\x09requiresSmalltalkContext: aNode requiresSmalltalkContext;\x0a\x09\x09classReferences: aNode classReferences;\x0a\x09\x09scope: aNode scope;\x0a\x09\x09yourself).\x0a\x0a\x09aNode scope temps do: [ :each |\x0a\x09\x09self method add: (IRTempDeclaration new\x0a\x09\x09\x09name: each name;\x0a\x09\x09\x09scope: aNode scope;\x0a\x09\x09\x09yourself) ].\x0a\x0a\x09aNode nodes do: [ :each | self method add: (self visit: each) ].\x0a\x0a\x09aNode scope hasLocalReturn ifFalse: [self method\x0a\x09\x09add: (IRReturn new\x0a\x09\x09\x09add: (IRVariable new\x0a\x09\x09\x09\x09variable: (aNode scope pseudoVars at: 'self');\x0a\x09\x09\x09\x09yourself);\x0a\x09\x09\x09yourself);\x0a\x09\x09add: (IRVerbatim new source: ''; yourself) ].\x0a\x0a\x09^ self method",
  35961. referencedClasses: ["IRMethod", "IRTempDeclaration", "IRReturn", "IRVariable", "IRVerbatim"],
  35962. //>>excludeEnd("ide");
  35963. messageSends: ["method:", "source:", "new", "crlfSanitized", "source", "theClass:", "theClass", "arguments:", "arguments", "selector:", "selector", "sendIndexes:", "sendIndexes", "superSends:", "superSends", "requiresSmalltalkContext:", "requiresSmalltalkContext", "classReferences:", "classReferences", "scope:", "scope", "yourself", "do:", "temps", "add:", "method", "name:", "name", "nodes", "visit:", "ifFalse:", "hasLocalReturn", "variable:", "at:", "pseudoVars"]
  35964. }),
  35965. $globals.IRASTTranslator);
  35966. $core.addMethod(
  35967. $core.method({
  35968. selector: "visitOrAlias:",
  35969. protocol: 'visiting',
  35970. fn: function (aNode){
  35971. var self=this;
  35972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35973. return $core.withContext(function($ctx1) {
  35974. //>>excludeEnd("ctx");
  35975. var $2,$1;
  35976. $2=$recv(aNode)._shouldBeAliased();
  35977. if($core.assert($2)){
  35978. $1=self._alias_(aNode);
  35979. } else {
  35980. $1=self._visit_(aNode);
  35981. };
  35982. return $1;
  35983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  35984. }, function($ctx1) {$ctx1.fill(self,"visitOrAlias:",{aNode:aNode},$globals.IRASTTranslator)});
  35985. //>>excludeEnd("ctx");
  35986. },
  35987. //>>excludeStart("ide", pragmas.excludeIdeData);
  35988. args: ["aNode"],
  35989. source: "visitOrAlias: aNode\x0a\x09^ aNode shouldBeAliased\x0a\x09\x09ifTrue: [ self alias: aNode ]\x0a\x09\x09ifFalse: [ self visit: aNode ]",
  35990. referencedClasses: [],
  35991. //>>excludeEnd("ide");
  35992. messageSends: ["ifTrue:ifFalse:", "shouldBeAliased", "alias:", "visit:"]
  35993. }),
  35994. $globals.IRASTTranslator);
  35995. $core.addMethod(
  35996. $core.method({
  35997. selector: "visitReturnNode:",
  35998. protocol: 'visiting',
  35999. fn: function (aNode){
  36000. var self=this;
  36001. var return_;
  36002. function $IRNonLocalReturn(){return $globals.IRNonLocalReturn||(typeof IRNonLocalReturn=="undefined"?nil:IRNonLocalReturn)}
  36003. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  36004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36005. return $core.withContext(function($ctx1) {
  36006. //>>excludeEnd("ctx");
  36007. var $1,$2;
  36008. $1=$recv(aNode)._nonLocalReturn();
  36009. if($core.assert($1)){
  36010. return_=$recv($IRNonLocalReturn())._new();
  36011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36012. $ctx1.sendIdx["new"]=1;
  36013. //>>excludeEnd("ctx");
  36014. } else {
  36015. return_=$recv($IRReturn())._new();
  36016. };
  36017. $recv(return_)._scope_($recv(aNode)._scope());
  36018. $recv($recv(aNode)._nodes())._do_((function(each){
  36019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36020. return $core.withContext(function($ctx2) {
  36021. //>>excludeEnd("ctx");
  36022. return $recv(return_)._add_(self._alias_(each));
  36023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36024. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  36025. //>>excludeEnd("ctx");
  36026. }));
  36027. $2=return_;
  36028. return $2;
  36029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36030. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode,return_:return_},$globals.IRASTTranslator)});
  36031. //>>excludeEnd("ctx");
  36032. },
  36033. //>>excludeStart("ide", pragmas.excludeIdeData);
  36034. args: ["aNode"],
  36035. source: "visitReturnNode: aNode\x0a\x09| return |\x0a\x09return := aNode nonLocalReturn\x0a\x09\x09ifTrue: [ IRNonLocalReturn new ]\x0a\x09\x09ifFalse: [ IRReturn new ].\x0a\x09return scope: aNode scope.\x0a\x09aNode nodes do: [ :each |\x0a\x09\x09return add: (self alias: each) ].\x0a\x09^ return",
  36036. referencedClasses: ["IRNonLocalReturn", "IRReturn"],
  36037. //>>excludeEnd("ide");
  36038. messageSends: ["ifTrue:ifFalse:", "nonLocalReturn", "new", "scope:", "scope", "do:", "nodes", "add:", "alias:"]
  36039. }),
  36040. $globals.IRASTTranslator);
  36041. $core.addMethod(
  36042. $core.method({
  36043. selector: "visitSendNode:",
  36044. protocol: 'visiting',
  36045. fn: function (aNode){
  36046. var self=this;
  36047. var send,all,receiver,arguments_;
  36048. function $IRSend(){return $globals.IRSend||(typeof IRSend=="undefined"?nil:IRSend)}
  36049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36050. return $core.withContext(function($ctx1) {
  36051. //>>excludeEnd("ctx");
  36052. var $1,$2,$3,$4;
  36053. send=$recv($IRSend())._new();
  36054. $1=send;
  36055. $recv($1)._selector_($recv(aNode)._selector());
  36056. $2=$recv($1)._index_($recv(aNode)._index());
  36057. $3=$recv(aNode)._superSend();
  36058. if($core.assert($3)){
  36059. $recv(send)._classSend_($recv(self._theClass())._superclass());
  36060. };
  36061. all=self._aliasTemporally_($recv([$recv(aNode)._receiver()]).__comma($recv(aNode)._arguments()));
  36062. receiver=$recv(all)._first();
  36063. arguments_=$recv(all)._allButFirst();
  36064. $recv(send)._add_(receiver);
  36065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36066. $ctx1.sendIdx["add:"]=1;
  36067. //>>excludeEnd("ctx");
  36068. $recv(arguments_)._do_((function(each){
  36069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36070. return $core.withContext(function($ctx2) {
  36071. //>>excludeEnd("ctx");
  36072. return $recv(send)._add_(each);
  36073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36074. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  36075. //>>excludeEnd("ctx");
  36076. }));
  36077. $4=send;
  36078. return $4;
  36079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36080. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,send:send,all:all,receiver:receiver,arguments_:arguments_},$globals.IRASTTranslator)});
  36081. //>>excludeEnd("ctx");
  36082. },
  36083. //>>excludeStart("ide", pragmas.excludeIdeData);
  36084. args: ["aNode"],
  36085. source: "visitSendNode: aNode\x0a\x09| send all receiver arguments |\x0a\x09send := IRSend new.\x0a\x09send\x0a\x09\x09selector: aNode selector;\x0a\x09\x09index: aNode index.\x0a\x09aNode superSend ifTrue: [ send classSend: self theClass superclass ].\x0a\x09\x0a\x09all := self aliasTemporally: { aNode receiver }, aNode arguments.\x0a\x09receiver := all first.\x0a\x09arguments := all allButFirst.\x0a\x0a\x09send add: receiver.\x0a\x09arguments do: [ :each | send add: each ].\x0a\x0a\x09^ send",
  36086. referencedClasses: ["IRSend"],
  36087. //>>excludeEnd("ide");
  36088. messageSends: ["new", "selector:", "selector", "index:", "index", "ifTrue:", "superSend", "classSend:", "superclass", "theClass", "aliasTemporally:", ",", "receiver", "arguments", "first", "allButFirst", "add:", "do:"]
  36089. }),
  36090. $globals.IRASTTranslator);
  36091. $core.addMethod(
  36092. $core.method({
  36093. selector: "visitSequenceNode:",
  36094. protocol: 'visiting',
  36095. fn: function (aNode){
  36096. var self=this;
  36097. function $IRSequence(){return $globals.IRSequence||(typeof IRSequence=="undefined"?nil:IRSequence)}
  36098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36099. return $core.withContext(function($ctx1) {
  36100. //>>excludeEnd("ctx");
  36101. var $2,$1;
  36102. $1=self._withSequence_do_($recv($IRSequence())._new(),(function(){
  36103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36104. return $core.withContext(function($ctx2) {
  36105. //>>excludeEnd("ctx");
  36106. return $recv($recv(aNode)._nodes())._do_((function(each){
  36107. var instruction;
  36108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36109. return $core.withContext(function($ctx3) {
  36110. //>>excludeEnd("ctx");
  36111. instruction=self._visitOrAlias_(each);
  36112. instruction;
  36113. $2=$recv(instruction)._isVariable();
  36114. if(!$core.assert($2)){
  36115. return $recv(self._sequence())._add_(instruction);
  36116. };
  36117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36118. }, function($ctx3) {$ctx3.fillBlock({each:each,instruction:instruction},$ctx2,2)});
  36119. //>>excludeEnd("ctx");
  36120. }));
  36121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36122. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  36123. //>>excludeEnd("ctx");
  36124. }));
  36125. return $1;
  36126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36127. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36128. //>>excludeEnd("ctx");
  36129. },
  36130. //>>excludeStart("ide", pragmas.excludeIdeData);
  36131. args: ["aNode"],
  36132. source: "visitSequenceNode: aNode\x0a\x09^ self\x0a\x09\x09withSequence: IRSequence new\x0a\x09\x09do: [\x0a\x09\x09\x09aNode nodes do: [ :each | | instruction |\x0a\x09\x09\x09\x09instruction := self visitOrAlias: each.\x0a\x09\x09\x09\x09instruction isVariable ifFalse: [\x0a\x09\x09\x09\x09\x09self sequence add: instruction ] ]]",
  36133. referencedClasses: ["IRSequence"],
  36134. //>>excludeEnd("ide");
  36135. messageSends: ["withSequence:do:", "new", "do:", "nodes", "visitOrAlias:", "ifFalse:", "isVariable", "add:", "sequence"]
  36136. }),
  36137. $globals.IRASTTranslator);
  36138. $core.addMethod(
  36139. $core.method({
  36140. selector: "visitValueNode:",
  36141. protocol: 'visiting',
  36142. fn: function (aNode){
  36143. var self=this;
  36144. function $IRValue(){return $globals.IRValue||(typeof IRValue=="undefined"?nil:IRValue)}
  36145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36146. return $core.withContext(function($ctx1) {
  36147. //>>excludeEnd("ctx");
  36148. var $2,$3,$1;
  36149. $2=$recv($IRValue())._new();
  36150. $recv($2)._value_($recv(aNode)._value());
  36151. $3=$recv($2)._yourself();
  36152. $1=$3;
  36153. return $1;
  36154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36155. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36156. //>>excludeEnd("ctx");
  36157. },
  36158. //>>excludeStart("ide", pragmas.excludeIdeData);
  36159. args: ["aNode"],
  36160. source: "visitValueNode: aNode\x0a\x09^ IRValue new\x0a\x09\x09value: aNode value;\x0a\x09\x09yourself",
  36161. referencedClasses: ["IRValue"],
  36162. //>>excludeEnd("ide");
  36163. messageSends: ["value:", "new", "value", "yourself"]
  36164. }),
  36165. $globals.IRASTTranslator);
  36166. $core.addMethod(
  36167. $core.method({
  36168. selector: "visitVariableNode:",
  36169. protocol: 'visiting',
  36170. fn: function (aNode){
  36171. var self=this;
  36172. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  36173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36174. return $core.withContext(function($ctx1) {
  36175. //>>excludeEnd("ctx");
  36176. var $2,$3,$1;
  36177. $2=$recv($IRVariable())._new();
  36178. $recv($2)._variable_($recv(aNode)._binding());
  36179. $3=$recv($2)._yourself();
  36180. $1=$3;
  36181. return $1;
  36182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36183. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.IRASTTranslator)});
  36184. //>>excludeEnd("ctx");
  36185. },
  36186. //>>excludeStart("ide", pragmas.excludeIdeData);
  36187. args: ["aNode"],
  36188. source: "visitVariableNode: aNode\x0a\x09^ IRVariable new\x0a\x09\x09variable: aNode binding;\x0a\x09\x09yourself",
  36189. referencedClasses: ["IRVariable"],
  36190. //>>excludeEnd("ide");
  36191. messageSends: ["variable:", "new", "binding", "yourself"]
  36192. }),
  36193. $globals.IRASTTranslator);
  36194. $core.addMethod(
  36195. $core.method({
  36196. selector: "withSequence:do:",
  36197. protocol: 'accessing',
  36198. fn: function (aSequence,aBlock){
  36199. var self=this;
  36200. var outerSequence;
  36201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36202. return $core.withContext(function($ctx1) {
  36203. //>>excludeEnd("ctx");
  36204. outerSequence=self._sequence();
  36205. self._sequence_(aSequence);
  36206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36207. $ctx1.sendIdx["sequence:"]=1;
  36208. //>>excludeEnd("ctx");
  36209. $recv(aBlock)._value();
  36210. self._sequence_(outerSequence);
  36211. return aSequence;
  36212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36213. }, function($ctx1) {$ctx1.fill(self,"withSequence:do:",{aSequence:aSequence,aBlock:aBlock,outerSequence:outerSequence},$globals.IRASTTranslator)});
  36214. //>>excludeEnd("ctx");
  36215. },
  36216. //>>excludeStart("ide", pragmas.excludeIdeData);
  36217. args: ["aSequence", "aBlock"],
  36218. source: "withSequence: aSequence do: aBlock\x0a\x09| outerSequence |\x0a\x09outerSequence := self sequence.\x0a\x09self sequence: aSequence.\x0a\x09aBlock value.\x0a\x09self sequence: outerSequence.\x0a\x09^ aSequence",
  36219. referencedClasses: [],
  36220. //>>excludeEnd("ide");
  36221. messageSends: ["sequence", "sequence:", "value"]
  36222. }),
  36223. $globals.IRASTTranslator);
  36224. $core.addClass('IRInstruction', $globals.Object, ['parent', 'instructions'], 'Compiler-IR');
  36225. //>>excludeStart("ide", pragmas.excludeIdeData);
  36226. $globals.IRInstruction.comment="I am the abstract root class of the IR (intermediate representation) instructions class hierarchy.\x0aThe IR graph is used to emit JavaScript code using a JSStream.";
  36227. //>>excludeEnd("ide");
  36228. $core.addMethod(
  36229. $core.method({
  36230. selector: "accept:",
  36231. protocol: 'visiting',
  36232. fn: function (aVisitor){
  36233. var self=this;
  36234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36235. return $core.withContext(function($ctx1) {
  36236. //>>excludeEnd("ctx");
  36237. var $1;
  36238. $1=$recv(aVisitor)._visitIRInstruction_(self);
  36239. return $1;
  36240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36241. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInstruction)});
  36242. //>>excludeEnd("ctx");
  36243. },
  36244. //>>excludeStart("ide", pragmas.excludeIdeData);
  36245. args: ["aVisitor"],
  36246. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInstruction: self",
  36247. referencedClasses: [],
  36248. //>>excludeEnd("ide");
  36249. messageSends: ["visitIRInstruction:"]
  36250. }),
  36251. $globals.IRInstruction);
  36252. $core.addMethod(
  36253. $core.method({
  36254. selector: "add:",
  36255. protocol: 'building',
  36256. fn: function (anObject){
  36257. var self=this;
  36258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36259. return $core.withContext(function($ctx1) {
  36260. //>>excludeEnd("ctx");
  36261. var $1;
  36262. $recv(anObject)._parent_(self);
  36263. $1=$recv(self._instructions())._add_(anObject);
  36264. return $1;
  36265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36266. }, function($ctx1) {$ctx1.fill(self,"add:",{anObject:anObject},$globals.IRInstruction)});
  36267. //>>excludeEnd("ctx");
  36268. },
  36269. //>>excludeStart("ide", pragmas.excludeIdeData);
  36270. args: ["anObject"],
  36271. source: "add: anObject\x0a\x09anObject parent: self.\x0a\x09^ self instructions add: anObject",
  36272. referencedClasses: [],
  36273. //>>excludeEnd("ide");
  36274. messageSends: ["parent:", "add:", "instructions"]
  36275. }),
  36276. $globals.IRInstruction);
  36277. $core.addMethod(
  36278. $core.method({
  36279. selector: "canBeAssigned",
  36280. protocol: 'testing',
  36281. fn: function (){
  36282. var self=this;
  36283. return true;
  36284. },
  36285. //>>excludeStart("ide", pragmas.excludeIdeData);
  36286. args: [],
  36287. source: "canBeAssigned\x0a\x09^ true",
  36288. referencedClasses: [],
  36289. //>>excludeEnd("ide");
  36290. messageSends: []
  36291. }),
  36292. $globals.IRInstruction);
  36293. $core.addMethod(
  36294. $core.method({
  36295. selector: "instructions",
  36296. protocol: 'accessing',
  36297. fn: function (){
  36298. var self=this;
  36299. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  36300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36301. return $core.withContext(function($ctx1) {
  36302. //>>excludeEnd("ctx");
  36303. var $2,$1,$receiver;
  36304. $2=self["@instructions"];
  36305. if(($receiver = $2) == null || $receiver.isNil){
  36306. self["@instructions"]=$recv($OrderedCollection())._new();
  36307. $1=self["@instructions"];
  36308. } else {
  36309. $1=$2;
  36310. };
  36311. return $1;
  36312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36313. }, function($ctx1) {$ctx1.fill(self,"instructions",{},$globals.IRInstruction)});
  36314. //>>excludeEnd("ctx");
  36315. },
  36316. //>>excludeStart("ide", pragmas.excludeIdeData);
  36317. args: [],
  36318. source: "instructions\x0a\x09^ instructions ifNil: [ instructions := OrderedCollection new ]",
  36319. referencedClasses: ["OrderedCollection"],
  36320. //>>excludeEnd("ide");
  36321. messageSends: ["ifNil:", "new"]
  36322. }),
  36323. $globals.IRInstruction);
  36324. $core.addMethod(
  36325. $core.method({
  36326. selector: "isClosure",
  36327. protocol: 'testing',
  36328. fn: function (){
  36329. var self=this;
  36330. return false;
  36331. },
  36332. //>>excludeStart("ide", pragmas.excludeIdeData);
  36333. args: [],
  36334. source: "isClosure\x0a\x09^ false",
  36335. referencedClasses: [],
  36336. //>>excludeEnd("ide");
  36337. messageSends: []
  36338. }),
  36339. $globals.IRInstruction);
  36340. $core.addMethod(
  36341. $core.method({
  36342. selector: "isInlined",
  36343. protocol: 'testing',
  36344. fn: function (){
  36345. var self=this;
  36346. return false;
  36347. },
  36348. //>>excludeStart("ide", pragmas.excludeIdeData);
  36349. args: [],
  36350. source: "isInlined\x0a\x09^ false",
  36351. referencedClasses: [],
  36352. //>>excludeEnd("ide");
  36353. messageSends: []
  36354. }),
  36355. $globals.IRInstruction);
  36356. $core.addMethod(
  36357. $core.method({
  36358. selector: "isLocalReturn",
  36359. protocol: 'testing',
  36360. fn: function (){
  36361. var self=this;
  36362. return false;
  36363. },
  36364. //>>excludeStart("ide", pragmas.excludeIdeData);
  36365. args: [],
  36366. source: "isLocalReturn\x0a\x09^ false",
  36367. referencedClasses: [],
  36368. //>>excludeEnd("ide");
  36369. messageSends: []
  36370. }),
  36371. $globals.IRInstruction);
  36372. $core.addMethod(
  36373. $core.method({
  36374. selector: "isMethod",
  36375. protocol: 'testing',
  36376. fn: function (){
  36377. var self=this;
  36378. return false;
  36379. },
  36380. //>>excludeStart("ide", pragmas.excludeIdeData);
  36381. args: [],
  36382. source: "isMethod\x0a\x09^ false",
  36383. referencedClasses: [],
  36384. //>>excludeEnd("ide");
  36385. messageSends: []
  36386. }),
  36387. $globals.IRInstruction);
  36388. $core.addMethod(
  36389. $core.method({
  36390. selector: "isReturn",
  36391. protocol: 'testing',
  36392. fn: function (){
  36393. var self=this;
  36394. return false;
  36395. },
  36396. //>>excludeStart("ide", pragmas.excludeIdeData);
  36397. args: [],
  36398. source: "isReturn\x0a\x09^ false",
  36399. referencedClasses: [],
  36400. //>>excludeEnd("ide");
  36401. messageSends: []
  36402. }),
  36403. $globals.IRInstruction);
  36404. $core.addMethod(
  36405. $core.method({
  36406. selector: "isSend",
  36407. protocol: 'testing',
  36408. fn: function (){
  36409. var self=this;
  36410. return false;
  36411. },
  36412. //>>excludeStart("ide", pragmas.excludeIdeData);
  36413. args: [],
  36414. source: "isSend\x0a\x09^ false",
  36415. referencedClasses: [],
  36416. //>>excludeEnd("ide");
  36417. messageSends: []
  36418. }),
  36419. $globals.IRInstruction);
  36420. $core.addMethod(
  36421. $core.method({
  36422. selector: "isSequence",
  36423. protocol: 'testing',
  36424. fn: function (){
  36425. var self=this;
  36426. return false;
  36427. },
  36428. //>>excludeStart("ide", pragmas.excludeIdeData);
  36429. args: [],
  36430. source: "isSequence\x0a\x09^ false",
  36431. referencedClasses: [],
  36432. //>>excludeEnd("ide");
  36433. messageSends: []
  36434. }),
  36435. $globals.IRInstruction);
  36436. $core.addMethod(
  36437. $core.method({
  36438. selector: "isTempDeclaration",
  36439. protocol: 'testing',
  36440. fn: function (){
  36441. var self=this;
  36442. return false;
  36443. },
  36444. //>>excludeStart("ide", pragmas.excludeIdeData);
  36445. args: [],
  36446. source: "isTempDeclaration\x0a\x09^ false",
  36447. referencedClasses: [],
  36448. //>>excludeEnd("ide");
  36449. messageSends: []
  36450. }),
  36451. $globals.IRInstruction);
  36452. $core.addMethod(
  36453. $core.method({
  36454. selector: "isVariable",
  36455. protocol: 'testing',
  36456. fn: function (){
  36457. var self=this;
  36458. return false;
  36459. },
  36460. //>>excludeStart("ide", pragmas.excludeIdeData);
  36461. args: [],
  36462. source: "isVariable\x0a\x09^ false",
  36463. referencedClasses: [],
  36464. //>>excludeEnd("ide");
  36465. messageSends: []
  36466. }),
  36467. $globals.IRInstruction);
  36468. $core.addMethod(
  36469. $core.method({
  36470. selector: "method",
  36471. protocol: 'accessing',
  36472. fn: function (){
  36473. var self=this;
  36474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36475. return $core.withContext(function($ctx1) {
  36476. //>>excludeEnd("ctx");
  36477. var $1;
  36478. $1=$recv(self._parent())._method();
  36479. return $1;
  36480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36481. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.IRInstruction)});
  36482. //>>excludeEnd("ctx");
  36483. },
  36484. //>>excludeStart("ide", pragmas.excludeIdeData);
  36485. args: [],
  36486. source: "method\x0a\x09^ self parent method",
  36487. referencedClasses: [],
  36488. //>>excludeEnd("ide");
  36489. messageSends: ["method", "parent"]
  36490. }),
  36491. $globals.IRInstruction);
  36492. $core.addMethod(
  36493. $core.method({
  36494. selector: "needsBoxingAsReceiver",
  36495. protocol: 'testing',
  36496. fn: function (){
  36497. var self=this;
  36498. return true;
  36499. },
  36500. //>>excludeStart("ide", pragmas.excludeIdeData);
  36501. args: [],
  36502. source: "needsBoxingAsReceiver\x0a\x09^ true",
  36503. referencedClasses: [],
  36504. //>>excludeEnd("ide");
  36505. messageSends: []
  36506. }),
  36507. $globals.IRInstruction);
  36508. $core.addMethod(
  36509. $core.method({
  36510. selector: "parent",
  36511. protocol: 'accessing',
  36512. fn: function (){
  36513. var self=this;
  36514. var $1;
  36515. $1=self["@parent"];
  36516. return $1;
  36517. },
  36518. //>>excludeStart("ide", pragmas.excludeIdeData);
  36519. args: [],
  36520. source: "parent\x0a\x09^ parent",
  36521. referencedClasses: [],
  36522. //>>excludeEnd("ide");
  36523. messageSends: []
  36524. }),
  36525. $globals.IRInstruction);
  36526. $core.addMethod(
  36527. $core.method({
  36528. selector: "parent:",
  36529. protocol: 'accessing',
  36530. fn: function (anIRInstruction){
  36531. var self=this;
  36532. self["@parent"]=anIRInstruction;
  36533. return self;
  36534. },
  36535. //>>excludeStart("ide", pragmas.excludeIdeData);
  36536. args: ["anIRInstruction"],
  36537. source: "parent: anIRInstruction\x0a\x09parent := anIRInstruction",
  36538. referencedClasses: [],
  36539. //>>excludeEnd("ide");
  36540. messageSends: []
  36541. }),
  36542. $globals.IRInstruction);
  36543. $core.addMethod(
  36544. $core.method({
  36545. selector: "remove",
  36546. protocol: 'building',
  36547. fn: function (){
  36548. var self=this;
  36549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36550. return $core.withContext(function($ctx1) {
  36551. //>>excludeEnd("ctx");
  36552. $recv(self._parent())._remove_(self);
  36553. return self;
  36554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36555. }, function($ctx1) {$ctx1.fill(self,"remove",{},$globals.IRInstruction)});
  36556. //>>excludeEnd("ctx");
  36557. },
  36558. //>>excludeStart("ide", pragmas.excludeIdeData);
  36559. args: [],
  36560. source: "remove\x0a\x09self parent remove: self",
  36561. referencedClasses: [],
  36562. //>>excludeEnd("ide");
  36563. messageSends: ["remove:", "parent"]
  36564. }),
  36565. $globals.IRInstruction);
  36566. $core.addMethod(
  36567. $core.method({
  36568. selector: "remove:",
  36569. protocol: 'building',
  36570. fn: function (anIRInstruction){
  36571. var self=this;
  36572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36573. return $core.withContext(function($ctx1) {
  36574. //>>excludeEnd("ctx");
  36575. $recv(self._instructions())._remove_(anIRInstruction);
  36576. return self;
  36577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36578. }, function($ctx1) {$ctx1.fill(self,"remove:",{anIRInstruction:anIRInstruction},$globals.IRInstruction)});
  36579. //>>excludeEnd("ctx");
  36580. },
  36581. //>>excludeStart("ide", pragmas.excludeIdeData);
  36582. args: ["anIRInstruction"],
  36583. source: "remove: anIRInstruction\x0a\x09self instructions remove: anIRInstruction",
  36584. referencedClasses: [],
  36585. //>>excludeEnd("ide");
  36586. messageSends: ["remove:", "instructions"]
  36587. }),
  36588. $globals.IRInstruction);
  36589. $core.addMethod(
  36590. $core.method({
  36591. selector: "replace:with:",
  36592. protocol: 'building',
  36593. fn: function (anIRInstruction,anotherIRInstruction){
  36594. var self=this;
  36595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36596. return $core.withContext(function($ctx1) {
  36597. //>>excludeEnd("ctx");
  36598. var $1;
  36599. $recv(anotherIRInstruction)._parent_(self);
  36600. $1=self._instructions();
  36601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36602. $ctx1.sendIdx["instructions"]=1;
  36603. //>>excludeEnd("ctx");
  36604. $recv($1)._at_put_($recv(self._instructions())._indexOf_(anIRInstruction),anotherIRInstruction);
  36605. return self;
  36606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36607. }, function($ctx1) {$ctx1.fill(self,"replace:with:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRInstruction)});
  36608. //>>excludeEnd("ctx");
  36609. },
  36610. //>>excludeStart("ide", pragmas.excludeIdeData);
  36611. args: ["anIRInstruction", "anotherIRInstruction"],
  36612. source: "replace: anIRInstruction with: anotherIRInstruction\x0a\x09anotherIRInstruction parent: self.\x0a\x09self instructions\x0a\x09\x09at: (self instructions indexOf: anIRInstruction)\x0a\x09\x09put: anotherIRInstruction",
  36613. referencedClasses: [],
  36614. //>>excludeEnd("ide");
  36615. messageSends: ["parent:", "at:put:", "instructions", "indexOf:"]
  36616. }),
  36617. $globals.IRInstruction);
  36618. $core.addMethod(
  36619. $core.method({
  36620. selector: "replaceWith:",
  36621. protocol: 'building',
  36622. fn: function (anIRInstruction){
  36623. var self=this;
  36624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36625. return $core.withContext(function($ctx1) {
  36626. //>>excludeEnd("ctx");
  36627. $recv(self._parent())._replace_with_(self,anIRInstruction);
  36628. return self;
  36629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36630. }, function($ctx1) {$ctx1.fill(self,"replaceWith:",{anIRInstruction:anIRInstruction},$globals.IRInstruction)});
  36631. //>>excludeEnd("ctx");
  36632. },
  36633. //>>excludeStart("ide", pragmas.excludeIdeData);
  36634. args: ["anIRInstruction"],
  36635. source: "replaceWith: anIRInstruction\x0a\x09self parent replace: self with: anIRInstruction",
  36636. referencedClasses: [],
  36637. //>>excludeEnd("ide");
  36638. messageSends: ["replace:with:", "parent"]
  36639. }),
  36640. $globals.IRInstruction);
  36641. $core.addMethod(
  36642. $core.method({
  36643. selector: "scope",
  36644. protocol: 'accessing',
  36645. fn: function (){
  36646. var self=this;
  36647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36648. return $core.withContext(function($ctx1) {
  36649. //>>excludeEnd("ctx");
  36650. var $2,$1,$receiver;
  36651. $2=self._parent();
  36652. if(($receiver = $2) == null || $receiver.isNil){
  36653. $1=$2;
  36654. } else {
  36655. var node;
  36656. node=$receiver;
  36657. $1=$recv(node)._scope();
  36658. };
  36659. return $1;
  36660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36661. }, function($ctx1) {$ctx1.fill(self,"scope",{},$globals.IRInstruction)});
  36662. //>>excludeEnd("ctx");
  36663. },
  36664. //>>excludeStart("ide", pragmas.excludeIdeData);
  36665. args: [],
  36666. source: "scope\x0a\x09^ self parent ifNotNil: [ :node | \x0a\x09\x09node scope ]",
  36667. referencedClasses: [],
  36668. //>>excludeEnd("ide");
  36669. messageSends: ["ifNotNil:", "parent", "scope"]
  36670. }),
  36671. $globals.IRInstruction);
  36672. $core.addMethod(
  36673. $core.method({
  36674. selector: "on:",
  36675. protocol: 'instance creation',
  36676. fn: function (aBuilder){
  36677. var self=this;
  36678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36679. return $core.withContext(function($ctx1) {
  36680. //>>excludeEnd("ctx");
  36681. var $2,$3,$1;
  36682. $2=self._new();
  36683. $recv($2)._builder_(aBuilder);
  36684. $3=$recv($2)._yourself();
  36685. $1=$3;
  36686. return $1;
  36687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36688. }, function($ctx1) {$ctx1.fill(self,"on:",{aBuilder:aBuilder},$globals.IRInstruction.klass)});
  36689. //>>excludeEnd("ctx");
  36690. },
  36691. //>>excludeStart("ide", pragmas.excludeIdeData);
  36692. args: ["aBuilder"],
  36693. source: "on: aBuilder\x0a\x09^ self new\x0a\x09\x09builder: aBuilder;\x0a\x09\x09yourself",
  36694. referencedClasses: [],
  36695. //>>excludeEnd("ide");
  36696. messageSends: ["builder:", "new", "yourself"]
  36697. }),
  36698. $globals.IRInstruction.klass);
  36699. $core.addClass('IRAssignment', $globals.IRInstruction, [], 'Compiler-IR');
  36700. $core.addMethod(
  36701. $core.method({
  36702. selector: "accept:",
  36703. protocol: 'visiting',
  36704. fn: function (aVisitor){
  36705. var self=this;
  36706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36707. return $core.withContext(function($ctx1) {
  36708. //>>excludeEnd("ctx");
  36709. var $1;
  36710. $1=$recv(aVisitor)._visitIRAssignment_(self);
  36711. return $1;
  36712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36713. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRAssignment)});
  36714. //>>excludeEnd("ctx");
  36715. },
  36716. //>>excludeStart("ide", pragmas.excludeIdeData);
  36717. args: ["aVisitor"],
  36718. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRAssignment: self",
  36719. referencedClasses: [],
  36720. //>>excludeEnd("ide");
  36721. messageSends: ["visitIRAssignment:"]
  36722. }),
  36723. $globals.IRAssignment);
  36724. $core.addClass('IRDynamicArray', $globals.IRInstruction, [], 'Compiler-IR');
  36725. $core.addMethod(
  36726. $core.method({
  36727. selector: "accept:",
  36728. protocol: 'visiting',
  36729. fn: function (aVisitor){
  36730. var self=this;
  36731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36732. return $core.withContext(function($ctx1) {
  36733. //>>excludeEnd("ctx");
  36734. var $1;
  36735. $1=$recv(aVisitor)._visitIRDynamicArray_(self);
  36736. return $1;
  36737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36738. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRDynamicArray)});
  36739. //>>excludeEnd("ctx");
  36740. },
  36741. //>>excludeStart("ide", pragmas.excludeIdeData);
  36742. args: ["aVisitor"],
  36743. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRDynamicArray: self",
  36744. referencedClasses: [],
  36745. //>>excludeEnd("ide");
  36746. messageSends: ["visitIRDynamicArray:"]
  36747. }),
  36748. $globals.IRDynamicArray);
  36749. $core.addClass('IRDynamicDictionary', $globals.IRInstruction, [], 'Compiler-IR');
  36750. $core.addMethod(
  36751. $core.method({
  36752. selector: "accept:",
  36753. protocol: 'visiting',
  36754. fn: function (aVisitor){
  36755. var self=this;
  36756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36757. return $core.withContext(function($ctx1) {
  36758. //>>excludeEnd("ctx");
  36759. var $1;
  36760. $1=$recv(aVisitor)._visitIRDynamicDictionary_(self);
  36761. return $1;
  36762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36763. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRDynamicDictionary)});
  36764. //>>excludeEnd("ctx");
  36765. },
  36766. //>>excludeStart("ide", pragmas.excludeIdeData);
  36767. args: ["aVisitor"],
  36768. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRDynamicDictionary: self",
  36769. referencedClasses: [],
  36770. //>>excludeEnd("ide");
  36771. messageSends: ["visitIRDynamicDictionary:"]
  36772. }),
  36773. $globals.IRDynamicDictionary);
  36774. $core.addClass('IRScopedInstruction', $globals.IRInstruction, ['scope'], 'Compiler-IR');
  36775. $core.addMethod(
  36776. $core.method({
  36777. selector: "scope",
  36778. protocol: 'accessing',
  36779. fn: function (){
  36780. var self=this;
  36781. var $1;
  36782. $1=self["@scope"];
  36783. return $1;
  36784. },
  36785. //>>excludeStart("ide", pragmas.excludeIdeData);
  36786. args: [],
  36787. source: "scope\x0a\x09^ scope",
  36788. referencedClasses: [],
  36789. //>>excludeEnd("ide");
  36790. messageSends: []
  36791. }),
  36792. $globals.IRScopedInstruction);
  36793. $core.addMethod(
  36794. $core.method({
  36795. selector: "scope:",
  36796. protocol: 'accessing',
  36797. fn: function (aScope){
  36798. var self=this;
  36799. self["@scope"]=aScope;
  36800. return self;
  36801. },
  36802. //>>excludeStart("ide", pragmas.excludeIdeData);
  36803. args: ["aScope"],
  36804. source: "scope: aScope\x0a\x09scope := aScope",
  36805. referencedClasses: [],
  36806. //>>excludeEnd("ide");
  36807. messageSends: []
  36808. }),
  36809. $globals.IRScopedInstruction);
  36810. $core.addClass('IRClosureInstruction', $globals.IRScopedInstruction, ['arguments', 'requiresSmalltalkContext'], 'Compiler-IR');
  36811. $core.addMethod(
  36812. $core.method({
  36813. selector: "arguments",
  36814. protocol: 'accessing',
  36815. fn: function (){
  36816. var self=this;
  36817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36818. return $core.withContext(function($ctx1) {
  36819. //>>excludeEnd("ctx");
  36820. var $2,$1,$receiver;
  36821. $2=self["@arguments"];
  36822. if(($receiver = $2) == null || $receiver.isNil){
  36823. $1=[];
  36824. } else {
  36825. $1=$2;
  36826. };
  36827. return $1;
  36828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36829. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.IRClosureInstruction)});
  36830. //>>excludeEnd("ctx");
  36831. },
  36832. //>>excludeStart("ide", pragmas.excludeIdeData);
  36833. args: [],
  36834. source: "arguments\x0a\x09^ arguments ifNil: [ #() ]",
  36835. referencedClasses: [],
  36836. //>>excludeEnd("ide");
  36837. messageSends: ["ifNil:"]
  36838. }),
  36839. $globals.IRClosureInstruction);
  36840. $core.addMethod(
  36841. $core.method({
  36842. selector: "arguments:",
  36843. protocol: 'accessing',
  36844. fn: function (aCollection){
  36845. var self=this;
  36846. self["@arguments"]=aCollection;
  36847. return self;
  36848. },
  36849. //>>excludeStart("ide", pragmas.excludeIdeData);
  36850. args: ["aCollection"],
  36851. source: "arguments: aCollection\x0a\x09arguments := aCollection",
  36852. referencedClasses: [],
  36853. //>>excludeEnd("ide");
  36854. messageSends: []
  36855. }),
  36856. $globals.IRClosureInstruction);
  36857. $core.addMethod(
  36858. $core.method({
  36859. selector: "locals",
  36860. protocol: 'accessing',
  36861. fn: function (){
  36862. var self=this;
  36863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36864. return $core.withContext(function($ctx1) {
  36865. //>>excludeEnd("ctx");
  36866. var $2,$3,$1;
  36867. $2=$recv(self._arguments())._copy();
  36868. $recv($2)._addAll_($recv(self._tempDeclarations())._collect_((function(each){
  36869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36870. return $core.withContext(function($ctx2) {
  36871. //>>excludeEnd("ctx");
  36872. return $recv(each)._name();
  36873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36874. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36875. //>>excludeEnd("ctx");
  36876. })));
  36877. $3=$recv($2)._yourself();
  36878. $1=$3;
  36879. return $1;
  36880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36881. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.IRClosureInstruction)});
  36882. //>>excludeEnd("ctx");
  36883. },
  36884. //>>excludeStart("ide", pragmas.excludeIdeData);
  36885. args: [],
  36886. source: "locals\x0a\x09^ self arguments copy\x0a\x09\x09addAll: (self tempDeclarations collect: [ :each | each name ]);\x0a\x09\x09yourself",
  36887. referencedClasses: [],
  36888. //>>excludeEnd("ide");
  36889. messageSends: ["addAll:", "copy", "arguments", "collect:", "tempDeclarations", "name", "yourself"]
  36890. }),
  36891. $globals.IRClosureInstruction);
  36892. $core.addMethod(
  36893. $core.method({
  36894. selector: "requiresSmalltalkContext",
  36895. protocol: 'accessing',
  36896. fn: function (){
  36897. var self=this;
  36898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36899. return $core.withContext(function($ctx1) {
  36900. //>>excludeEnd("ctx");
  36901. var $2,$1,$receiver;
  36902. $2=self["@requiresSmalltalkContext"];
  36903. if(($receiver = $2) == null || $receiver.isNil){
  36904. $1=false;
  36905. } else {
  36906. $1=$2;
  36907. };
  36908. return $1;
  36909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36910. }, function($ctx1) {$ctx1.fill(self,"requiresSmalltalkContext",{},$globals.IRClosureInstruction)});
  36911. //>>excludeEnd("ctx");
  36912. },
  36913. //>>excludeStart("ide", pragmas.excludeIdeData);
  36914. args: [],
  36915. source: "requiresSmalltalkContext\x0a\x09^ requiresSmalltalkContext ifNil: [ false ]",
  36916. referencedClasses: [],
  36917. //>>excludeEnd("ide");
  36918. messageSends: ["ifNil:"]
  36919. }),
  36920. $globals.IRClosureInstruction);
  36921. $core.addMethod(
  36922. $core.method({
  36923. selector: "requiresSmalltalkContext:",
  36924. protocol: 'accessing',
  36925. fn: function (anObject){
  36926. var self=this;
  36927. self["@requiresSmalltalkContext"]=anObject;
  36928. return self;
  36929. },
  36930. //>>excludeStart("ide", pragmas.excludeIdeData);
  36931. args: ["anObject"],
  36932. source: "requiresSmalltalkContext: anObject\x0a\x09requiresSmalltalkContext := anObject",
  36933. referencedClasses: [],
  36934. //>>excludeEnd("ide");
  36935. messageSends: []
  36936. }),
  36937. $globals.IRClosureInstruction);
  36938. $core.addMethod(
  36939. $core.method({
  36940. selector: "scope:",
  36941. protocol: 'accessing',
  36942. fn: function (aScope){
  36943. var self=this;
  36944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36945. return $core.withContext(function($ctx1) {
  36946. //>>excludeEnd("ctx");
  36947. (
  36948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36949. $ctx1.supercall = true,
  36950. //>>excludeEnd("ctx");
  36951. $globals.IRClosureInstruction.superclass.fn.prototype._scope_.apply($recv(self), [aScope]));
  36952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36953. $ctx1.supercall = false;
  36954. //>>excludeEnd("ctx");;
  36955. $recv(aScope)._instruction_(self);
  36956. return self;
  36957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36958. }, function($ctx1) {$ctx1.fill(self,"scope:",{aScope:aScope},$globals.IRClosureInstruction)});
  36959. //>>excludeEnd("ctx");
  36960. },
  36961. //>>excludeStart("ide", pragmas.excludeIdeData);
  36962. args: ["aScope"],
  36963. source: "scope: aScope\x0a\x09super scope: aScope.\x0a\x09aScope instruction: self",
  36964. referencedClasses: [],
  36965. //>>excludeEnd("ide");
  36966. messageSends: ["scope:", "instruction:"]
  36967. }),
  36968. $globals.IRClosureInstruction);
  36969. $core.addMethod(
  36970. $core.method({
  36971. selector: "tempDeclarations",
  36972. protocol: 'accessing',
  36973. fn: function (){
  36974. var self=this;
  36975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36976. return $core.withContext(function($ctx1) {
  36977. //>>excludeEnd("ctx");
  36978. var $1;
  36979. $1=$recv(self._instructions())._select_((function(each){
  36980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36981. return $core.withContext(function($ctx2) {
  36982. //>>excludeEnd("ctx");
  36983. return $recv(each)._isTempDeclaration();
  36984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36985. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  36986. //>>excludeEnd("ctx");
  36987. }));
  36988. return $1;
  36989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36990. }, function($ctx1) {$ctx1.fill(self,"tempDeclarations",{},$globals.IRClosureInstruction)});
  36991. //>>excludeEnd("ctx");
  36992. },
  36993. //>>excludeStart("ide", pragmas.excludeIdeData);
  36994. args: [],
  36995. source: "tempDeclarations\x0a\x09^ self instructions select: [ :each |\x0a\x09\x09each isTempDeclaration ]",
  36996. referencedClasses: [],
  36997. //>>excludeEnd("ide");
  36998. messageSends: ["select:", "instructions", "isTempDeclaration"]
  36999. }),
  37000. $globals.IRClosureInstruction);
  37001. $core.addClass('IRClosure', $globals.IRClosureInstruction, [], 'Compiler-IR');
  37002. $core.addMethod(
  37003. $core.method({
  37004. selector: "accept:",
  37005. protocol: 'visiting',
  37006. fn: function (aVisitor){
  37007. var self=this;
  37008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37009. return $core.withContext(function($ctx1) {
  37010. //>>excludeEnd("ctx");
  37011. var $1;
  37012. $1=$recv(aVisitor)._visitIRClosure_(self);
  37013. return $1;
  37014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37015. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRClosure)});
  37016. //>>excludeEnd("ctx");
  37017. },
  37018. //>>excludeStart("ide", pragmas.excludeIdeData);
  37019. args: ["aVisitor"],
  37020. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRClosure: self",
  37021. referencedClasses: [],
  37022. //>>excludeEnd("ide");
  37023. messageSends: ["visitIRClosure:"]
  37024. }),
  37025. $globals.IRClosure);
  37026. $core.addMethod(
  37027. $core.method({
  37028. selector: "isClosure",
  37029. protocol: 'testing',
  37030. fn: function (){
  37031. var self=this;
  37032. return true;
  37033. },
  37034. //>>excludeStart("ide", pragmas.excludeIdeData);
  37035. args: [],
  37036. source: "isClosure\x0a\x09^ true",
  37037. referencedClasses: [],
  37038. //>>excludeEnd("ide");
  37039. messageSends: []
  37040. }),
  37041. $globals.IRClosure);
  37042. $core.addMethod(
  37043. $core.method({
  37044. selector: "sequence",
  37045. protocol: 'accessing',
  37046. fn: function (){
  37047. var self=this;
  37048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37049. return $core.withContext(function($ctx1) {
  37050. //>>excludeEnd("ctx");
  37051. var $1;
  37052. $1=$recv(self._instructions())._last();
  37053. return $1;
  37054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37055. }, function($ctx1) {$ctx1.fill(self,"sequence",{},$globals.IRClosure)});
  37056. //>>excludeEnd("ctx");
  37057. },
  37058. //>>excludeStart("ide", pragmas.excludeIdeData);
  37059. args: [],
  37060. source: "sequence\x0a\x09^ self instructions last",
  37061. referencedClasses: [],
  37062. //>>excludeEnd("ide");
  37063. messageSends: ["last", "instructions"]
  37064. }),
  37065. $globals.IRClosure);
  37066. $core.addClass('IRMethod', $globals.IRClosureInstruction, ['theClass', 'source', 'selector', 'classReferences', 'sendIndexes', 'superSends', 'requiresSmalltalkContext', 'internalVariables'], 'Compiler-IR');
  37067. //>>excludeStart("ide", pragmas.excludeIdeData);
  37068. $globals.IRMethod.comment="I am a method instruction";
  37069. //>>excludeEnd("ide");
  37070. $core.addMethod(
  37071. $core.method({
  37072. selector: "accept:",
  37073. protocol: 'visiting',
  37074. fn: function (aVisitor){
  37075. var self=this;
  37076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37077. return $core.withContext(function($ctx1) {
  37078. //>>excludeEnd("ctx");
  37079. var $1;
  37080. $1=$recv(aVisitor)._visitIRMethod_(self);
  37081. return $1;
  37082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37083. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRMethod)});
  37084. //>>excludeEnd("ctx");
  37085. },
  37086. //>>excludeStart("ide", pragmas.excludeIdeData);
  37087. args: ["aVisitor"],
  37088. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRMethod: self",
  37089. referencedClasses: [],
  37090. //>>excludeEnd("ide");
  37091. messageSends: ["visitIRMethod:"]
  37092. }),
  37093. $globals.IRMethod);
  37094. $core.addMethod(
  37095. $core.method({
  37096. selector: "classReferences",
  37097. protocol: 'accessing',
  37098. fn: function (){
  37099. var self=this;
  37100. var $1;
  37101. $1=self["@classReferences"];
  37102. return $1;
  37103. },
  37104. //>>excludeStart("ide", pragmas.excludeIdeData);
  37105. args: [],
  37106. source: "classReferences\x0a\x09^ classReferences",
  37107. referencedClasses: [],
  37108. //>>excludeEnd("ide");
  37109. messageSends: []
  37110. }),
  37111. $globals.IRMethod);
  37112. $core.addMethod(
  37113. $core.method({
  37114. selector: "classReferences:",
  37115. protocol: 'accessing',
  37116. fn: function (aCollection){
  37117. var self=this;
  37118. self["@classReferences"]=aCollection;
  37119. return self;
  37120. },
  37121. //>>excludeStart("ide", pragmas.excludeIdeData);
  37122. args: ["aCollection"],
  37123. source: "classReferences: aCollection\x0a\x09classReferences := aCollection",
  37124. referencedClasses: [],
  37125. //>>excludeEnd("ide");
  37126. messageSends: []
  37127. }),
  37128. $globals.IRMethod);
  37129. $core.addMethod(
  37130. $core.method({
  37131. selector: "internalVariables",
  37132. protocol: 'accessing',
  37133. fn: function (){
  37134. var self=this;
  37135. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  37136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37137. return $core.withContext(function($ctx1) {
  37138. //>>excludeEnd("ctx");
  37139. var $2,$1,$receiver;
  37140. $2=self["@internalVariables"];
  37141. if(($receiver = $2) == null || $receiver.isNil){
  37142. self["@internalVariables"]=$recv($Set())._new();
  37143. $1=self["@internalVariables"];
  37144. } else {
  37145. $1=$2;
  37146. };
  37147. return $1;
  37148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37149. }, function($ctx1) {$ctx1.fill(self,"internalVariables",{},$globals.IRMethod)});
  37150. //>>excludeEnd("ctx");
  37151. },
  37152. //>>excludeStart("ide", pragmas.excludeIdeData);
  37153. args: [],
  37154. source: "internalVariables\x0a\x09^ internalVariables ifNil: [ internalVariables := Set new ]",
  37155. referencedClasses: ["Set"],
  37156. //>>excludeEnd("ide");
  37157. messageSends: ["ifNil:", "new"]
  37158. }),
  37159. $globals.IRMethod);
  37160. $core.addMethod(
  37161. $core.method({
  37162. selector: "isMethod",
  37163. protocol: 'accessing',
  37164. fn: function (){
  37165. var self=this;
  37166. return true;
  37167. },
  37168. //>>excludeStart("ide", pragmas.excludeIdeData);
  37169. args: [],
  37170. source: "isMethod\x0a\x09^ true",
  37171. referencedClasses: [],
  37172. //>>excludeEnd("ide");
  37173. messageSends: []
  37174. }),
  37175. $globals.IRMethod);
  37176. $core.addMethod(
  37177. $core.method({
  37178. selector: "messageSends",
  37179. protocol: 'accessing',
  37180. fn: function (){
  37181. var self=this;
  37182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37183. return $core.withContext(function($ctx1) {
  37184. //>>excludeEnd("ctx");
  37185. var $1;
  37186. $1=$recv(self._sendIndexes())._keys();
  37187. return $1;
  37188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37189. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.IRMethod)});
  37190. //>>excludeEnd("ctx");
  37191. },
  37192. //>>excludeStart("ide", pragmas.excludeIdeData);
  37193. args: [],
  37194. source: "messageSends\x0a\x09^ self sendIndexes keys",
  37195. referencedClasses: [],
  37196. //>>excludeEnd("ide");
  37197. messageSends: ["keys", "sendIndexes"]
  37198. }),
  37199. $globals.IRMethod);
  37200. $core.addMethod(
  37201. $core.method({
  37202. selector: "method",
  37203. protocol: 'accessing',
  37204. fn: function (){
  37205. var self=this;
  37206. return self;
  37207. },
  37208. //>>excludeStart("ide", pragmas.excludeIdeData);
  37209. args: [],
  37210. source: "method\x0a\x09^ self",
  37211. referencedClasses: [],
  37212. //>>excludeEnd("ide");
  37213. messageSends: []
  37214. }),
  37215. $globals.IRMethod);
  37216. $core.addMethod(
  37217. $core.method({
  37218. selector: "selector",
  37219. protocol: 'accessing',
  37220. fn: function (){
  37221. var self=this;
  37222. var $1;
  37223. $1=self["@selector"];
  37224. return $1;
  37225. },
  37226. //>>excludeStart("ide", pragmas.excludeIdeData);
  37227. args: [],
  37228. source: "selector\x0a\x09^ selector",
  37229. referencedClasses: [],
  37230. //>>excludeEnd("ide");
  37231. messageSends: []
  37232. }),
  37233. $globals.IRMethod);
  37234. $core.addMethod(
  37235. $core.method({
  37236. selector: "selector:",
  37237. protocol: 'accessing',
  37238. fn: function (aString){
  37239. var self=this;
  37240. self["@selector"]=aString;
  37241. return self;
  37242. },
  37243. //>>excludeStart("ide", pragmas.excludeIdeData);
  37244. args: ["aString"],
  37245. source: "selector: aString\x0a\x09selector := aString",
  37246. referencedClasses: [],
  37247. //>>excludeEnd("ide");
  37248. messageSends: []
  37249. }),
  37250. $globals.IRMethod);
  37251. $core.addMethod(
  37252. $core.method({
  37253. selector: "sendIndexes",
  37254. protocol: 'accessing',
  37255. fn: function (){
  37256. var self=this;
  37257. var $1;
  37258. $1=self["@sendIndexes"];
  37259. return $1;
  37260. },
  37261. //>>excludeStart("ide", pragmas.excludeIdeData);
  37262. args: [],
  37263. source: "sendIndexes\x0a\x09^ sendIndexes",
  37264. referencedClasses: [],
  37265. //>>excludeEnd("ide");
  37266. messageSends: []
  37267. }),
  37268. $globals.IRMethod);
  37269. $core.addMethod(
  37270. $core.method({
  37271. selector: "sendIndexes:",
  37272. protocol: 'accessing',
  37273. fn: function (aDictionary){
  37274. var self=this;
  37275. self["@sendIndexes"]=aDictionary;
  37276. return self;
  37277. },
  37278. //>>excludeStart("ide", pragmas.excludeIdeData);
  37279. args: ["aDictionary"],
  37280. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  37281. referencedClasses: [],
  37282. //>>excludeEnd("ide");
  37283. messageSends: []
  37284. }),
  37285. $globals.IRMethod);
  37286. $core.addMethod(
  37287. $core.method({
  37288. selector: "source",
  37289. protocol: 'accessing',
  37290. fn: function (){
  37291. var self=this;
  37292. var $1;
  37293. $1=self["@source"];
  37294. return $1;
  37295. },
  37296. //>>excludeStart("ide", pragmas.excludeIdeData);
  37297. args: [],
  37298. source: "source\x0a\x09^ source",
  37299. referencedClasses: [],
  37300. //>>excludeEnd("ide");
  37301. messageSends: []
  37302. }),
  37303. $globals.IRMethod);
  37304. $core.addMethod(
  37305. $core.method({
  37306. selector: "source:",
  37307. protocol: 'accessing',
  37308. fn: function (aString){
  37309. var self=this;
  37310. self["@source"]=aString;
  37311. return self;
  37312. },
  37313. //>>excludeStart("ide", pragmas.excludeIdeData);
  37314. args: ["aString"],
  37315. source: "source: aString\x0a\x09source := aString",
  37316. referencedClasses: [],
  37317. //>>excludeEnd("ide");
  37318. messageSends: []
  37319. }),
  37320. $globals.IRMethod);
  37321. $core.addMethod(
  37322. $core.method({
  37323. selector: "superSends",
  37324. protocol: 'accessing',
  37325. fn: function (){
  37326. var self=this;
  37327. var $1;
  37328. $1=self["@superSends"];
  37329. return $1;
  37330. },
  37331. //>>excludeStart("ide", pragmas.excludeIdeData);
  37332. args: [],
  37333. source: "superSends\x0a\x09^ superSends",
  37334. referencedClasses: [],
  37335. //>>excludeEnd("ide");
  37336. messageSends: []
  37337. }),
  37338. $globals.IRMethod);
  37339. $core.addMethod(
  37340. $core.method({
  37341. selector: "superSends:",
  37342. protocol: 'accessing',
  37343. fn: function (aCollection){
  37344. var self=this;
  37345. self["@superSends"]=aCollection;
  37346. return self;
  37347. },
  37348. //>>excludeStart("ide", pragmas.excludeIdeData);
  37349. args: ["aCollection"],
  37350. source: "superSends: aCollection\x0a\x09superSends := aCollection",
  37351. referencedClasses: [],
  37352. //>>excludeEnd("ide");
  37353. messageSends: []
  37354. }),
  37355. $globals.IRMethod);
  37356. $core.addMethod(
  37357. $core.method({
  37358. selector: "theClass",
  37359. protocol: 'accessing',
  37360. fn: function (){
  37361. var self=this;
  37362. var $1;
  37363. $1=self["@theClass"];
  37364. return $1;
  37365. },
  37366. //>>excludeStart("ide", pragmas.excludeIdeData);
  37367. args: [],
  37368. source: "theClass\x0a\x09^ theClass",
  37369. referencedClasses: [],
  37370. //>>excludeEnd("ide");
  37371. messageSends: []
  37372. }),
  37373. $globals.IRMethod);
  37374. $core.addMethod(
  37375. $core.method({
  37376. selector: "theClass:",
  37377. protocol: 'accessing',
  37378. fn: function (aClass){
  37379. var self=this;
  37380. self["@theClass"]=aClass;
  37381. return self;
  37382. },
  37383. //>>excludeStart("ide", pragmas.excludeIdeData);
  37384. args: ["aClass"],
  37385. source: "theClass: aClass\x0a\x09theClass := aClass",
  37386. referencedClasses: [],
  37387. //>>excludeEnd("ide");
  37388. messageSends: []
  37389. }),
  37390. $globals.IRMethod);
  37391. $core.addClass('IRReturn', $globals.IRScopedInstruction, [], 'Compiler-IR');
  37392. //>>excludeStart("ide", pragmas.excludeIdeData);
  37393. $globals.IRReturn.comment="I am a local return instruction.";
  37394. //>>excludeEnd("ide");
  37395. $core.addMethod(
  37396. $core.method({
  37397. selector: "accept:",
  37398. protocol: 'visiting',
  37399. fn: function (aVisitor){
  37400. var self=this;
  37401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37402. return $core.withContext(function($ctx1) {
  37403. //>>excludeEnd("ctx");
  37404. var $1;
  37405. $1=$recv(aVisitor)._visitIRReturn_(self);
  37406. return $1;
  37407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37408. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRReturn)});
  37409. //>>excludeEnd("ctx");
  37410. },
  37411. //>>excludeStart("ide", pragmas.excludeIdeData);
  37412. args: ["aVisitor"],
  37413. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRReturn: self",
  37414. referencedClasses: [],
  37415. //>>excludeEnd("ide");
  37416. messageSends: ["visitIRReturn:"]
  37417. }),
  37418. $globals.IRReturn);
  37419. $core.addMethod(
  37420. $core.method({
  37421. selector: "canBeAssigned",
  37422. protocol: 'testing',
  37423. fn: function (){
  37424. var self=this;
  37425. return false;
  37426. },
  37427. //>>excludeStart("ide", pragmas.excludeIdeData);
  37428. args: [],
  37429. source: "canBeAssigned\x0a\x09^ false",
  37430. referencedClasses: [],
  37431. //>>excludeEnd("ide");
  37432. messageSends: []
  37433. }),
  37434. $globals.IRReturn);
  37435. $core.addMethod(
  37436. $core.method({
  37437. selector: "isBlockReturn",
  37438. protocol: 'testing',
  37439. fn: function (){
  37440. var self=this;
  37441. return false;
  37442. },
  37443. //>>excludeStart("ide", pragmas.excludeIdeData);
  37444. args: [],
  37445. source: "isBlockReturn\x0a\x09^ false",
  37446. referencedClasses: [],
  37447. //>>excludeEnd("ide");
  37448. messageSends: []
  37449. }),
  37450. $globals.IRReturn);
  37451. $core.addMethod(
  37452. $core.method({
  37453. selector: "isLocalReturn",
  37454. protocol: 'testing',
  37455. fn: function (){
  37456. var self=this;
  37457. return true;
  37458. },
  37459. //>>excludeStart("ide", pragmas.excludeIdeData);
  37460. args: [],
  37461. source: "isLocalReturn\x0a\x09^ true",
  37462. referencedClasses: [],
  37463. //>>excludeEnd("ide");
  37464. messageSends: []
  37465. }),
  37466. $globals.IRReturn);
  37467. $core.addMethod(
  37468. $core.method({
  37469. selector: "isNonLocalReturn",
  37470. protocol: 'testing',
  37471. fn: function (){
  37472. var self=this;
  37473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37474. return $core.withContext(function($ctx1) {
  37475. //>>excludeEnd("ctx");
  37476. var $1;
  37477. $1=$recv(self._isLocalReturn())._not();
  37478. return $1;
  37479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37480. }, function($ctx1) {$ctx1.fill(self,"isNonLocalReturn",{},$globals.IRReturn)});
  37481. //>>excludeEnd("ctx");
  37482. },
  37483. //>>excludeStart("ide", pragmas.excludeIdeData);
  37484. args: [],
  37485. source: "isNonLocalReturn\x0a\x09^ self isLocalReturn not",
  37486. referencedClasses: [],
  37487. //>>excludeEnd("ide");
  37488. messageSends: ["not", "isLocalReturn"]
  37489. }),
  37490. $globals.IRReturn);
  37491. $core.addMethod(
  37492. $core.method({
  37493. selector: "isReturn",
  37494. protocol: 'testing',
  37495. fn: function (){
  37496. var self=this;
  37497. return true;
  37498. },
  37499. //>>excludeStart("ide", pragmas.excludeIdeData);
  37500. args: [],
  37501. source: "isReturn\x0a\x09^ true",
  37502. referencedClasses: [],
  37503. //>>excludeEnd("ide");
  37504. messageSends: []
  37505. }),
  37506. $globals.IRReturn);
  37507. $core.addMethod(
  37508. $core.method({
  37509. selector: "scope",
  37510. protocol: 'accessing',
  37511. fn: function (){
  37512. var self=this;
  37513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37514. return $core.withContext(function($ctx1) {
  37515. //>>excludeEnd("ctx");
  37516. var $2,$1,$receiver;
  37517. $2=self["@scope"];
  37518. if(($receiver = $2) == null || $receiver.isNil){
  37519. $1=$recv(self._parent())._scope();
  37520. } else {
  37521. $1=$2;
  37522. };
  37523. return $1;
  37524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37525. }, function($ctx1) {$ctx1.fill(self,"scope",{},$globals.IRReturn)});
  37526. //>>excludeEnd("ctx");
  37527. },
  37528. //>>excludeStart("ide", pragmas.excludeIdeData);
  37529. args: [],
  37530. source: "scope\x0a\x09^ scope ifNil: [ self parent scope ]",
  37531. referencedClasses: [],
  37532. //>>excludeEnd("ide");
  37533. messageSends: ["ifNil:", "scope", "parent"]
  37534. }),
  37535. $globals.IRReturn);
  37536. $core.addClass('IRBlockReturn', $globals.IRReturn, [], 'Compiler-IR');
  37537. //>>excludeStart("ide", pragmas.excludeIdeData);
  37538. $globals.IRBlockReturn.comment="Smalltalk blocks return their last statement. I am a implicit block return instruction.";
  37539. //>>excludeEnd("ide");
  37540. $core.addMethod(
  37541. $core.method({
  37542. selector: "accept:",
  37543. protocol: 'visiting',
  37544. fn: function (aVisitor){
  37545. var self=this;
  37546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37547. return $core.withContext(function($ctx1) {
  37548. //>>excludeEnd("ctx");
  37549. var $1;
  37550. $1=$recv(aVisitor)._visitIRBlockReturn_(self);
  37551. return $1;
  37552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37553. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRBlockReturn)});
  37554. //>>excludeEnd("ctx");
  37555. },
  37556. //>>excludeStart("ide", pragmas.excludeIdeData);
  37557. args: ["aVisitor"],
  37558. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRBlockReturn: self",
  37559. referencedClasses: [],
  37560. //>>excludeEnd("ide");
  37561. messageSends: ["visitIRBlockReturn:"]
  37562. }),
  37563. $globals.IRBlockReturn);
  37564. $core.addMethod(
  37565. $core.method({
  37566. selector: "isBlockReturn",
  37567. protocol: 'testing',
  37568. fn: function (){
  37569. var self=this;
  37570. return true;
  37571. },
  37572. //>>excludeStart("ide", pragmas.excludeIdeData);
  37573. args: [],
  37574. source: "isBlockReturn\x0a\x09^ true",
  37575. referencedClasses: [],
  37576. //>>excludeEnd("ide");
  37577. messageSends: []
  37578. }),
  37579. $globals.IRBlockReturn);
  37580. $core.addClass('IRNonLocalReturn', $globals.IRReturn, [], 'Compiler-IR');
  37581. //>>excludeStart("ide", pragmas.excludeIdeData);
  37582. $globals.IRNonLocalReturn.comment="I am a non local return instruction.\x0aNon local returns are handled using a try/catch JavaScript statement.\x0a\x0aSee `IRNonLocalReturnHandling` class.";
  37583. //>>excludeEnd("ide");
  37584. $core.addMethod(
  37585. $core.method({
  37586. selector: "accept:",
  37587. protocol: 'visiting',
  37588. fn: function (aVisitor){
  37589. var self=this;
  37590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37591. return $core.withContext(function($ctx1) {
  37592. //>>excludeEnd("ctx");
  37593. var $1;
  37594. $1=$recv(aVisitor)._visitIRNonLocalReturn_(self);
  37595. return $1;
  37596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37597. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRNonLocalReturn)});
  37598. //>>excludeEnd("ctx");
  37599. },
  37600. //>>excludeStart("ide", pragmas.excludeIdeData);
  37601. args: ["aVisitor"],
  37602. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRNonLocalReturn: self",
  37603. referencedClasses: [],
  37604. //>>excludeEnd("ide");
  37605. messageSends: ["visitIRNonLocalReturn:"]
  37606. }),
  37607. $globals.IRNonLocalReturn);
  37608. $core.addMethod(
  37609. $core.method({
  37610. selector: "isLocalReturn",
  37611. protocol: 'testing',
  37612. fn: function (){
  37613. var self=this;
  37614. return false;
  37615. },
  37616. //>>excludeStart("ide", pragmas.excludeIdeData);
  37617. args: [],
  37618. source: "isLocalReturn\x0a\x09^ false",
  37619. referencedClasses: [],
  37620. //>>excludeEnd("ide");
  37621. messageSends: []
  37622. }),
  37623. $globals.IRNonLocalReturn);
  37624. $core.addClass('IRTempDeclaration', $globals.IRScopedInstruction, ['name'], 'Compiler-IR');
  37625. $core.addMethod(
  37626. $core.method({
  37627. selector: "accept:",
  37628. protocol: 'visiting',
  37629. fn: function (aVisitor){
  37630. var self=this;
  37631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37632. return $core.withContext(function($ctx1) {
  37633. //>>excludeEnd("ctx");
  37634. var $1;
  37635. $1=$recv(aVisitor)._visitIRTempDeclaration_(self);
  37636. return $1;
  37637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37638. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRTempDeclaration)});
  37639. //>>excludeEnd("ctx");
  37640. },
  37641. //>>excludeStart("ide", pragmas.excludeIdeData);
  37642. args: ["aVisitor"],
  37643. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRTempDeclaration: self",
  37644. referencedClasses: [],
  37645. //>>excludeEnd("ide");
  37646. messageSends: ["visitIRTempDeclaration:"]
  37647. }),
  37648. $globals.IRTempDeclaration);
  37649. $core.addMethod(
  37650. $core.method({
  37651. selector: "isTempDeclaration",
  37652. protocol: 'testing',
  37653. fn: function (){
  37654. var self=this;
  37655. return true;
  37656. },
  37657. //>>excludeStart("ide", pragmas.excludeIdeData);
  37658. args: [],
  37659. source: "isTempDeclaration\x0a\x09^ true",
  37660. referencedClasses: [],
  37661. //>>excludeEnd("ide");
  37662. messageSends: []
  37663. }),
  37664. $globals.IRTempDeclaration);
  37665. $core.addMethod(
  37666. $core.method({
  37667. selector: "name",
  37668. protocol: 'accessing',
  37669. fn: function (){
  37670. var self=this;
  37671. var $1;
  37672. $1=self["@name"];
  37673. return $1;
  37674. },
  37675. //>>excludeStart("ide", pragmas.excludeIdeData);
  37676. args: [],
  37677. source: "name\x0a\x09^ name",
  37678. referencedClasses: [],
  37679. //>>excludeEnd("ide");
  37680. messageSends: []
  37681. }),
  37682. $globals.IRTempDeclaration);
  37683. $core.addMethod(
  37684. $core.method({
  37685. selector: "name:",
  37686. protocol: 'accessing',
  37687. fn: function (aString){
  37688. var self=this;
  37689. self["@name"]=aString;
  37690. return self;
  37691. },
  37692. //>>excludeStart("ide", pragmas.excludeIdeData);
  37693. args: ["aString"],
  37694. source: "name: aString\x0a\x09name := aString",
  37695. referencedClasses: [],
  37696. //>>excludeEnd("ide");
  37697. messageSends: []
  37698. }),
  37699. $globals.IRTempDeclaration);
  37700. $core.addClass('IRSend', $globals.IRInstruction, ['selector', 'classSend', 'index'], 'Compiler-IR');
  37701. //>>excludeStart("ide", pragmas.excludeIdeData);
  37702. $globals.IRSend.comment="I am a message send instruction.";
  37703. //>>excludeEnd("ide");
  37704. $core.addMethod(
  37705. $core.method({
  37706. selector: "accept:",
  37707. protocol: 'visiting',
  37708. fn: function (aVisitor){
  37709. var self=this;
  37710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37711. return $core.withContext(function($ctx1) {
  37712. //>>excludeEnd("ctx");
  37713. var $1;
  37714. $1=$recv(aVisitor)._visitIRSend_(self);
  37715. return $1;
  37716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37717. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRSend)});
  37718. //>>excludeEnd("ctx");
  37719. },
  37720. //>>excludeStart("ide", pragmas.excludeIdeData);
  37721. args: ["aVisitor"],
  37722. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRSend: self",
  37723. referencedClasses: [],
  37724. //>>excludeEnd("ide");
  37725. messageSends: ["visitIRSend:"]
  37726. }),
  37727. $globals.IRSend);
  37728. $core.addMethod(
  37729. $core.method({
  37730. selector: "classSend",
  37731. protocol: 'accessing',
  37732. fn: function (){
  37733. var self=this;
  37734. var $1;
  37735. $1=self["@classSend"];
  37736. return $1;
  37737. },
  37738. //>>excludeStart("ide", pragmas.excludeIdeData);
  37739. args: [],
  37740. source: "classSend\x0a\x09^ classSend",
  37741. referencedClasses: [],
  37742. //>>excludeEnd("ide");
  37743. messageSends: []
  37744. }),
  37745. $globals.IRSend);
  37746. $core.addMethod(
  37747. $core.method({
  37748. selector: "classSend:",
  37749. protocol: 'accessing',
  37750. fn: function (aClass){
  37751. var self=this;
  37752. self["@classSend"]=aClass;
  37753. return self;
  37754. },
  37755. //>>excludeStart("ide", pragmas.excludeIdeData);
  37756. args: ["aClass"],
  37757. source: "classSend: aClass\x0a\x09classSend := aClass",
  37758. referencedClasses: [],
  37759. //>>excludeEnd("ide");
  37760. messageSends: []
  37761. }),
  37762. $globals.IRSend);
  37763. $core.addMethod(
  37764. $core.method({
  37765. selector: "index",
  37766. protocol: 'accessing',
  37767. fn: function (){
  37768. var self=this;
  37769. var $1;
  37770. $1=self["@index"];
  37771. return $1;
  37772. },
  37773. //>>excludeStart("ide", pragmas.excludeIdeData);
  37774. args: [],
  37775. source: "index\x0a\x09^ index",
  37776. referencedClasses: [],
  37777. //>>excludeEnd("ide");
  37778. messageSends: []
  37779. }),
  37780. $globals.IRSend);
  37781. $core.addMethod(
  37782. $core.method({
  37783. selector: "index:",
  37784. protocol: 'accessing',
  37785. fn: function (anInteger){
  37786. var self=this;
  37787. self["@index"]=anInteger;
  37788. return self;
  37789. },
  37790. //>>excludeStart("ide", pragmas.excludeIdeData);
  37791. args: ["anInteger"],
  37792. source: "index: anInteger\x0a\x09index := anInteger",
  37793. referencedClasses: [],
  37794. //>>excludeEnd("ide");
  37795. messageSends: []
  37796. }),
  37797. $globals.IRSend);
  37798. $core.addMethod(
  37799. $core.method({
  37800. selector: "isSend",
  37801. protocol: 'testing',
  37802. fn: function (){
  37803. var self=this;
  37804. return true;
  37805. },
  37806. //>>excludeStart("ide", pragmas.excludeIdeData);
  37807. args: [],
  37808. source: "isSend\x0a\x09^ true",
  37809. referencedClasses: [],
  37810. //>>excludeEnd("ide");
  37811. messageSends: []
  37812. }),
  37813. $globals.IRSend);
  37814. $core.addMethod(
  37815. $core.method({
  37816. selector: "selector",
  37817. protocol: 'accessing',
  37818. fn: function (){
  37819. var self=this;
  37820. var $1;
  37821. $1=self["@selector"];
  37822. return $1;
  37823. },
  37824. //>>excludeStart("ide", pragmas.excludeIdeData);
  37825. args: [],
  37826. source: "selector\x0a\x09^ selector",
  37827. referencedClasses: [],
  37828. //>>excludeEnd("ide");
  37829. messageSends: []
  37830. }),
  37831. $globals.IRSend);
  37832. $core.addMethod(
  37833. $core.method({
  37834. selector: "selector:",
  37835. protocol: 'accessing',
  37836. fn: function (aString){
  37837. var self=this;
  37838. self["@selector"]=aString;
  37839. return self;
  37840. },
  37841. //>>excludeStart("ide", pragmas.excludeIdeData);
  37842. args: ["aString"],
  37843. source: "selector: aString\x0a\x09selector := aString",
  37844. referencedClasses: [],
  37845. //>>excludeEnd("ide");
  37846. messageSends: []
  37847. }),
  37848. $globals.IRSend);
  37849. $core.addClass('IRSequence', $globals.IRInstruction, [], 'Compiler-IR');
  37850. $core.addMethod(
  37851. $core.method({
  37852. selector: "accept:",
  37853. protocol: 'visiting',
  37854. fn: function (aVisitor){
  37855. var self=this;
  37856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37857. return $core.withContext(function($ctx1) {
  37858. //>>excludeEnd("ctx");
  37859. var $1;
  37860. $1=$recv(aVisitor)._visitIRSequence_(self);
  37861. return $1;
  37862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37863. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRSequence)});
  37864. //>>excludeEnd("ctx");
  37865. },
  37866. //>>excludeStart("ide", pragmas.excludeIdeData);
  37867. args: ["aVisitor"],
  37868. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRSequence: self",
  37869. referencedClasses: [],
  37870. //>>excludeEnd("ide");
  37871. messageSends: ["visitIRSequence:"]
  37872. }),
  37873. $globals.IRSequence);
  37874. $core.addMethod(
  37875. $core.method({
  37876. selector: "isSequence",
  37877. protocol: 'testing',
  37878. fn: function (){
  37879. var self=this;
  37880. return true;
  37881. },
  37882. //>>excludeStart("ide", pragmas.excludeIdeData);
  37883. args: [],
  37884. source: "isSequence\x0a\x09^ true",
  37885. referencedClasses: [],
  37886. //>>excludeEnd("ide");
  37887. messageSends: []
  37888. }),
  37889. $globals.IRSequence);
  37890. $core.addClass('IRBlockSequence', $globals.IRSequence, [], 'Compiler-IR');
  37891. $core.addMethod(
  37892. $core.method({
  37893. selector: "accept:",
  37894. protocol: 'visiting',
  37895. fn: function (aVisitor){
  37896. var self=this;
  37897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37898. return $core.withContext(function($ctx1) {
  37899. //>>excludeEnd("ctx");
  37900. var $1;
  37901. $1=$recv(aVisitor)._visitIRBlockSequence_(self);
  37902. return $1;
  37903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37904. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRBlockSequence)});
  37905. //>>excludeEnd("ctx");
  37906. },
  37907. //>>excludeStart("ide", pragmas.excludeIdeData);
  37908. args: ["aVisitor"],
  37909. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRBlockSequence: self",
  37910. referencedClasses: [],
  37911. //>>excludeEnd("ide");
  37912. messageSends: ["visitIRBlockSequence:"]
  37913. }),
  37914. $globals.IRBlockSequence);
  37915. $core.addClass('IRValue', $globals.IRInstruction, ['value'], 'Compiler-IR');
  37916. //>>excludeStart("ide", pragmas.excludeIdeData);
  37917. $globals.IRValue.comment="I am the simplest possible instruction. I represent a value.";
  37918. //>>excludeEnd("ide");
  37919. $core.addMethod(
  37920. $core.method({
  37921. selector: "accept:",
  37922. protocol: 'visiting',
  37923. fn: function (aVisitor){
  37924. var self=this;
  37925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37926. return $core.withContext(function($ctx1) {
  37927. //>>excludeEnd("ctx");
  37928. var $1;
  37929. $1=$recv(aVisitor)._visitIRValue_(self);
  37930. return $1;
  37931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  37932. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRValue)});
  37933. //>>excludeEnd("ctx");
  37934. },
  37935. //>>excludeStart("ide", pragmas.excludeIdeData);
  37936. args: ["aVisitor"],
  37937. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRValue: self",
  37938. referencedClasses: [],
  37939. //>>excludeEnd("ide");
  37940. messageSends: ["visitIRValue:"]
  37941. }),
  37942. $globals.IRValue);
  37943. $core.addMethod(
  37944. $core.method({
  37945. selector: "needsBoxingAsReceiver",
  37946. protocol: 'testing',
  37947. fn: function (){
  37948. var self=this;
  37949. return false;
  37950. },
  37951. //>>excludeStart("ide", pragmas.excludeIdeData);
  37952. args: [],
  37953. source: "needsBoxingAsReceiver\x0a\x09^ false",
  37954. referencedClasses: [],
  37955. //>>excludeEnd("ide");
  37956. messageSends: []
  37957. }),
  37958. $globals.IRValue);
  37959. $core.addMethod(
  37960. $core.method({
  37961. selector: "value",
  37962. protocol: 'accessing',
  37963. fn: function (){
  37964. var self=this;
  37965. var $1;
  37966. $1=self["@value"];
  37967. return $1;
  37968. },
  37969. //>>excludeStart("ide", pragmas.excludeIdeData);
  37970. args: [],
  37971. source: "value\x0a\x09^ value",
  37972. referencedClasses: [],
  37973. //>>excludeEnd("ide");
  37974. messageSends: []
  37975. }),
  37976. $globals.IRValue);
  37977. $core.addMethod(
  37978. $core.method({
  37979. selector: "value:",
  37980. protocol: 'accessing',
  37981. fn: function (aString){
  37982. var self=this;
  37983. self["@value"]=aString;
  37984. return self;
  37985. },
  37986. //>>excludeStart("ide", pragmas.excludeIdeData);
  37987. args: ["aString"],
  37988. source: "value: aString\x0a\x09value := aString",
  37989. referencedClasses: [],
  37990. //>>excludeEnd("ide");
  37991. messageSends: []
  37992. }),
  37993. $globals.IRValue);
  37994. $core.addClass('IRVariable', $globals.IRInstruction, ['variable'], 'Compiler-IR');
  37995. //>>excludeStart("ide", pragmas.excludeIdeData);
  37996. $globals.IRVariable.comment="I am a variable instruction.";
  37997. //>>excludeEnd("ide");
  37998. $core.addMethod(
  37999. $core.method({
  38000. selector: "accept:",
  38001. protocol: 'visiting',
  38002. fn: function (aVisitor){
  38003. var self=this;
  38004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38005. return $core.withContext(function($ctx1) {
  38006. //>>excludeEnd("ctx");
  38007. var $1;
  38008. $1=$recv(aVisitor)._visitIRVariable_(self);
  38009. return $1;
  38010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38011. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRVariable)});
  38012. //>>excludeEnd("ctx");
  38013. },
  38014. //>>excludeStart("ide", pragmas.excludeIdeData);
  38015. args: ["aVisitor"],
  38016. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRVariable: self",
  38017. referencedClasses: [],
  38018. //>>excludeEnd("ide");
  38019. messageSends: ["visitIRVariable:"]
  38020. }),
  38021. $globals.IRVariable);
  38022. $core.addMethod(
  38023. $core.method({
  38024. selector: "isVariable",
  38025. protocol: 'testing',
  38026. fn: function (){
  38027. var self=this;
  38028. return true;
  38029. },
  38030. //>>excludeStart("ide", pragmas.excludeIdeData);
  38031. args: [],
  38032. source: "isVariable\x0a\x09^ true",
  38033. referencedClasses: [],
  38034. //>>excludeEnd("ide");
  38035. messageSends: []
  38036. }),
  38037. $globals.IRVariable);
  38038. $core.addMethod(
  38039. $core.method({
  38040. selector: "needsBoxingAsReceiver",
  38041. protocol: 'testing',
  38042. fn: function (){
  38043. var self=this;
  38044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38045. return $core.withContext(function($ctx1) {
  38046. //>>excludeEnd("ctx");
  38047. var $1;
  38048. $1=$recv($recv(self._variable())._isPseudoVar())._not();
  38049. return $1;
  38050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38051. }, function($ctx1) {$ctx1.fill(self,"needsBoxingAsReceiver",{},$globals.IRVariable)});
  38052. //>>excludeEnd("ctx");
  38053. },
  38054. //>>excludeStart("ide", pragmas.excludeIdeData);
  38055. args: [],
  38056. source: "needsBoxingAsReceiver\x0a\x09^ self variable isPseudoVar not",
  38057. referencedClasses: [],
  38058. //>>excludeEnd("ide");
  38059. messageSends: ["not", "isPseudoVar", "variable"]
  38060. }),
  38061. $globals.IRVariable);
  38062. $core.addMethod(
  38063. $core.method({
  38064. selector: "variable",
  38065. protocol: 'accessing',
  38066. fn: function (){
  38067. var self=this;
  38068. var $1;
  38069. $1=self["@variable"];
  38070. return $1;
  38071. },
  38072. //>>excludeStart("ide", pragmas.excludeIdeData);
  38073. args: [],
  38074. source: "variable\x0a\x09^ variable",
  38075. referencedClasses: [],
  38076. //>>excludeEnd("ide");
  38077. messageSends: []
  38078. }),
  38079. $globals.IRVariable);
  38080. $core.addMethod(
  38081. $core.method({
  38082. selector: "variable:",
  38083. protocol: 'accessing',
  38084. fn: function (aScopeVariable){
  38085. var self=this;
  38086. self["@variable"]=aScopeVariable;
  38087. return self;
  38088. },
  38089. //>>excludeStart("ide", pragmas.excludeIdeData);
  38090. args: ["aScopeVariable"],
  38091. source: "variable: aScopeVariable\x0a\x09variable := aScopeVariable",
  38092. referencedClasses: [],
  38093. //>>excludeEnd("ide");
  38094. messageSends: []
  38095. }),
  38096. $globals.IRVariable);
  38097. $core.addClass('IRVerbatim', $globals.IRInstruction, ['source'], 'Compiler-IR');
  38098. $core.addMethod(
  38099. $core.method({
  38100. selector: "accept:",
  38101. protocol: 'visiting',
  38102. fn: function (aVisitor){
  38103. var self=this;
  38104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38105. return $core.withContext(function($ctx1) {
  38106. //>>excludeEnd("ctx");
  38107. var $1;
  38108. $1=$recv(aVisitor)._visitIRVerbatim_(self);
  38109. return $1;
  38110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38111. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRVerbatim)});
  38112. //>>excludeEnd("ctx");
  38113. },
  38114. //>>excludeStart("ide", pragmas.excludeIdeData);
  38115. args: ["aVisitor"],
  38116. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRVerbatim: self",
  38117. referencedClasses: [],
  38118. //>>excludeEnd("ide");
  38119. messageSends: ["visitIRVerbatim:"]
  38120. }),
  38121. $globals.IRVerbatim);
  38122. $core.addMethod(
  38123. $core.method({
  38124. selector: "source",
  38125. protocol: 'accessing',
  38126. fn: function (){
  38127. var self=this;
  38128. var $1;
  38129. $1=self["@source"];
  38130. return $1;
  38131. },
  38132. //>>excludeStart("ide", pragmas.excludeIdeData);
  38133. args: [],
  38134. source: "source\x0a\x09^ source",
  38135. referencedClasses: [],
  38136. //>>excludeEnd("ide");
  38137. messageSends: []
  38138. }),
  38139. $globals.IRVerbatim);
  38140. $core.addMethod(
  38141. $core.method({
  38142. selector: "source:",
  38143. protocol: 'accessing',
  38144. fn: function (aString){
  38145. var self=this;
  38146. self["@source"]=aString;
  38147. return self;
  38148. },
  38149. //>>excludeStart("ide", pragmas.excludeIdeData);
  38150. args: ["aString"],
  38151. source: "source: aString\x0a\x09source := aString",
  38152. referencedClasses: [],
  38153. //>>excludeEnd("ide");
  38154. messageSends: []
  38155. }),
  38156. $globals.IRVerbatim);
  38157. $core.addClass('IRVisitor', $globals.Object, [], 'Compiler-IR');
  38158. $core.addMethod(
  38159. $core.method({
  38160. selector: "visit:",
  38161. protocol: 'visiting',
  38162. fn: function (anIRInstruction){
  38163. var self=this;
  38164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38165. return $core.withContext(function($ctx1) {
  38166. //>>excludeEnd("ctx");
  38167. var $1;
  38168. $1=$recv(anIRInstruction)._accept_(self);
  38169. return $1;
  38170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38171. }, function($ctx1) {$ctx1.fill(self,"visit:",{anIRInstruction:anIRInstruction},$globals.IRVisitor)});
  38172. //>>excludeEnd("ctx");
  38173. },
  38174. //>>excludeStart("ide", pragmas.excludeIdeData);
  38175. args: ["anIRInstruction"],
  38176. source: "visit: anIRInstruction\x0a\x09^ anIRInstruction accept: self",
  38177. referencedClasses: [],
  38178. //>>excludeEnd("ide");
  38179. messageSends: ["accept:"]
  38180. }),
  38181. $globals.IRVisitor);
  38182. $core.addMethod(
  38183. $core.method({
  38184. selector: "visitIRAssignment:",
  38185. protocol: 'visiting',
  38186. fn: function (anIRAssignment){
  38187. var self=this;
  38188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38189. return $core.withContext(function($ctx1) {
  38190. //>>excludeEnd("ctx");
  38191. var $1;
  38192. $1=self._visitIRInstruction_(anIRAssignment);
  38193. return $1;
  38194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38195. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRVisitor)});
  38196. //>>excludeEnd("ctx");
  38197. },
  38198. //>>excludeStart("ide", pragmas.excludeIdeData);
  38199. args: ["anIRAssignment"],
  38200. source: "visitIRAssignment: anIRAssignment\x0a\x09^ self visitIRInstruction: anIRAssignment",
  38201. referencedClasses: [],
  38202. //>>excludeEnd("ide");
  38203. messageSends: ["visitIRInstruction:"]
  38204. }),
  38205. $globals.IRVisitor);
  38206. $core.addMethod(
  38207. $core.method({
  38208. selector: "visitIRBlockReturn:",
  38209. protocol: 'visiting',
  38210. fn: function (anIRBlockReturn){
  38211. var self=this;
  38212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38213. return $core.withContext(function($ctx1) {
  38214. //>>excludeEnd("ctx");
  38215. var $1;
  38216. $1=self._visitIRReturn_(anIRBlockReturn);
  38217. return $1;
  38218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38219. }, function($ctx1) {$ctx1.fill(self,"visitIRBlockReturn:",{anIRBlockReturn:anIRBlockReturn},$globals.IRVisitor)});
  38220. //>>excludeEnd("ctx");
  38221. },
  38222. //>>excludeStart("ide", pragmas.excludeIdeData);
  38223. args: ["anIRBlockReturn"],
  38224. source: "visitIRBlockReturn: anIRBlockReturn\x0a\x09^ self visitIRReturn: anIRBlockReturn",
  38225. referencedClasses: [],
  38226. //>>excludeEnd("ide");
  38227. messageSends: ["visitIRReturn:"]
  38228. }),
  38229. $globals.IRVisitor);
  38230. $core.addMethod(
  38231. $core.method({
  38232. selector: "visitIRBlockSequence:",
  38233. protocol: 'visiting',
  38234. fn: function (anIRBlockSequence){
  38235. var self=this;
  38236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38237. return $core.withContext(function($ctx1) {
  38238. //>>excludeEnd("ctx");
  38239. var $1;
  38240. $1=self._visitIRSequence_(anIRBlockSequence);
  38241. return $1;
  38242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38243. }, function($ctx1) {$ctx1.fill(self,"visitIRBlockSequence:",{anIRBlockSequence:anIRBlockSequence},$globals.IRVisitor)});
  38244. //>>excludeEnd("ctx");
  38245. },
  38246. //>>excludeStart("ide", pragmas.excludeIdeData);
  38247. args: ["anIRBlockSequence"],
  38248. source: "visitIRBlockSequence: anIRBlockSequence\x0a\x09^ self visitIRSequence: anIRBlockSequence",
  38249. referencedClasses: [],
  38250. //>>excludeEnd("ide");
  38251. messageSends: ["visitIRSequence:"]
  38252. }),
  38253. $globals.IRVisitor);
  38254. $core.addMethod(
  38255. $core.method({
  38256. selector: "visitIRClosure:",
  38257. protocol: 'visiting',
  38258. fn: function (anIRClosure){
  38259. var self=this;
  38260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38261. return $core.withContext(function($ctx1) {
  38262. //>>excludeEnd("ctx");
  38263. var $1;
  38264. $1=self._visitIRInstruction_(anIRClosure);
  38265. return $1;
  38266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38267. }, function($ctx1) {$ctx1.fill(self,"visitIRClosure:",{anIRClosure:anIRClosure},$globals.IRVisitor)});
  38268. //>>excludeEnd("ctx");
  38269. },
  38270. //>>excludeStart("ide", pragmas.excludeIdeData);
  38271. args: ["anIRClosure"],
  38272. source: "visitIRClosure: anIRClosure\x0a\x09^ self visitIRInstruction: anIRClosure",
  38273. referencedClasses: [],
  38274. //>>excludeEnd("ide");
  38275. messageSends: ["visitIRInstruction:"]
  38276. }),
  38277. $globals.IRVisitor);
  38278. $core.addMethod(
  38279. $core.method({
  38280. selector: "visitIRDynamicArray:",
  38281. protocol: 'visiting',
  38282. fn: function (anIRDynamicArray){
  38283. var self=this;
  38284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38285. return $core.withContext(function($ctx1) {
  38286. //>>excludeEnd("ctx");
  38287. var $1;
  38288. $1=self._visitIRInstruction_(anIRDynamicArray);
  38289. return $1;
  38290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38291. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicArray:",{anIRDynamicArray:anIRDynamicArray},$globals.IRVisitor)});
  38292. //>>excludeEnd("ctx");
  38293. },
  38294. //>>excludeStart("ide", pragmas.excludeIdeData);
  38295. args: ["anIRDynamicArray"],
  38296. source: "visitIRDynamicArray: anIRDynamicArray\x0a\x09^ self visitIRInstruction: anIRDynamicArray",
  38297. referencedClasses: [],
  38298. //>>excludeEnd("ide");
  38299. messageSends: ["visitIRInstruction:"]
  38300. }),
  38301. $globals.IRVisitor);
  38302. $core.addMethod(
  38303. $core.method({
  38304. selector: "visitIRDynamicDictionary:",
  38305. protocol: 'visiting',
  38306. fn: function (anIRDynamicDictionary){
  38307. var self=this;
  38308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38309. return $core.withContext(function($ctx1) {
  38310. //>>excludeEnd("ctx");
  38311. var $1;
  38312. $1=self._visitIRInstruction_(anIRDynamicDictionary);
  38313. return $1;
  38314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38315. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicDictionary:",{anIRDynamicDictionary:anIRDynamicDictionary},$globals.IRVisitor)});
  38316. //>>excludeEnd("ctx");
  38317. },
  38318. //>>excludeStart("ide", pragmas.excludeIdeData);
  38319. args: ["anIRDynamicDictionary"],
  38320. source: "visitIRDynamicDictionary: anIRDynamicDictionary\x0a\x09^ self visitIRInstruction: anIRDynamicDictionary",
  38321. referencedClasses: [],
  38322. //>>excludeEnd("ide");
  38323. messageSends: ["visitIRInstruction:"]
  38324. }),
  38325. $globals.IRVisitor);
  38326. $core.addMethod(
  38327. $core.method({
  38328. selector: "visitIRInlinedClosure:",
  38329. protocol: 'visiting',
  38330. fn: function (anIRInlinedClosure){
  38331. var self=this;
  38332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38333. return $core.withContext(function($ctx1) {
  38334. //>>excludeEnd("ctx");
  38335. var $1;
  38336. $1=self._visitIRClosure_(anIRInlinedClosure);
  38337. return $1;
  38338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38339. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedClosure:",{anIRInlinedClosure:anIRInlinedClosure},$globals.IRVisitor)});
  38340. //>>excludeEnd("ctx");
  38341. },
  38342. //>>excludeStart("ide", pragmas.excludeIdeData);
  38343. args: ["anIRInlinedClosure"],
  38344. source: "visitIRInlinedClosure: anIRInlinedClosure\x0a\x09^ self visitIRClosure: anIRInlinedClosure",
  38345. referencedClasses: [],
  38346. //>>excludeEnd("ide");
  38347. messageSends: ["visitIRClosure:"]
  38348. }),
  38349. $globals.IRVisitor);
  38350. $core.addMethod(
  38351. $core.method({
  38352. selector: "visitIRInlinedSequence:",
  38353. protocol: 'visiting',
  38354. fn: function (anIRInlinedSequence){
  38355. var self=this;
  38356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38357. return $core.withContext(function($ctx1) {
  38358. //>>excludeEnd("ctx");
  38359. var $1;
  38360. $1=self._visitIRSequence_(anIRInlinedSequence);
  38361. return $1;
  38362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38363. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedSequence:",{anIRInlinedSequence:anIRInlinedSequence},$globals.IRVisitor)});
  38364. //>>excludeEnd("ctx");
  38365. },
  38366. //>>excludeStart("ide", pragmas.excludeIdeData);
  38367. args: ["anIRInlinedSequence"],
  38368. source: "visitIRInlinedSequence: anIRInlinedSequence\x0a\x09^ self visitIRSequence: anIRInlinedSequence",
  38369. referencedClasses: [],
  38370. //>>excludeEnd("ide");
  38371. messageSends: ["visitIRSequence:"]
  38372. }),
  38373. $globals.IRVisitor);
  38374. $core.addMethod(
  38375. $core.method({
  38376. selector: "visitIRInstruction:",
  38377. protocol: 'visiting',
  38378. fn: function (anIRInstruction){
  38379. var self=this;
  38380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38381. return $core.withContext(function($ctx1) {
  38382. //>>excludeEnd("ctx");
  38383. $recv($recv(anIRInstruction)._instructions())._do_((function(each){
  38384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38385. return $core.withContext(function($ctx2) {
  38386. //>>excludeEnd("ctx");
  38387. return self._visit_(each);
  38388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38389. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  38390. //>>excludeEnd("ctx");
  38391. }));
  38392. return anIRInstruction;
  38393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38394. }, function($ctx1) {$ctx1.fill(self,"visitIRInstruction:",{anIRInstruction:anIRInstruction},$globals.IRVisitor)});
  38395. //>>excludeEnd("ctx");
  38396. },
  38397. //>>excludeStart("ide", pragmas.excludeIdeData);
  38398. args: ["anIRInstruction"],
  38399. source: "visitIRInstruction: anIRInstruction\x0a\x09anIRInstruction instructions do: [ :each | self visit: each ].\x0a\x09^ anIRInstruction",
  38400. referencedClasses: [],
  38401. //>>excludeEnd("ide");
  38402. messageSends: ["do:", "instructions", "visit:"]
  38403. }),
  38404. $globals.IRVisitor);
  38405. $core.addMethod(
  38406. $core.method({
  38407. selector: "visitIRMethod:",
  38408. protocol: 'visiting',
  38409. fn: function (anIRMethod){
  38410. var self=this;
  38411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38412. return $core.withContext(function($ctx1) {
  38413. //>>excludeEnd("ctx");
  38414. var $1;
  38415. $1=self._visitIRInstruction_(anIRMethod);
  38416. return $1;
  38417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38418. }, function($ctx1) {$ctx1.fill(self,"visitIRMethod:",{anIRMethod:anIRMethod},$globals.IRVisitor)});
  38419. //>>excludeEnd("ctx");
  38420. },
  38421. //>>excludeStart("ide", pragmas.excludeIdeData);
  38422. args: ["anIRMethod"],
  38423. source: "visitIRMethod: anIRMethod\x0a\x09^ self visitIRInstruction: anIRMethod",
  38424. referencedClasses: [],
  38425. //>>excludeEnd("ide");
  38426. messageSends: ["visitIRInstruction:"]
  38427. }),
  38428. $globals.IRVisitor);
  38429. $core.addMethod(
  38430. $core.method({
  38431. selector: "visitIRNonLocalReturn:",
  38432. protocol: 'visiting',
  38433. fn: function (anIRNonLocalReturn){
  38434. var self=this;
  38435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38436. return $core.withContext(function($ctx1) {
  38437. //>>excludeEnd("ctx");
  38438. var $1;
  38439. $1=self._visitIRInstruction_(anIRNonLocalReturn);
  38440. return $1;
  38441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38442. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRVisitor)});
  38443. //>>excludeEnd("ctx");
  38444. },
  38445. //>>excludeStart("ide", pragmas.excludeIdeData);
  38446. args: ["anIRNonLocalReturn"],
  38447. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09^ self visitIRInstruction: anIRNonLocalReturn",
  38448. referencedClasses: [],
  38449. //>>excludeEnd("ide");
  38450. messageSends: ["visitIRInstruction:"]
  38451. }),
  38452. $globals.IRVisitor);
  38453. $core.addMethod(
  38454. $core.method({
  38455. selector: "visitIRNonLocalReturnHandling:",
  38456. protocol: 'visiting',
  38457. fn: function (anIRNonLocalReturnHandling){
  38458. var self=this;
  38459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38460. return $core.withContext(function($ctx1) {
  38461. //>>excludeEnd("ctx");
  38462. var $1;
  38463. $1=self._visitIRInstruction_(anIRNonLocalReturnHandling);
  38464. return $1;
  38465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38466. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturnHandling:",{anIRNonLocalReturnHandling:anIRNonLocalReturnHandling},$globals.IRVisitor)});
  38467. //>>excludeEnd("ctx");
  38468. },
  38469. //>>excludeStart("ide", pragmas.excludeIdeData);
  38470. args: ["anIRNonLocalReturnHandling"],
  38471. source: "visitIRNonLocalReturnHandling: anIRNonLocalReturnHandling\x0a\x09^ self visitIRInstruction: anIRNonLocalReturnHandling",
  38472. referencedClasses: [],
  38473. //>>excludeEnd("ide");
  38474. messageSends: ["visitIRInstruction:"]
  38475. }),
  38476. $globals.IRVisitor);
  38477. $core.addMethod(
  38478. $core.method({
  38479. selector: "visitIRReturn:",
  38480. protocol: 'visiting',
  38481. fn: function (anIRReturn){
  38482. var self=this;
  38483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38484. return $core.withContext(function($ctx1) {
  38485. //>>excludeEnd("ctx");
  38486. var $1;
  38487. $1=self._visitIRInstruction_(anIRReturn);
  38488. return $1;
  38489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38490. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRVisitor)});
  38491. //>>excludeEnd("ctx");
  38492. },
  38493. //>>excludeStart("ide", pragmas.excludeIdeData);
  38494. args: ["anIRReturn"],
  38495. source: "visitIRReturn: anIRReturn\x0a\x09^ self visitIRInstruction: anIRReturn",
  38496. referencedClasses: [],
  38497. //>>excludeEnd("ide");
  38498. messageSends: ["visitIRInstruction:"]
  38499. }),
  38500. $globals.IRVisitor);
  38501. $core.addMethod(
  38502. $core.method({
  38503. selector: "visitIRSend:",
  38504. protocol: 'visiting',
  38505. fn: function (anIRSend){
  38506. var self=this;
  38507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38508. return $core.withContext(function($ctx1) {
  38509. //>>excludeEnd("ctx");
  38510. var $1;
  38511. $1=self._visitIRInstruction_(anIRSend);
  38512. return $1;
  38513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38514. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend},$globals.IRVisitor)});
  38515. //>>excludeEnd("ctx");
  38516. },
  38517. //>>excludeStart("ide", pragmas.excludeIdeData);
  38518. args: ["anIRSend"],
  38519. source: "visitIRSend: anIRSend\x0a\x09^ self visitIRInstruction: anIRSend",
  38520. referencedClasses: [],
  38521. //>>excludeEnd("ide");
  38522. messageSends: ["visitIRInstruction:"]
  38523. }),
  38524. $globals.IRVisitor);
  38525. $core.addMethod(
  38526. $core.method({
  38527. selector: "visitIRSequence:",
  38528. protocol: 'visiting',
  38529. fn: function (anIRSequence){
  38530. var self=this;
  38531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38532. return $core.withContext(function($ctx1) {
  38533. //>>excludeEnd("ctx");
  38534. var $1;
  38535. $1=self._visitIRInstruction_(anIRSequence);
  38536. return $1;
  38537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38538. }, function($ctx1) {$ctx1.fill(self,"visitIRSequence:",{anIRSequence:anIRSequence},$globals.IRVisitor)});
  38539. //>>excludeEnd("ctx");
  38540. },
  38541. //>>excludeStart("ide", pragmas.excludeIdeData);
  38542. args: ["anIRSequence"],
  38543. source: "visitIRSequence: anIRSequence\x0a\x09^ self visitIRInstruction: anIRSequence",
  38544. referencedClasses: [],
  38545. //>>excludeEnd("ide");
  38546. messageSends: ["visitIRInstruction:"]
  38547. }),
  38548. $globals.IRVisitor);
  38549. $core.addMethod(
  38550. $core.method({
  38551. selector: "visitIRTempDeclaration:",
  38552. protocol: 'visiting',
  38553. fn: function (anIRTempDeclaration){
  38554. var self=this;
  38555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38556. return $core.withContext(function($ctx1) {
  38557. //>>excludeEnd("ctx");
  38558. var $1;
  38559. $1=self._visitIRInstruction_(anIRTempDeclaration);
  38560. return $1;
  38561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38562. }, function($ctx1) {$ctx1.fill(self,"visitIRTempDeclaration:",{anIRTempDeclaration:anIRTempDeclaration},$globals.IRVisitor)});
  38563. //>>excludeEnd("ctx");
  38564. },
  38565. //>>excludeStart("ide", pragmas.excludeIdeData);
  38566. args: ["anIRTempDeclaration"],
  38567. source: "visitIRTempDeclaration: anIRTempDeclaration\x0a\x09^ self visitIRInstruction: anIRTempDeclaration",
  38568. referencedClasses: [],
  38569. //>>excludeEnd("ide");
  38570. messageSends: ["visitIRInstruction:"]
  38571. }),
  38572. $globals.IRVisitor);
  38573. $core.addMethod(
  38574. $core.method({
  38575. selector: "visitIRValue:",
  38576. protocol: 'visiting',
  38577. fn: function (anIRValue){
  38578. var self=this;
  38579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38580. return $core.withContext(function($ctx1) {
  38581. //>>excludeEnd("ctx");
  38582. var $1;
  38583. $1=self._visitIRInstruction_(anIRValue);
  38584. return $1;
  38585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38586. }, function($ctx1) {$ctx1.fill(self,"visitIRValue:",{anIRValue:anIRValue},$globals.IRVisitor)});
  38587. //>>excludeEnd("ctx");
  38588. },
  38589. //>>excludeStart("ide", pragmas.excludeIdeData);
  38590. args: ["anIRValue"],
  38591. source: "visitIRValue: anIRValue\x0a\x09^ self visitIRInstruction: anIRValue",
  38592. referencedClasses: [],
  38593. //>>excludeEnd("ide");
  38594. messageSends: ["visitIRInstruction:"]
  38595. }),
  38596. $globals.IRVisitor);
  38597. $core.addMethod(
  38598. $core.method({
  38599. selector: "visitIRVariable:",
  38600. protocol: 'visiting',
  38601. fn: function (anIRVariable){
  38602. var self=this;
  38603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38604. return $core.withContext(function($ctx1) {
  38605. //>>excludeEnd("ctx");
  38606. var $1;
  38607. $1=self._visitIRInstruction_(anIRVariable);
  38608. return $1;
  38609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38610. }, function($ctx1) {$ctx1.fill(self,"visitIRVariable:",{anIRVariable:anIRVariable},$globals.IRVisitor)});
  38611. //>>excludeEnd("ctx");
  38612. },
  38613. //>>excludeStart("ide", pragmas.excludeIdeData);
  38614. args: ["anIRVariable"],
  38615. source: "visitIRVariable: anIRVariable\x0a\x09^ self visitIRInstruction: anIRVariable",
  38616. referencedClasses: [],
  38617. //>>excludeEnd("ide");
  38618. messageSends: ["visitIRInstruction:"]
  38619. }),
  38620. $globals.IRVisitor);
  38621. $core.addMethod(
  38622. $core.method({
  38623. selector: "visitIRVerbatim:",
  38624. protocol: 'visiting',
  38625. fn: function (anIRVerbatim){
  38626. var self=this;
  38627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38628. return $core.withContext(function($ctx1) {
  38629. //>>excludeEnd("ctx");
  38630. var $1;
  38631. $1=self._visitIRInstruction_(anIRVerbatim);
  38632. return $1;
  38633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38634. }, function($ctx1) {$ctx1.fill(self,"visitIRVerbatim:",{anIRVerbatim:anIRVerbatim},$globals.IRVisitor)});
  38635. //>>excludeEnd("ctx");
  38636. },
  38637. //>>excludeStart("ide", pragmas.excludeIdeData);
  38638. args: ["anIRVerbatim"],
  38639. source: "visitIRVerbatim: anIRVerbatim\x0a\x09^ self visitIRInstruction: anIRVerbatim",
  38640. referencedClasses: [],
  38641. //>>excludeEnd("ide");
  38642. messageSends: ["visitIRInstruction:"]
  38643. }),
  38644. $globals.IRVisitor);
  38645. $core.addClass('IRJSTranslator', $globals.IRVisitor, ['stream', 'currentClass'], 'Compiler-IR');
  38646. $core.addMethod(
  38647. $core.method({
  38648. selector: "contents",
  38649. protocol: 'accessing',
  38650. fn: function (){
  38651. var self=this;
  38652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38653. return $core.withContext(function($ctx1) {
  38654. //>>excludeEnd("ctx");
  38655. var $1;
  38656. $1=$recv(self._stream())._contents();
  38657. return $1;
  38658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38659. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.IRJSTranslator)});
  38660. //>>excludeEnd("ctx");
  38661. },
  38662. //>>excludeStart("ide", pragmas.excludeIdeData);
  38663. args: [],
  38664. source: "contents\x0a\x09^ self stream contents",
  38665. referencedClasses: [],
  38666. //>>excludeEnd("ide");
  38667. messageSends: ["contents", "stream"]
  38668. }),
  38669. $globals.IRJSTranslator);
  38670. $core.addMethod(
  38671. $core.method({
  38672. selector: "currentClass",
  38673. protocol: 'accessing',
  38674. fn: function (){
  38675. var self=this;
  38676. var $1;
  38677. $1=self["@currentClass"];
  38678. return $1;
  38679. },
  38680. //>>excludeStart("ide", pragmas.excludeIdeData);
  38681. args: [],
  38682. source: "currentClass\x0a\x09^ currentClass",
  38683. referencedClasses: [],
  38684. //>>excludeEnd("ide");
  38685. messageSends: []
  38686. }),
  38687. $globals.IRJSTranslator);
  38688. $core.addMethod(
  38689. $core.method({
  38690. selector: "currentClass:",
  38691. protocol: 'accessing',
  38692. fn: function (aClass){
  38693. var self=this;
  38694. self["@currentClass"]=aClass;
  38695. return self;
  38696. },
  38697. //>>excludeStart("ide", pragmas.excludeIdeData);
  38698. args: ["aClass"],
  38699. source: "currentClass: aClass\x0a\x09currentClass := aClass",
  38700. referencedClasses: [],
  38701. //>>excludeEnd("ide");
  38702. messageSends: []
  38703. }),
  38704. $globals.IRJSTranslator);
  38705. $core.addMethod(
  38706. $core.method({
  38707. selector: "initialize",
  38708. protocol: 'initialization',
  38709. fn: function (){
  38710. var self=this;
  38711. function $JSStream(){return $globals.JSStream||(typeof JSStream=="undefined"?nil:JSStream)}
  38712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38713. return $core.withContext(function($ctx1) {
  38714. //>>excludeEnd("ctx");
  38715. (
  38716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38717. $ctx1.supercall = true,
  38718. //>>excludeEnd("ctx");
  38719. $globals.IRJSTranslator.superclass.fn.prototype._initialize.apply($recv(self), []));
  38720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38721. $ctx1.supercall = false;
  38722. //>>excludeEnd("ctx");;
  38723. self["@stream"]=$recv($JSStream())._new();
  38724. return self;
  38725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38726. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.IRJSTranslator)});
  38727. //>>excludeEnd("ctx");
  38728. },
  38729. //>>excludeStart("ide", pragmas.excludeIdeData);
  38730. args: [],
  38731. source: "initialize\x0a\x09super initialize.\x0a\x09stream := JSStream new.",
  38732. referencedClasses: ["JSStream"],
  38733. //>>excludeEnd("ide");
  38734. messageSends: ["initialize", "new"]
  38735. }),
  38736. $globals.IRJSTranslator);
  38737. $core.addMethod(
  38738. $core.method({
  38739. selector: "stream",
  38740. protocol: 'accessing',
  38741. fn: function (){
  38742. var self=this;
  38743. var $1;
  38744. $1=self["@stream"];
  38745. return $1;
  38746. },
  38747. //>>excludeStart("ide", pragmas.excludeIdeData);
  38748. args: [],
  38749. source: "stream\x0a\x09^ stream",
  38750. referencedClasses: [],
  38751. //>>excludeEnd("ide");
  38752. messageSends: []
  38753. }),
  38754. $globals.IRJSTranslator);
  38755. $core.addMethod(
  38756. $core.method({
  38757. selector: "stream:",
  38758. protocol: 'accessing',
  38759. fn: function (aStream){
  38760. var self=this;
  38761. self["@stream"]=aStream;
  38762. return self;
  38763. },
  38764. //>>excludeStart("ide", pragmas.excludeIdeData);
  38765. args: ["aStream"],
  38766. source: "stream: aStream\x0a\x09stream := aStream",
  38767. referencedClasses: [],
  38768. //>>excludeEnd("ide");
  38769. messageSends: []
  38770. }),
  38771. $globals.IRJSTranslator);
  38772. $core.addMethod(
  38773. $core.method({
  38774. selector: "visitIRAssignment:",
  38775. protocol: 'visiting',
  38776. fn: function (anIRAssignment){
  38777. var self=this;
  38778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38779. return $core.withContext(function($ctx1) {
  38780. //>>excludeEnd("ctx");
  38781. var $2,$1;
  38782. $2=$recv(anIRAssignment)._instructions();
  38783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38784. $ctx1.sendIdx["instructions"]=1;
  38785. //>>excludeEnd("ctx");
  38786. $1=$recv($2)._first();
  38787. self._visit_($1);
  38788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38789. $ctx1.sendIdx["visit:"]=1;
  38790. //>>excludeEnd("ctx");
  38791. $recv(self._stream())._nextPutAssignment();
  38792. self._visit_($recv($recv(anIRAssignment)._instructions())._last());
  38793. return self;
  38794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38795. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRJSTranslator)});
  38796. //>>excludeEnd("ctx");
  38797. },
  38798. //>>excludeStart("ide", pragmas.excludeIdeData);
  38799. args: ["anIRAssignment"],
  38800. source: "visitIRAssignment: anIRAssignment\x0a\x09self visit: anIRAssignment instructions first.\x0a\x09self stream nextPutAssignment.\x0a\x09self visit: anIRAssignment instructions last.",
  38801. referencedClasses: [],
  38802. //>>excludeEnd("ide");
  38803. messageSends: ["visit:", "first", "instructions", "nextPutAssignment", "stream", "last"]
  38804. }),
  38805. $globals.IRJSTranslator);
  38806. $core.addMethod(
  38807. $core.method({
  38808. selector: "visitIRClosure:",
  38809. protocol: 'visiting',
  38810. fn: function (anIRClosure){
  38811. var self=this;
  38812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38813. return $core.withContext(function($ctx1) {
  38814. //>>excludeEnd("ctx");
  38815. var $1,$2;
  38816. $1=self._stream();
  38817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38818. $ctx1.sendIdx["stream"]=1;
  38819. //>>excludeEnd("ctx");
  38820. $recv($1)._nextPutClosureWith_arguments_((function(){
  38821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38822. return $core.withContext(function($ctx2) {
  38823. //>>excludeEnd("ctx");
  38824. $2=self._stream();
  38825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38826. $ctx2.sendIdx["stream"]=2;
  38827. //>>excludeEnd("ctx");
  38828. $recv($2)._nextPutVars_($recv($recv(anIRClosure)._tempDeclarations())._collect_((function(each){
  38829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38830. return $core.withContext(function($ctx3) {
  38831. //>>excludeEnd("ctx");
  38832. return $recv($recv(each)._name())._asVariableName();
  38833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38834. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  38835. //>>excludeEnd("ctx");
  38836. })));
  38837. return $recv(self._stream())._nextPutBlockContextFor_during_(anIRClosure,(function(){
  38838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38839. return $core.withContext(function($ctx3) {
  38840. //>>excludeEnd("ctx");
  38841. return (
  38842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38843. $ctx3.supercall = true,
  38844. //>>excludeEnd("ctx");
  38845. $globals.IRJSTranslator.superclass.fn.prototype._visitIRClosure_.apply($recv(self), [anIRClosure]));
  38846. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38847. $ctx3.supercall = false;
  38848. //>>excludeEnd("ctx");;
  38849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38850. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  38851. //>>excludeEnd("ctx");
  38852. }));
  38853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38854. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  38855. //>>excludeEnd("ctx");
  38856. }),$recv(anIRClosure)._arguments());
  38857. return self;
  38858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38859. }, function($ctx1) {$ctx1.fill(self,"visitIRClosure:",{anIRClosure:anIRClosure},$globals.IRJSTranslator)});
  38860. //>>excludeEnd("ctx");
  38861. },
  38862. //>>excludeStart("ide", pragmas.excludeIdeData);
  38863. args: ["anIRClosure"],
  38864. source: "visitIRClosure: anIRClosure\x0a\x09self stream\x0a\x09\x09nextPutClosureWith: [\x0a\x09\x09\x09self stream nextPutVars: (anIRClosure tempDeclarations collect: [ :each |\x0a\x09\x09\x09\x09\x09each name asVariableName ]).\x0a\x09\x09\x09self stream\x0a\x09\x09\x09\x09nextPutBlockContextFor: anIRClosure\x0a\x09\x09\x09\x09during: [ super visitIRClosure: anIRClosure ] ]\x0a\x09\x09arguments: anIRClosure arguments",
  38865. referencedClasses: [],
  38866. //>>excludeEnd("ide");
  38867. messageSends: ["nextPutClosureWith:arguments:", "stream", "nextPutVars:", "collect:", "tempDeclarations", "asVariableName", "name", "nextPutBlockContextFor:during:", "visitIRClosure:", "arguments"]
  38868. }),
  38869. $globals.IRJSTranslator);
  38870. $core.addMethod(
  38871. $core.method({
  38872. selector: "visitIRDynamicArray:",
  38873. protocol: 'visiting',
  38874. fn: function (anIRDynamicArray){
  38875. var self=this;
  38876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38877. return $core.withContext(function($ctx1) {
  38878. //>>excludeEnd("ctx");
  38879. var $1;
  38880. $1=self._stream();
  38881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38882. $ctx1.sendIdx["stream"]=1;
  38883. //>>excludeEnd("ctx");
  38884. $recv($1)._nextPutAll_("[");
  38885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38886. $ctx1.sendIdx["nextPutAll:"]=1;
  38887. //>>excludeEnd("ctx");
  38888. $recv($recv(anIRDynamicArray)._instructions())._do_separatedBy_((function(each){
  38889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38890. return $core.withContext(function($ctx2) {
  38891. //>>excludeEnd("ctx");
  38892. return self._visit_(each);
  38893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38894. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  38895. //>>excludeEnd("ctx");
  38896. }),(function(){
  38897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38898. return $core.withContext(function($ctx2) {
  38899. //>>excludeEnd("ctx");
  38900. return $recv(self._stream())._nextPutAll_(",");
  38901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38902. $ctx2.sendIdx["nextPutAll:"]=2;
  38903. //>>excludeEnd("ctx");
  38904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38905. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  38906. //>>excludeEnd("ctx");
  38907. }));
  38908. $recv(self["@stream"])._nextPutAll_("]");
  38909. return self;
  38910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38911. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicArray:",{anIRDynamicArray:anIRDynamicArray},$globals.IRJSTranslator)});
  38912. //>>excludeEnd("ctx");
  38913. },
  38914. //>>excludeStart("ide", pragmas.excludeIdeData);
  38915. args: ["anIRDynamicArray"],
  38916. source: "visitIRDynamicArray: anIRDynamicArray\x0a\x09self stream nextPutAll: '['.\x0a\x09anIRDynamicArray instructions\x0a\x09\x09do: [ :each | self visit: each ]\x0a\x09\x09separatedBy: [ self stream nextPutAll: ',' ].\x0a\x09stream nextPutAll: ']'",
  38917. referencedClasses: [],
  38918. //>>excludeEnd("ide");
  38919. messageSends: ["nextPutAll:", "stream", "do:separatedBy:", "instructions", "visit:"]
  38920. }),
  38921. $globals.IRJSTranslator);
  38922. $core.addMethod(
  38923. $core.method({
  38924. selector: "visitIRDynamicDictionary:",
  38925. protocol: 'visiting',
  38926. fn: function (anIRDynamicDictionary){
  38927. var self=this;
  38928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38929. return $core.withContext(function($ctx1) {
  38930. //>>excludeEnd("ctx");
  38931. var $1,$2;
  38932. $1=self._stream();
  38933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38934. $ctx1.sendIdx["stream"]=1;
  38935. //>>excludeEnd("ctx");
  38936. $recv($1)._nextPutAll_("$globals.HashedCollection._newFromPairs_([");
  38937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38938. $ctx1.sendIdx["nextPutAll:"]=1;
  38939. //>>excludeEnd("ctx");
  38940. $recv($recv(anIRDynamicDictionary)._instructions())._do_separatedBy_((function(each){
  38941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38942. return $core.withContext(function($ctx2) {
  38943. //>>excludeEnd("ctx");
  38944. return self._visit_(each);
  38945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38946. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  38947. //>>excludeEnd("ctx");
  38948. }),(function(){
  38949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38950. return $core.withContext(function($ctx2) {
  38951. //>>excludeEnd("ctx");
  38952. $2=self._stream();
  38953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38954. $ctx2.sendIdx["stream"]=2;
  38955. //>>excludeEnd("ctx");
  38956. return $recv($2)._nextPutAll_(",");
  38957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38958. $ctx2.sendIdx["nextPutAll:"]=2;
  38959. //>>excludeEnd("ctx");
  38960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38961. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  38962. //>>excludeEnd("ctx");
  38963. }));
  38964. $recv(self._stream())._nextPutAll_("])");
  38965. return self;
  38966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38967. }, function($ctx1) {$ctx1.fill(self,"visitIRDynamicDictionary:",{anIRDynamicDictionary:anIRDynamicDictionary},$globals.IRJSTranslator)});
  38968. //>>excludeEnd("ctx");
  38969. },
  38970. //>>excludeStart("ide", pragmas.excludeIdeData);
  38971. args: ["anIRDynamicDictionary"],
  38972. source: "visitIRDynamicDictionary: anIRDynamicDictionary\x0a\x09self stream nextPutAll: '$globals.HashedCollection._newFromPairs_(['.\x0a\x09\x09anIRDynamicDictionary instructions\x0a\x09\x09\x09do: [ :each | self visit: each ]\x0a\x09\x09\x09separatedBy: [ self stream nextPutAll: ',' ].\x0a\x09self stream nextPutAll: '])'",
  38973. referencedClasses: [],
  38974. //>>excludeEnd("ide");
  38975. messageSends: ["nextPutAll:", "stream", "do:separatedBy:", "instructions", "visit:"]
  38976. }),
  38977. $globals.IRJSTranslator);
  38978. $core.addMethod(
  38979. $core.method({
  38980. selector: "visitIRMethod:",
  38981. protocol: 'visiting',
  38982. fn: function (anIRMethod){
  38983. var self=this;
  38984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38985. return $core.withContext(function($ctx1) {
  38986. //>>excludeEnd("ctx");
  38987. var $1,$2,$3,$4,$5,$6,$8,$7,$9,$10;
  38988. $1=self._stream();
  38989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38990. $ctx1.sendIdx["stream"]=1;
  38991. //>>excludeEnd("ctx");
  38992. $recv($1)._nextPutMethodDeclaration_with_(anIRMethod,(function(){
  38993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38994. return $core.withContext(function($ctx2) {
  38995. //>>excludeEnd("ctx");
  38996. $2=self._stream();
  38997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38998. $ctx2.sendIdx["stream"]=2;
  38999. //>>excludeEnd("ctx");
  39000. return $recv($2)._nextPutFunctionWith_arguments_((function(){
  39001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39002. return $core.withContext(function($ctx3) {
  39003. //>>excludeEnd("ctx");
  39004. $3=self._stream();
  39005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39006. $ctx3.sendIdx["stream"]=3;
  39007. //>>excludeEnd("ctx");
  39008. $4=$recv($recv(anIRMethod)._tempDeclarations())._collect_((function(each){
  39009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39010. return $core.withContext(function($ctx4) {
  39011. //>>excludeEnd("ctx");
  39012. return $recv($recv(each)._name())._asVariableName();
  39013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39014. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,3)});
  39015. //>>excludeEnd("ctx");
  39016. }));
  39017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39018. $ctx3.sendIdx["collect:"]=1;
  39019. //>>excludeEnd("ctx");
  39020. $recv($3)._nextPutVars_($4);
  39021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39022. $ctx3.sendIdx["nextPutVars:"]=1;
  39023. //>>excludeEnd("ctx");
  39024. $recv($recv(anIRMethod)._classReferences())._do_((function(each){
  39025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39026. return $core.withContext(function($ctx4) {
  39027. //>>excludeEnd("ctx");
  39028. $5=self._stream();
  39029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39030. $ctx4.sendIdx["stream"]=4;
  39031. //>>excludeEnd("ctx");
  39032. return $recv($5)._nextPutClassRefFunction_(each);
  39033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39034. }, function($ctx4) {$ctx4.fillBlock({each:each},$ctx3,4)});
  39035. //>>excludeEnd("ctx");
  39036. }));
  39037. $6=self._stream();
  39038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39039. $ctx3.sendIdx["stream"]=5;
  39040. //>>excludeEnd("ctx");
  39041. return $recv($6)._nextPutContextFor_during_(anIRMethod,(function(){
  39042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39043. return $core.withContext(function($ctx4) {
  39044. //>>excludeEnd("ctx");
  39045. $8=$recv(anIRMethod)._internalVariables();
  39046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39047. $ctx4.sendIdx["internalVariables"]=1;
  39048. //>>excludeEnd("ctx");
  39049. $7=$recv($8)._notEmpty();
  39050. if($core.assert($7)){
  39051. $9=self._stream();
  39052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39053. $ctx4.sendIdx["stream"]=6;
  39054. //>>excludeEnd("ctx");
  39055. $recv($9)._nextPutVars_($recv($recv($recv(anIRMethod)._internalVariables())._asSet())._collect_((function(each){
  39056. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39057. return $core.withContext(function($ctx5) {
  39058. //>>excludeEnd("ctx");
  39059. return $recv($recv(each)._variable())._alias();
  39060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39061. }, function($ctx5) {$ctx5.fillBlock({each:each},$ctx4,7)});
  39062. //>>excludeEnd("ctx");
  39063. })));
  39064. };
  39065. $10=$recv($recv(anIRMethod)._scope())._hasNonLocalReturn();
  39066. if($core.assert($10)){
  39067. return $recv(self._stream())._nextPutNonLocalReturnHandlingWith_((function(){
  39068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39069. return $core.withContext(function($ctx5) {
  39070. //>>excludeEnd("ctx");
  39071. return (
  39072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39073. $ctx5.supercall = true,
  39074. //>>excludeEnd("ctx");
  39075. $globals.IRJSTranslator.superclass.fn.prototype._visitIRMethod_.apply($recv(self), [anIRMethod]));
  39076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39077. $ctx5.supercall = false;
  39078. //>>excludeEnd("ctx");;
  39079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39080. $ctx5.sendIdx["visitIRMethod:"]=1;
  39081. //>>excludeEnd("ctx");
  39082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39083. }, function($ctx5) {$ctx5.fillBlock({},$ctx4,9)});
  39084. //>>excludeEnd("ctx");
  39085. }));
  39086. } else {
  39087. return (
  39088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39089. $ctx4.supercall = true,
  39090. //>>excludeEnd("ctx");
  39091. $globals.IRJSTranslator.superclass.fn.prototype._visitIRMethod_.apply($recv(self), [anIRMethod]));
  39092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39093. $ctx4.supercall = false;
  39094. //>>excludeEnd("ctx");;
  39095. };
  39096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39097. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,5)});
  39098. //>>excludeEnd("ctx");
  39099. }));
  39100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39101. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  39102. //>>excludeEnd("ctx");
  39103. }),$recv(anIRMethod)._arguments());
  39104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39105. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39106. //>>excludeEnd("ctx");
  39107. }));
  39108. return self;
  39109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39110. }, function($ctx1) {$ctx1.fill(self,"visitIRMethod:",{anIRMethod:anIRMethod},$globals.IRJSTranslator)});
  39111. //>>excludeEnd("ctx");
  39112. },
  39113. //>>excludeStart("ide", pragmas.excludeIdeData);
  39114. args: ["anIRMethod"],
  39115. source: "visitIRMethod: anIRMethod\x0a\x0a\x09self stream\x0a\x09\x09nextPutMethodDeclaration: anIRMethod\x0a\x09\x09with: [ self stream\x0a\x09\x09\x09nextPutFunctionWith: [\x0a\x09\x09\x09\x09self stream nextPutVars: (anIRMethod tempDeclarations collect: [ :each |\x0a\x09\x09\x09\x09\x09each name asVariableName ]).\x0a\x09\x09\x09\x09anIRMethod classReferences do: [ :each | self stream nextPutClassRefFunction: each ].\x0a\x09\x09\x09\x09self stream nextPutContextFor: anIRMethod during: [\x0a\x09\x09\x09\x09anIRMethod internalVariables notEmpty ifTrue: [\x0a\x09\x09\x09\x09\x09self stream nextPutVars: (anIRMethod internalVariables asSet collect: [ :each |\x0a\x09\x09\x09\x09\x09\x09each variable alias ]) ].\x0a\x09\x09\x09\x09anIRMethod scope hasNonLocalReturn\x0a\x09\x09\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09\x09\x09self stream nextPutNonLocalReturnHandlingWith: [\x0a\x09\x09\x09\x09\x09\x09\x09super visitIRMethod: anIRMethod ] ]\x0a\x09\x09\x09\x09\x09ifFalse: [ super visitIRMethod: anIRMethod ] ]]\x0a\x09\x09\x09arguments: anIRMethod arguments ]",
  39116. referencedClasses: [],
  39117. //>>excludeEnd("ide");
  39118. messageSends: ["nextPutMethodDeclaration:with:", "stream", "nextPutFunctionWith:arguments:", "nextPutVars:", "collect:", "tempDeclarations", "asVariableName", "name", "do:", "classReferences", "nextPutClassRefFunction:", "nextPutContextFor:during:", "ifTrue:", "notEmpty", "internalVariables", "asSet", "alias", "variable", "ifTrue:ifFalse:", "hasNonLocalReturn", "scope", "nextPutNonLocalReturnHandlingWith:", "visitIRMethod:", "arguments"]
  39119. }),
  39120. $globals.IRJSTranslator);
  39121. $core.addMethod(
  39122. $core.method({
  39123. selector: "visitIRNonLocalReturn:",
  39124. protocol: 'visiting',
  39125. fn: function (anIRNonLocalReturn){
  39126. var self=this;
  39127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39128. return $core.withContext(function($ctx1) {
  39129. //>>excludeEnd("ctx");
  39130. $recv(self._stream())._nextPutNonLocalReturnWith_((function(){
  39131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39132. return $core.withContext(function($ctx2) {
  39133. //>>excludeEnd("ctx");
  39134. return (
  39135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39136. $ctx2.supercall = true,
  39137. //>>excludeEnd("ctx");
  39138. $globals.IRJSTranslator.superclass.fn.prototype._visitIRNonLocalReturn_.apply($recv(self), [anIRNonLocalReturn]));
  39139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39140. $ctx2.supercall = false;
  39141. //>>excludeEnd("ctx");;
  39142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39143. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39144. //>>excludeEnd("ctx");
  39145. }));
  39146. return self;
  39147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39148. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRJSTranslator)});
  39149. //>>excludeEnd("ctx");
  39150. },
  39151. //>>excludeStart("ide", pragmas.excludeIdeData);
  39152. args: ["anIRNonLocalReturn"],
  39153. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09self stream nextPutNonLocalReturnWith: [\x0a\x09\x09super visitIRNonLocalReturn: anIRNonLocalReturn ]",
  39154. referencedClasses: [],
  39155. //>>excludeEnd("ide");
  39156. messageSends: ["nextPutNonLocalReturnWith:", "stream", "visitIRNonLocalReturn:"]
  39157. }),
  39158. $globals.IRJSTranslator);
  39159. $core.addMethod(
  39160. $core.method({
  39161. selector: "visitIRReturn:",
  39162. protocol: 'visiting',
  39163. fn: function (anIRReturn){
  39164. var self=this;
  39165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39166. return $core.withContext(function($ctx1) {
  39167. //>>excludeEnd("ctx");
  39168. $recv(self._stream())._nextPutReturnWith_((function(){
  39169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39170. return $core.withContext(function($ctx2) {
  39171. //>>excludeEnd("ctx");
  39172. return (
  39173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39174. $ctx2.supercall = true,
  39175. //>>excludeEnd("ctx");
  39176. $globals.IRJSTranslator.superclass.fn.prototype._visitIRReturn_.apply($recv(self), [anIRReturn]));
  39177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39178. $ctx2.supercall = false;
  39179. //>>excludeEnd("ctx");;
  39180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39181. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39182. //>>excludeEnd("ctx");
  39183. }));
  39184. return self;
  39185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39186. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRJSTranslator)});
  39187. //>>excludeEnd("ctx");
  39188. },
  39189. //>>excludeStart("ide", pragmas.excludeIdeData);
  39190. args: ["anIRReturn"],
  39191. source: "visitIRReturn: anIRReturn\x0a\x09self stream nextPutReturnWith: [\x0a\x09\x09super visitIRReturn: anIRReturn ]",
  39192. referencedClasses: [],
  39193. //>>excludeEnd("ide");
  39194. messageSends: ["nextPutReturnWith:", "stream", "visitIRReturn:"]
  39195. }),
  39196. $globals.IRJSTranslator);
  39197. $core.addMethod(
  39198. $core.method({
  39199. selector: "visitIRSend:",
  39200. protocol: 'visiting',
  39201. fn: function (anIRSend){
  39202. var self=this;
  39203. var sends;
  39204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39205. return $core.withContext(function($ctx1) {
  39206. //>>excludeEnd("ctx");
  39207. var $1,$2,$receiver;
  39208. sends=$recv($recv($recv($recv(anIRSend)._method())._sendIndexes())._at_($recv(anIRSend)._selector()))._size();
  39209. $1=$recv(anIRSend)._classSend();
  39210. if(($receiver = $1) == null || $receiver.isNil){
  39211. self._visitSend_(anIRSend);
  39212. } else {
  39213. self._visitSuperSend_(anIRSend);
  39214. };
  39215. $2=$recv($recv(sends).__gt((1)))._and_((function(){
  39216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39217. return $core.withContext(function($ctx2) {
  39218. //>>excludeEnd("ctx");
  39219. return $recv($recv(anIRSend)._index()).__lt(sends);
  39220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39221. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  39222. //>>excludeEnd("ctx");
  39223. }));
  39224. if($core.assert($2)){
  39225. $recv(self._stream())._nextPutSendIndexFor_(anIRSend);
  39226. };
  39227. return self;
  39228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39229. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend,sends:sends},$globals.IRJSTranslator)});
  39230. //>>excludeEnd("ctx");
  39231. },
  39232. //>>excludeStart("ide", pragmas.excludeIdeData);
  39233. args: ["anIRSend"],
  39234. source: "visitIRSend: anIRSend\x0a\x09| sends |\x0a\x09sends := (anIRSend method sendIndexes at: anIRSend selector) size.\x0a\x09\x0a\x09anIRSend classSend\x0a\x09\x09ifNil: [ self visitSend: anIRSend ]\x0a\x09\x09ifNotNil: [ self visitSuperSend: anIRSend ].\x0a\x09\x09\x0a\x09(sends > 1 and: [ anIRSend index < sends ])\x0a\x09\x09ifTrue: [ self stream nextPutSendIndexFor: anIRSend ]",
  39235. referencedClasses: [],
  39236. //>>excludeEnd("ide");
  39237. messageSends: ["size", "at:", "sendIndexes", "method", "selector", "ifNil:ifNotNil:", "classSend", "visitSend:", "visitSuperSend:", "ifTrue:", "and:", ">", "<", "index", "nextPutSendIndexFor:", "stream"]
  39238. }),
  39239. $globals.IRJSTranslator);
  39240. $core.addMethod(
  39241. $core.method({
  39242. selector: "visitIRSequence:",
  39243. protocol: 'visiting',
  39244. fn: function (anIRSequence){
  39245. var self=this;
  39246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39247. return $core.withContext(function($ctx1) {
  39248. //>>excludeEnd("ctx");
  39249. var $1;
  39250. $1=self._stream();
  39251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39252. $ctx1.sendIdx["stream"]=1;
  39253. //>>excludeEnd("ctx");
  39254. $recv($1)._nextPutSequenceWith_((function(){
  39255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39256. return $core.withContext(function($ctx2) {
  39257. //>>excludeEnd("ctx");
  39258. return $recv($recv(anIRSequence)._instructions())._do_((function(each){
  39259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39260. return $core.withContext(function($ctx3) {
  39261. //>>excludeEnd("ctx");
  39262. return $recv(self._stream())._nextPutStatementWith_(self._visit_(each));
  39263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39264. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  39265. //>>excludeEnd("ctx");
  39266. }));
  39267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39268. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39269. //>>excludeEnd("ctx");
  39270. }));
  39271. return self;
  39272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39273. }, function($ctx1) {$ctx1.fill(self,"visitIRSequence:",{anIRSequence:anIRSequence},$globals.IRJSTranslator)});
  39274. //>>excludeEnd("ctx");
  39275. },
  39276. //>>excludeStart("ide", pragmas.excludeIdeData);
  39277. args: ["anIRSequence"],
  39278. source: "visitIRSequence: anIRSequence\x0a\x09self stream nextPutSequenceWith: [\x0a\x09\x09anIRSequence instructions do: [ :each |\x0a\x09\x09\x09self stream nextPutStatementWith: (self visit: each) ] ]",
  39279. referencedClasses: [],
  39280. //>>excludeEnd("ide");
  39281. messageSends: ["nextPutSequenceWith:", "stream", "do:", "instructions", "nextPutStatementWith:", "visit:"]
  39282. }),
  39283. $globals.IRJSTranslator);
  39284. $core.addMethod(
  39285. $core.method({
  39286. selector: "visitIRTempDeclaration:",
  39287. protocol: 'visiting',
  39288. fn: function (anIRTempDeclaration){
  39289. var self=this;
  39290. return self;
  39291. },
  39292. //>>excludeStart("ide", pragmas.excludeIdeData);
  39293. args: ["anIRTempDeclaration"],
  39294. source: "visitIRTempDeclaration: anIRTempDeclaration\x0a\x09\x22self stream\x0a\x09\x09nextPutAll: 'var ', anIRTempDeclaration name asVariableName, ';';\x0a\x09\x09lf\x22",
  39295. referencedClasses: [],
  39296. //>>excludeEnd("ide");
  39297. messageSends: []
  39298. }),
  39299. $globals.IRJSTranslator);
  39300. $core.addMethod(
  39301. $core.method({
  39302. selector: "visitIRValue:",
  39303. protocol: 'visiting',
  39304. fn: function (anIRValue){
  39305. var self=this;
  39306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39307. return $core.withContext(function($ctx1) {
  39308. //>>excludeEnd("ctx");
  39309. $recv(self._stream())._nextPutAll_($recv($recv(anIRValue)._value())._asJavascript());
  39310. return self;
  39311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39312. }, function($ctx1) {$ctx1.fill(self,"visitIRValue:",{anIRValue:anIRValue},$globals.IRJSTranslator)});
  39313. //>>excludeEnd("ctx");
  39314. },
  39315. //>>excludeStart("ide", pragmas.excludeIdeData);
  39316. args: ["anIRValue"],
  39317. source: "visitIRValue: anIRValue\x0a\x09self stream nextPutAll: anIRValue value asJavascript",
  39318. referencedClasses: [],
  39319. //>>excludeEnd("ide");
  39320. messageSends: ["nextPutAll:", "stream", "asJavascript", "value"]
  39321. }),
  39322. $globals.IRJSTranslator);
  39323. $core.addMethod(
  39324. $core.method({
  39325. selector: "visitIRVariable:",
  39326. protocol: 'visiting',
  39327. fn: function (anIRVariable){
  39328. var self=this;
  39329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39330. return $core.withContext(function($ctx1) {
  39331. //>>excludeEnd("ctx");
  39332. var $3,$2,$1,$4;
  39333. $3=$recv(anIRVariable)._variable();
  39334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39335. $ctx1.sendIdx["variable"]=1;
  39336. //>>excludeEnd("ctx");
  39337. $2=$recv($3)._name();
  39338. $1=$recv($2).__eq("thisContext");
  39339. if($core.assert($1)){
  39340. $4=self._stream();
  39341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39342. $ctx1.sendIdx["stream"]=1;
  39343. //>>excludeEnd("ctx");
  39344. $recv($4)._nextPutAll_("$core.getThisContext()");
  39345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39346. $ctx1.sendIdx["nextPutAll:"]=1;
  39347. //>>excludeEnd("ctx");
  39348. } else {
  39349. $recv(self._stream())._nextPutAll_($recv($recv(anIRVariable)._variable())._alias());
  39350. };
  39351. return self;
  39352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39353. }, function($ctx1) {$ctx1.fill(self,"visitIRVariable:",{anIRVariable:anIRVariable},$globals.IRJSTranslator)});
  39354. //>>excludeEnd("ctx");
  39355. },
  39356. //>>excludeStart("ide", pragmas.excludeIdeData);
  39357. args: ["anIRVariable"],
  39358. source: "visitIRVariable: anIRVariable\x0a\x09anIRVariable variable name = 'thisContext'\x0a\x09\x09ifTrue: [ self stream nextPutAll: '$core.getThisContext()' ]\x0a\x09\x09ifFalse: [ self stream nextPutAll: anIRVariable variable alias ]",
  39359. referencedClasses: [],
  39360. //>>excludeEnd("ide");
  39361. messageSends: ["ifTrue:ifFalse:", "=", "name", "variable", "nextPutAll:", "stream", "alias"]
  39362. }),
  39363. $globals.IRJSTranslator);
  39364. $core.addMethod(
  39365. $core.method({
  39366. selector: "visitIRVerbatim:",
  39367. protocol: 'visiting',
  39368. fn: function (anIRVerbatim){
  39369. var self=this;
  39370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39371. return $core.withContext(function($ctx1) {
  39372. //>>excludeEnd("ctx");
  39373. var $1;
  39374. $1=self._stream();
  39375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39376. $ctx1.sendIdx["stream"]=1;
  39377. //>>excludeEnd("ctx");
  39378. $recv($1)._nextPutStatementWith_((function(){
  39379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39380. return $core.withContext(function($ctx2) {
  39381. //>>excludeEnd("ctx");
  39382. return $recv(self._stream())._nextPutAll_($recv(anIRVerbatim)._source());
  39383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39384. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  39385. //>>excludeEnd("ctx");
  39386. }));
  39387. return self;
  39388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39389. }, function($ctx1) {$ctx1.fill(self,"visitIRVerbatim:",{anIRVerbatim:anIRVerbatim},$globals.IRJSTranslator)});
  39390. //>>excludeEnd("ctx");
  39391. },
  39392. //>>excludeStart("ide", pragmas.excludeIdeData);
  39393. args: ["anIRVerbatim"],
  39394. source: "visitIRVerbatim: anIRVerbatim\x0a\x09self stream nextPutStatementWith: [\x0a\x09\x09self stream nextPutAll: anIRVerbatim source ]",
  39395. referencedClasses: [],
  39396. //>>excludeEnd("ide");
  39397. messageSends: ["nextPutStatementWith:", "stream", "nextPutAll:", "source"]
  39398. }),
  39399. $globals.IRJSTranslator);
  39400. $core.addMethod(
  39401. $core.method({
  39402. selector: "visitReceiver:",
  39403. protocol: 'visiting',
  39404. fn: function (anIRInstruction){
  39405. var self=this;
  39406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39407. return $core.withContext(function($ctx1) {
  39408. //>>excludeEnd("ctx");
  39409. var $1,$2,$3;
  39410. $1=$recv(anIRInstruction)._needsBoxingAsReceiver();
  39411. if(!$core.assert($1)){
  39412. $2=self._visit_(anIRInstruction);
  39413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39414. $ctx1.sendIdx["visit:"]=1;
  39415. //>>excludeEnd("ctx");
  39416. return $2;
  39417. };
  39418. $3=self._stream();
  39419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39420. $ctx1.sendIdx["stream"]=1;
  39421. //>>excludeEnd("ctx");
  39422. $recv($3)._nextPutAll_("$recv(");
  39423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39424. $ctx1.sendIdx["nextPutAll:"]=1;
  39425. //>>excludeEnd("ctx");
  39426. self._visit_(anIRInstruction);
  39427. $recv(self._stream())._nextPutAll_(")");
  39428. return self;
  39429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39430. }, function($ctx1) {$ctx1.fill(self,"visitReceiver:",{anIRInstruction:anIRInstruction},$globals.IRJSTranslator)});
  39431. //>>excludeEnd("ctx");
  39432. },
  39433. //>>excludeStart("ide", pragmas.excludeIdeData);
  39434. args: ["anIRInstruction"],
  39435. source: "visitReceiver: anIRInstruction\x0a\x09anIRInstruction needsBoxingAsReceiver ifFalse: [ ^ self visit: anIRInstruction ].\x0a\x09\x0a\x09self stream nextPutAll: '$recv('.\x0a\x09self visit: anIRInstruction.\x0a\x09self stream nextPutAll: ')'",
  39436. referencedClasses: [],
  39437. //>>excludeEnd("ide");
  39438. messageSends: ["ifFalse:", "needsBoxingAsReceiver", "visit:", "nextPutAll:", "stream"]
  39439. }),
  39440. $globals.IRJSTranslator);
  39441. $core.addMethod(
  39442. $core.method({
  39443. selector: "visitSend:",
  39444. protocol: 'visiting',
  39445. fn: function (anIRSend){
  39446. var self=this;
  39447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39448. return $core.withContext(function($ctx1) {
  39449. //>>excludeEnd("ctx");
  39450. var $2,$1,$3,$4,$5;
  39451. $2=$recv(anIRSend)._instructions();
  39452. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39453. $ctx1.sendIdx["instructions"]=1;
  39454. //>>excludeEnd("ctx");
  39455. $1=$recv($2)._first();
  39456. self._visitReceiver_($1);
  39457. $3=self._stream();
  39458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39459. $ctx1.sendIdx["stream"]=1;
  39460. //>>excludeEnd("ctx");
  39461. $4=$recv(".".__comma($recv($recv(anIRSend)._selector())._asJavaScriptMethodName())).__comma("(");
  39462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39463. $ctx1.sendIdx[","]=1;
  39464. //>>excludeEnd("ctx");
  39465. $recv($3)._nextPutAll_($4);
  39466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39467. $ctx1.sendIdx["nextPutAll:"]=1;
  39468. //>>excludeEnd("ctx");
  39469. $recv($recv($recv(anIRSend)._instructions())._allButFirst())._do_separatedBy_((function(each){
  39470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39471. return $core.withContext(function($ctx2) {
  39472. //>>excludeEnd("ctx");
  39473. return self._visit_(each);
  39474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39475. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  39476. //>>excludeEnd("ctx");
  39477. }),(function(){
  39478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39479. return $core.withContext(function($ctx2) {
  39480. //>>excludeEnd("ctx");
  39481. $5=self._stream();
  39482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39483. $ctx2.sendIdx["stream"]=2;
  39484. //>>excludeEnd("ctx");
  39485. return $recv($5)._nextPutAll_(",");
  39486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39487. $ctx2.sendIdx["nextPutAll:"]=2;
  39488. //>>excludeEnd("ctx");
  39489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39490. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  39491. //>>excludeEnd("ctx");
  39492. }));
  39493. $recv(self._stream())._nextPutAll_(")");
  39494. return self;
  39495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39496. }, function($ctx1) {$ctx1.fill(self,"visitSend:",{anIRSend:anIRSend},$globals.IRJSTranslator)});
  39497. //>>excludeEnd("ctx");
  39498. },
  39499. //>>excludeStart("ide", pragmas.excludeIdeData);
  39500. args: ["anIRSend"],
  39501. source: "visitSend: anIRSend\x0a\x09self visitReceiver: anIRSend instructions first.\x0a\x09self stream nextPutAll: '.', anIRSend selector asJavaScriptMethodName, '('.\x0a\x09anIRSend instructions allButFirst\x0a\x09\x09do: [ :each | self visit: each ]\x0a\x09\x09separatedBy: [ self stream nextPutAll: ',' ].\x0a\x09self stream nextPutAll: ')'",
  39502. referencedClasses: [],
  39503. //>>excludeEnd("ide");
  39504. messageSends: ["visitReceiver:", "first", "instructions", "nextPutAll:", "stream", ",", "asJavaScriptMethodName", "selector", "do:separatedBy:", "allButFirst", "visit:"]
  39505. }),
  39506. $globals.IRJSTranslator);
  39507. $core.addMethod(
  39508. $core.method({
  39509. selector: "visitSuperSend:",
  39510. protocol: 'visiting',
  39511. fn: function (anIRSend){
  39512. var self=this;
  39513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39514. return $core.withContext(function($ctx1) {
  39515. //>>excludeEnd("ctx");
  39516. var $1,$2,$5,$4,$3,$6,$7,$8,$10,$9,$11,$12,$13,$14;
  39517. $1=self._stream();
  39518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39519. $ctx1.sendIdx["stream"]=1;
  39520. //>>excludeEnd("ctx");
  39521. $recv($1)._nextPutAll_("(");
  39522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39523. $ctx1.sendIdx["nextPutAll:"]=1;
  39524. //>>excludeEnd("ctx");
  39525. $recv($1)._lf();
  39526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39527. $ctx1.sendIdx["lf"]=1;
  39528. //>>excludeEnd("ctx");
  39529. $recv($1)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  39530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39531. $ctx1.sendIdx["nextPutAll:"]=2;
  39532. //>>excludeEnd("ctx");
  39533. $recv($1)._lf();
  39534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39535. $ctx1.sendIdx["lf"]=2;
  39536. //>>excludeEnd("ctx");
  39537. $2=$1;
  39538. $5=$recv(anIRSend)._scope();
  39539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39540. $ctx1.sendIdx["scope"]=1;
  39541. //>>excludeEnd("ctx");
  39542. $4=$recv($5)._alias();
  39543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39544. $ctx1.sendIdx["alias"]=1;
  39545. //>>excludeEnd("ctx");
  39546. $3=$recv($4).__comma(".supercall = true, ");
  39547. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39548. $ctx1.sendIdx[","]=1;
  39549. //>>excludeEnd("ctx");
  39550. $recv($2)._nextPutAll_($3);
  39551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39552. $ctx1.sendIdx["nextPutAll:"]=3;
  39553. //>>excludeEnd("ctx");
  39554. $recv($1)._lf();
  39555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39556. $ctx1.sendIdx["lf"]=3;
  39557. //>>excludeEnd("ctx");
  39558. $recv($1)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  39559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39560. $ctx1.sendIdx["nextPutAll:"]=4;
  39561. //>>excludeEnd("ctx");
  39562. $recv($1)._lf();
  39563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39564. $ctx1.sendIdx["lf"]=4;
  39565. //>>excludeEnd("ctx");
  39566. $recv($1)._nextPutAll_($recv(self._currentClass())._asJavascript());
  39567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39568. $ctx1.sendIdx["nextPutAll:"]=5;
  39569. //>>excludeEnd("ctx");
  39570. $recv($1)._nextPutAll_(".superclass.fn.prototype.");
  39571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39572. $ctx1.sendIdx["nextPutAll:"]=6;
  39573. //>>excludeEnd("ctx");
  39574. $6=$1;
  39575. $7=$recv($recv($recv(anIRSend)._selector())._asJavaScriptMethodName()).__comma(".apply(");
  39576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39577. $ctx1.sendIdx[","]=2;
  39578. //>>excludeEnd("ctx");
  39579. $recv($6)._nextPutAll_($7);
  39580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39581. $ctx1.sendIdx["nextPutAll:"]=7;
  39582. //>>excludeEnd("ctx");
  39583. $8=$recv($1)._nextPutAll_("$recv(");
  39584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39585. $ctx1.sendIdx["nextPutAll:"]=8;
  39586. //>>excludeEnd("ctx");
  39587. $10=$recv(anIRSend)._instructions();
  39588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39589. $ctx1.sendIdx["instructions"]=1;
  39590. //>>excludeEnd("ctx");
  39591. $9=$recv($10)._first();
  39592. self._visit_($9);
  39593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39594. $ctx1.sendIdx["visit:"]=1;
  39595. //>>excludeEnd("ctx");
  39596. $11=self._stream();
  39597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39598. $ctx1.sendIdx["stream"]=2;
  39599. //>>excludeEnd("ctx");
  39600. $recv($11)._nextPutAll_("), [");
  39601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39602. $ctx1.sendIdx["nextPutAll:"]=9;
  39603. //>>excludeEnd("ctx");
  39604. $recv($recv($recv(anIRSend)._instructions())._allButFirst())._do_separatedBy_((function(each){
  39605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39606. return $core.withContext(function($ctx2) {
  39607. //>>excludeEnd("ctx");
  39608. return self._visit_(each);
  39609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39610. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  39611. //>>excludeEnd("ctx");
  39612. }),(function(){
  39613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39614. return $core.withContext(function($ctx2) {
  39615. //>>excludeEnd("ctx");
  39616. $12=self._stream();
  39617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39618. $ctx2.sendIdx["stream"]=3;
  39619. //>>excludeEnd("ctx");
  39620. return $recv($12)._nextPutAll_(",");
  39621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39622. $ctx2.sendIdx["nextPutAll:"]=10;
  39623. //>>excludeEnd("ctx");
  39624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39625. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  39626. //>>excludeEnd("ctx");
  39627. }));
  39628. $13=self._stream();
  39629. $recv($13)._nextPutAll_("]));");
  39630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39631. $ctx1.sendIdx["nextPutAll:"]=11;
  39632. //>>excludeEnd("ctx");
  39633. $recv($13)._lf();
  39634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39635. $ctx1.sendIdx["lf"]=5;
  39636. //>>excludeEnd("ctx");
  39637. $recv($13)._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  39638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39639. $ctx1.sendIdx["nextPutAll:"]=12;
  39640. //>>excludeEnd("ctx");
  39641. $recv($13)._lf();
  39642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39643. $ctx1.sendIdx["lf"]=6;
  39644. //>>excludeEnd("ctx");
  39645. $recv($13)._nextPutAll_($recv($recv($recv(anIRSend)._scope())._alias()).__comma(".supercall = false;"));
  39646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39647. $ctx1.sendIdx["nextPutAll:"]=13;
  39648. //>>excludeEnd("ctx");
  39649. $recv($13)._lf();
  39650. $14=$recv($13)._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  39651. return self;
  39652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39653. }, function($ctx1) {$ctx1.fill(self,"visitSuperSend:",{anIRSend:anIRSend},$globals.IRJSTranslator)});
  39654. //>>excludeEnd("ctx");
  39655. },
  39656. //>>excludeStart("ide", pragmas.excludeIdeData);
  39657. args: ["anIRSend"],
  39658. source: "visitSuperSend: anIRSend\x0a\x09self stream\x0a\x09\x09nextPutAll: '('; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = true, '; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'; lf;\x0a\x09\x09nextPutAll: self currentClass asJavascript;\x0a\x09\x09nextPutAll: '.superclass.fn.prototype.';\x0a\x09\x09nextPutAll: anIRSend selector asJavaScriptMethodName, '.apply(';\x0a\x09\x09nextPutAll: '$recv('.\x0a\x09self visit: anIRSend instructions first.\x0a\x09self stream nextPutAll: '), ['.\x0a\x09anIRSend instructions allButFirst\x0a\x09\x09do: [ :each | self visit: each ]\x0a\x09\x09separatedBy: [ self stream nextPutAll: ',' ].\x0a\x09self stream \x0a\x09\x09nextPutAll: ']));'; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias, '.supercall = false;'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'",
  39659. referencedClasses: [],
  39660. //>>excludeEnd("ide");
  39661. messageSends: ["nextPutAll:", "stream", "lf", ",", "alias", "scope", "asJavascript", "currentClass", "asJavaScriptMethodName", "selector", "visit:", "first", "instructions", "do:separatedBy:", "allButFirst"]
  39662. }),
  39663. $globals.IRJSTranslator);
  39664. $core.addClass('JSStream', $globals.Object, ['stream'], 'Compiler-IR');
  39665. $core.addMethod(
  39666. $core.method({
  39667. selector: "contents",
  39668. protocol: 'accessing',
  39669. fn: function (){
  39670. var self=this;
  39671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39672. return $core.withContext(function($ctx1) {
  39673. //>>excludeEnd("ctx");
  39674. var $1;
  39675. $1=$recv(self["@stream"])._contents();
  39676. return $1;
  39677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39678. }, function($ctx1) {$ctx1.fill(self,"contents",{},$globals.JSStream)});
  39679. //>>excludeEnd("ctx");
  39680. },
  39681. //>>excludeStart("ide", pragmas.excludeIdeData);
  39682. args: [],
  39683. source: "contents\x0a\x09^ stream contents",
  39684. referencedClasses: [],
  39685. //>>excludeEnd("ide");
  39686. messageSends: ["contents"]
  39687. }),
  39688. $globals.JSStream);
  39689. $core.addMethod(
  39690. $core.method({
  39691. selector: "initialize",
  39692. protocol: 'initialization',
  39693. fn: function (){
  39694. var self=this;
  39695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39696. return $core.withContext(function($ctx1) {
  39697. //>>excludeEnd("ctx");
  39698. (
  39699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39700. $ctx1.supercall = true,
  39701. //>>excludeEnd("ctx");
  39702. $globals.JSStream.superclass.fn.prototype._initialize.apply($recv(self), []));
  39703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39704. $ctx1.supercall = false;
  39705. //>>excludeEnd("ctx");;
  39706. self["@stream"]=""._writeStream();
  39707. return self;
  39708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39709. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.JSStream)});
  39710. //>>excludeEnd("ctx");
  39711. },
  39712. //>>excludeStart("ide", pragmas.excludeIdeData);
  39713. args: [],
  39714. source: "initialize\x0a\x09super initialize.\x0a\x09stream := '' writeStream.",
  39715. referencedClasses: [],
  39716. //>>excludeEnd("ide");
  39717. messageSends: ["initialize", "writeStream"]
  39718. }),
  39719. $globals.JSStream);
  39720. $core.addMethod(
  39721. $core.method({
  39722. selector: "lf",
  39723. protocol: 'streaming',
  39724. fn: function (){
  39725. var self=this;
  39726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39727. return $core.withContext(function($ctx1) {
  39728. //>>excludeEnd("ctx");
  39729. $recv(self["@stream"])._lf();
  39730. return self;
  39731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39732. }, function($ctx1) {$ctx1.fill(self,"lf",{},$globals.JSStream)});
  39733. //>>excludeEnd("ctx");
  39734. },
  39735. //>>excludeStart("ide", pragmas.excludeIdeData);
  39736. args: [],
  39737. source: "lf\x0a\x09stream lf",
  39738. referencedClasses: [],
  39739. //>>excludeEnd("ide");
  39740. messageSends: ["lf"]
  39741. }),
  39742. $globals.JSStream);
  39743. $core.addMethod(
  39744. $core.method({
  39745. selector: "nextPut:",
  39746. protocol: 'streaming',
  39747. fn: function (aString){
  39748. var self=this;
  39749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39750. return $core.withContext(function($ctx1) {
  39751. //>>excludeEnd("ctx");
  39752. $recv(self["@stream"])._nextPut_(aString);
  39753. return self;
  39754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39755. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{aString:aString},$globals.JSStream)});
  39756. //>>excludeEnd("ctx");
  39757. },
  39758. //>>excludeStart("ide", pragmas.excludeIdeData);
  39759. args: ["aString"],
  39760. source: "nextPut: aString\x0a\x09stream nextPut: aString",
  39761. referencedClasses: [],
  39762. //>>excludeEnd("ide");
  39763. messageSends: ["nextPut:"]
  39764. }),
  39765. $globals.JSStream);
  39766. $core.addMethod(
  39767. $core.method({
  39768. selector: "nextPutAll:",
  39769. protocol: 'streaming',
  39770. fn: function (aString){
  39771. var self=this;
  39772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39773. return $core.withContext(function($ctx1) {
  39774. //>>excludeEnd("ctx");
  39775. $recv(self["@stream"])._nextPutAll_(aString);
  39776. return self;
  39777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39778. }, function($ctx1) {$ctx1.fill(self,"nextPutAll:",{aString:aString},$globals.JSStream)});
  39779. //>>excludeEnd("ctx");
  39780. },
  39781. //>>excludeStart("ide", pragmas.excludeIdeData);
  39782. args: ["aString"],
  39783. source: "nextPutAll: aString\x0a\x09stream nextPutAll: aString",
  39784. referencedClasses: [],
  39785. //>>excludeEnd("ide");
  39786. messageSends: ["nextPutAll:"]
  39787. }),
  39788. $globals.JSStream);
  39789. $core.addMethod(
  39790. $core.method({
  39791. selector: "nextPutAssignment",
  39792. protocol: 'streaming',
  39793. fn: function (){
  39794. var self=this;
  39795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39796. return $core.withContext(function($ctx1) {
  39797. //>>excludeEnd("ctx");
  39798. $recv(self["@stream"])._nextPutAll_("=");
  39799. return self;
  39800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39801. }, function($ctx1) {$ctx1.fill(self,"nextPutAssignment",{},$globals.JSStream)});
  39802. //>>excludeEnd("ctx");
  39803. },
  39804. //>>excludeStart("ide", pragmas.excludeIdeData);
  39805. args: [],
  39806. source: "nextPutAssignment\x0a\x09stream nextPutAll: '='",
  39807. referencedClasses: [],
  39808. //>>excludeEnd("ide");
  39809. messageSends: ["nextPutAll:"]
  39810. }),
  39811. $globals.JSStream);
  39812. $core.addMethod(
  39813. $core.method({
  39814. selector: "nextPutBlockContextFor:during:",
  39815. protocol: 'streaming',
  39816. fn: function (anIRClosure,aBlock){
  39817. var self=this;
  39818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39819. return $core.withContext(function($ctx1) {
  39820. //>>excludeEnd("ctx");
  39821. var $1,$2,$6,$5,$4,$3,$7,$11,$10,$9,$8,$15,$14,$13,$12,$16,$17,$23,$22,$21,$20,$19,$18,$24;
  39822. $1=$recv(anIRClosure)._requiresSmalltalkContext();
  39823. if(!$core.assert($1)){
  39824. $2=$recv(aBlock)._value();
  39825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39826. $ctx1.sendIdx["value"]=1;
  39827. //>>excludeEnd("ctx");
  39828. return $2;
  39829. };
  39830. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  39831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39832. $ctx1.sendIdx["nextPutAll:"]=1;
  39833. //>>excludeEnd("ctx");
  39834. self._lf();
  39835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39836. $ctx1.sendIdx["lf"]=1;
  39837. //>>excludeEnd("ctx");
  39838. $6=$recv(anIRClosure)._scope();
  39839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39840. $ctx1.sendIdx["scope"]=1;
  39841. //>>excludeEnd("ctx");
  39842. $5=$recv($6)._alias();
  39843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39844. $ctx1.sendIdx["alias"]=1;
  39845. //>>excludeEnd("ctx");
  39846. $4="return $core.withContext(function(".__comma($5);
  39847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39848. $ctx1.sendIdx[","]=2;
  39849. //>>excludeEnd("ctx");
  39850. $3=$recv($4).__comma(") {");
  39851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39852. $ctx1.sendIdx[","]=1;
  39853. //>>excludeEnd("ctx");
  39854. self._nextPutAll_($3);
  39855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39856. $ctx1.sendIdx["nextPutAll:"]=2;
  39857. //>>excludeEnd("ctx");
  39858. self._lf();
  39859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39860. $ctx1.sendIdx["lf"]=2;
  39861. //>>excludeEnd("ctx");
  39862. self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  39863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39864. $ctx1.sendIdx["nextPutAll:"]=3;
  39865. //>>excludeEnd("ctx");
  39866. $7=self._lf();
  39867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39868. $ctx1.sendIdx["lf"]=3;
  39869. //>>excludeEnd("ctx");
  39870. $recv(aBlock)._value();
  39871. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  39872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39873. $ctx1.sendIdx["nextPutAll:"]=4;
  39874. //>>excludeEnd("ctx");
  39875. self._lf();
  39876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39877. $ctx1.sendIdx["lf"]=4;
  39878. //>>excludeEnd("ctx");
  39879. $11=$recv(anIRClosure)._scope();
  39880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39881. $ctx1.sendIdx["scope"]=2;
  39882. //>>excludeEnd("ctx");
  39883. $10=$recv($11)._alias();
  39884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39885. $ctx1.sendIdx["alias"]=2;
  39886. //>>excludeEnd("ctx");
  39887. $9="}, function(".__comma($10);
  39888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39889. $ctx1.sendIdx[","]=4;
  39890. //>>excludeEnd("ctx");
  39891. $8=$recv($9).__comma(") {");
  39892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39893. $ctx1.sendIdx[","]=3;
  39894. //>>excludeEnd("ctx");
  39895. self._nextPutAll_($8);
  39896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39897. $ctx1.sendIdx["nextPutAll:"]=5;
  39898. //>>excludeEnd("ctx");
  39899. $15=$recv(anIRClosure)._scope();
  39900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39901. $ctx1.sendIdx["scope"]=3;
  39902. //>>excludeEnd("ctx");
  39903. $14=$recv($15)._alias();
  39904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39905. $ctx1.sendIdx["alias"]=3;
  39906. //>>excludeEnd("ctx");
  39907. $13=$recv($14).__comma(".fillBlock({");
  39908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39909. $ctx1.sendIdx[","]=5;
  39910. //>>excludeEnd("ctx");
  39911. $12=self._nextPutAll_($13);
  39912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39913. $ctx1.sendIdx["nextPutAll:"]=6;
  39914. //>>excludeEnd("ctx");
  39915. $recv($recv(anIRClosure)._locals())._do_separatedBy_((function(each){
  39916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39917. return $core.withContext(function($ctx2) {
  39918. //>>excludeEnd("ctx");
  39919. $16=$recv(each)._asVariableName();
  39920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39921. $ctx2.sendIdx["asVariableName"]=1;
  39922. //>>excludeEnd("ctx");
  39923. self._nextPutAll_($16);
  39924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39925. $ctx2.sendIdx["nextPutAll:"]=7;
  39926. //>>excludeEnd("ctx");
  39927. self._nextPutAll_(":");
  39928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39929. $ctx2.sendIdx["nextPutAll:"]=8;
  39930. //>>excludeEnd("ctx");
  39931. $17=self._nextPutAll_($recv(each)._asVariableName());
  39932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39933. $ctx2.sendIdx["nextPutAll:"]=9;
  39934. //>>excludeEnd("ctx");
  39935. return $17;
  39936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39937. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  39938. //>>excludeEnd("ctx");
  39939. }),(function(){
  39940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39941. return $core.withContext(function($ctx2) {
  39942. //>>excludeEnd("ctx");
  39943. return self._nextPutAll_(",");
  39944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39945. $ctx2.sendIdx["nextPutAll:"]=10;
  39946. //>>excludeEnd("ctx");
  39947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39948. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  39949. //>>excludeEnd("ctx");
  39950. }));
  39951. self._nextPutAll_("},");
  39952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39953. $ctx1.sendIdx["nextPutAll:"]=11;
  39954. //>>excludeEnd("ctx");
  39955. $23=$recv(anIRClosure)._scope();
  39956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39957. $ctx1.sendIdx["scope"]=4;
  39958. //>>excludeEnd("ctx");
  39959. $22=$recv($23)._outerScope();
  39960. $21=$recv($22)._alias();
  39961. $20=$recv($21).__comma(",");
  39962. $19=$recv($20).__comma($recv($recv($recv(anIRClosure)._scope())._blockIndex())._asString());
  39963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39964. $ctx1.sendIdx[","]=7;
  39965. //>>excludeEnd("ctx");
  39966. $18=$recv($19).__comma(")});");
  39967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39968. $ctx1.sendIdx[","]=6;
  39969. //>>excludeEnd("ctx");
  39970. self._nextPutAll_($18);
  39971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39972. $ctx1.sendIdx["nextPutAll:"]=12;
  39973. //>>excludeEnd("ctx");
  39974. self._lf();
  39975. $24=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  39976. return self;
  39977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39978. }, function($ctx1) {$ctx1.fill(self,"nextPutBlockContextFor:during:",{anIRClosure:anIRClosure,aBlock:aBlock},$globals.JSStream)});
  39979. //>>excludeEnd("ctx");
  39980. },
  39981. //>>excludeStart("ide", pragmas.excludeIdeData);
  39982. args: ["anIRClosure", "aBlock"],
  39983. source: "nextPutBlockContextFor: anIRClosure during: aBlock\x0a\x09anIRClosure requiresSmalltalkContext ifFalse: [ ^ aBlock value ].\x0a\x09self\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'return $core.withContext(function(', anIRClosure scope alias, ') {';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);';\x0a\x09\x09lf.\x0a\x09\x0a\x09aBlock value.\x0a\x09\x0a\x09self\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '}, function(', anIRClosure scope alias, ') {';\x0a\x09\x09nextPutAll: anIRClosure scope alias, '.fillBlock({'.\x0a\x09\x0a\x09anIRClosure locals\x0a\x09\x09do: [ :each |\x0a\x09\x09\x09self\x0a\x09\x09\x09\x09nextPutAll: each asVariableName;\x0a\x09\x09\x09\x09nextPutAll: ':';\x0a\x09\x09\x09\x09nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ self nextPutAll: ',' ].\x0a\x09\x0a\x09self\x0a\x09\x09nextPutAll: '},';\x0a\x09\x09nextPutAll: anIRClosure scope outerScope alias, ',', anIRClosure scope blockIndex asString, ')});';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'",
  39984. referencedClasses: [],
  39985. //>>excludeEnd("ide");
  39986. messageSends: ["ifFalse:", "requiresSmalltalkContext", "value", "nextPutAll:", "lf", ",", "alias", "scope", "do:separatedBy:", "locals", "asVariableName", "outerScope", "asString", "blockIndex"]
  39987. }),
  39988. $globals.JSStream);
  39989. $core.addMethod(
  39990. $core.method({
  39991. selector: "nextPutClassRefFunction:",
  39992. protocol: 'streaming',
  39993. fn: function (aString){
  39994. var self=this;
  39995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  39996. return $core.withContext(function($ctx1) {
  39997. //>>excludeEnd("ctx");
  39998. var $1,$2;
  39999. $1=self["@stream"];
  40000. $recv($1)._nextPutAll_("function $");
  40001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40002. $ctx1.sendIdx["nextPutAll:"]=1;
  40003. //>>excludeEnd("ctx");
  40004. $recv($1)._nextPutAll_(aString);
  40005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40006. $ctx1.sendIdx["nextPutAll:"]=2;
  40007. //>>excludeEnd("ctx");
  40008. $recv($1)._nextPutAll_("(){return $globals.");
  40009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40010. $ctx1.sendIdx["nextPutAll:"]=3;
  40011. //>>excludeEnd("ctx");
  40012. $recv($1)._nextPutAll_(aString);
  40013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40014. $ctx1.sendIdx["nextPutAll:"]=4;
  40015. //>>excludeEnd("ctx");
  40016. $recv($1)._nextPutAll_("||(typeof ");
  40017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40018. $ctx1.sendIdx["nextPutAll:"]=5;
  40019. //>>excludeEnd("ctx");
  40020. $recv($1)._nextPutAll_(aString);
  40021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40022. $ctx1.sendIdx["nextPutAll:"]=6;
  40023. //>>excludeEnd("ctx");
  40024. $recv($1)._nextPutAll_("==\x22undefined\x22?nil:");
  40025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40026. $ctx1.sendIdx["nextPutAll:"]=7;
  40027. //>>excludeEnd("ctx");
  40028. $recv($1)._nextPutAll_(aString);
  40029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40030. $ctx1.sendIdx["nextPutAll:"]=8;
  40031. //>>excludeEnd("ctx");
  40032. $recv($1)._nextPutAll_(")}");
  40033. $2=$recv($1)._lf();
  40034. return self;
  40035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40036. }, function($ctx1) {$ctx1.fill(self,"nextPutClassRefFunction:",{aString:aString},$globals.JSStream)});
  40037. //>>excludeEnd("ctx");
  40038. },
  40039. //>>excludeStart("ide", pragmas.excludeIdeData);
  40040. args: ["aString"],
  40041. source: "nextPutClassRefFunction: aString\x0a\x09\x22Creates an inner function $aString into method and called as `$Foo()`whenever the global is accessed.\x0a\x09This ensures that undefined global access will answer `nil`\x22\x0a\x09\x0a\x09stream\x0a\x09\x09nextPutAll: 'function $';\x0a\x09\x09nextPutAll: aString;\x0a\x09\x09nextPutAll: '(){return $globals.';\x0a\x09\x09nextPutAll: aString;\x0a\x09\x09nextPutAll: '||(typeof ';\x0a\x09\x09nextPutAll: aString;\x0a\x09\x09nextPutAll: '==\x22undefined\x22?nil:';\x0a\x09\x09nextPutAll: aString;\x0a\x09\x09nextPutAll: ')}';\x0a\x09\x09lf",
  40042. referencedClasses: [],
  40043. //>>excludeEnd("ide");
  40044. messageSends: ["nextPutAll:", "lf"]
  40045. }),
  40046. $globals.JSStream);
  40047. $core.addMethod(
  40048. $core.method({
  40049. selector: "nextPutClosureWith:arguments:",
  40050. protocol: 'streaming',
  40051. fn: function (aBlock,anArray){
  40052. var self=this;
  40053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40054. return $core.withContext(function($ctx1) {
  40055. //>>excludeEnd("ctx");
  40056. var $1,$2,$3,$4;
  40057. $recv(self["@stream"])._nextPutAll_("(function(");
  40058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40059. $ctx1.sendIdx["nextPutAll:"]=1;
  40060. //>>excludeEnd("ctx");
  40061. $recv(anArray)._do_separatedBy_((function(each){
  40062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40063. return $core.withContext(function($ctx2) {
  40064. //>>excludeEnd("ctx");
  40065. return $recv(self["@stream"])._nextPutAll_($recv(each)._asVariableName());
  40066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40067. $ctx2.sendIdx["nextPutAll:"]=2;
  40068. //>>excludeEnd("ctx");
  40069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40070. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40071. //>>excludeEnd("ctx");
  40072. }),(function(){
  40073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40074. return $core.withContext(function($ctx2) {
  40075. //>>excludeEnd("ctx");
  40076. return $recv(self["@stream"])._nextPut_(",");
  40077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40078. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  40079. //>>excludeEnd("ctx");
  40080. }));
  40081. $1=self["@stream"];
  40082. $recv($1)._nextPutAll_("){");
  40083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40084. $ctx1.sendIdx["nextPutAll:"]=3;
  40085. //>>excludeEnd("ctx");
  40086. $2=$recv($1)._lf();
  40087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40088. $ctx1.sendIdx["lf"]=1;
  40089. //>>excludeEnd("ctx");
  40090. $recv(aBlock)._value();
  40091. $3=self["@stream"];
  40092. $recv($3)._lf();
  40093. $4=$recv($3)._nextPutAll_("})");
  40094. return self;
  40095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40096. }, function($ctx1) {$ctx1.fill(self,"nextPutClosureWith:arguments:",{aBlock:aBlock,anArray:anArray},$globals.JSStream)});
  40097. //>>excludeEnd("ctx");
  40098. },
  40099. //>>excludeStart("ide", pragmas.excludeIdeData);
  40100. args: ["aBlock", "anArray"],
  40101. source: "nextPutClosureWith: aBlock arguments: anArray\x0a\x09stream nextPutAll: '(function('.\x0a\x09anArray\x0a\x09\x09do: [ :each | stream nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ stream nextPut: ',' ].\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09aBlock value.\x0a\x09stream lf; nextPutAll: '})'",
  40102. referencedClasses: [],
  40103. //>>excludeEnd("ide");
  40104. messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "value"]
  40105. }),
  40106. $globals.JSStream);
  40107. $core.addMethod(
  40108. $core.method({
  40109. selector: "nextPutContextFor:during:",
  40110. protocol: 'streaming',
  40111. fn: function (aMethod,aBlock){
  40112. var self=this;
  40113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40114. return $core.withContext(function($ctx1) {
  40115. //>>excludeEnd("ctx");
  40116. var $1,$2,$6,$5,$4,$3,$7,$12,$11,$10,$9,$8,$16,$15,$14,$13,$17,$18,$19;
  40117. $1=$recv(aMethod)._requiresSmalltalkContext();
  40118. if(!$core.assert($1)){
  40119. $2=$recv(aBlock)._value();
  40120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40121. $ctx1.sendIdx["value"]=1;
  40122. //>>excludeEnd("ctx");
  40123. return $2;
  40124. };
  40125. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40127. $ctx1.sendIdx["nextPutAll:"]=1;
  40128. //>>excludeEnd("ctx");
  40129. self._lf();
  40130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40131. $ctx1.sendIdx["lf"]=1;
  40132. //>>excludeEnd("ctx");
  40133. $6=$recv(aMethod)._scope();
  40134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40135. $ctx1.sendIdx["scope"]=1;
  40136. //>>excludeEnd("ctx");
  40137. $5=$recv($6)._alias();
  40138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40139. $ctx1.sendIdx["alias"]=1;
  40140. //>>excludeEnd("ctx");
  40141. $4="return $core.withContext(function(".__comma($5);
  40142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40143. $ctx1.sendIdx[","]=2;
  40144. //>>excludeEnd("ctx");
  40145. $3=$recv($4).__comma(") {");
  40146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40147. $ctx1.sendIdx[","]=1;
  40148. //>>excludeEnd("ctx");
  40149. self._nextPutAll_($3);
  40150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40151. $ctx1.sendIdx["nextPutAll:"]=2;
  40152. //>>excludeEnd("ctx");
  40153. self._lf();
  40154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40155. $ctx1.sendIdx["lf"]=2;
  40156. //>>excludeEnd("ctx");
  40157. self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40159. $ctx1.sendIdx["nextPutAll:"]=3;
  40160. //>>excludeEnd("ctx");
  40161. $7=self._lf();
  40162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40163. $ctx1.sendIdx["lf"]=3;
  40164. //>>excludeEnd("ctx");
  40165. $recv(aBlock)._value();
  40166. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40168. $ctx1.sendIdx["nextPutAll:"]=4;
  40169. //>>excludeEnd("ctx");
  40170. self._lf();
  40171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40172. $ctx1.sendIdx["lf"]=4;
  40173. //>>excludeEnd("ctx");
  40174. $12=$recv(aMethod)._scope();
  40175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40176. $ctx1.sendIdx["scope"]=2;
  40177. //>>excludeEnd("ctx");
  40178. $11=$recv($12)._alias();
  40179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40180. $ctx1.sendIdx["alias"]=2;
  40181. //>>excludeEnd("ctx");
  40182. $10="}, function(".__comma($11);
  40183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40184. $ctx1.sendIdx[","]=5;
  40185. //>>excludeEnd("ctx");
  40186. $9=$recv($10).__comma(") {");
  40187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40188. $ctx1.sendIdx[","]=4;
  40189. //>>excludeEnd("ctx");
  40190. $8=$recv($9).__comma($recv($recv(aMethod)._scope())._alias());
  40191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40192. $ctx1.sendIdx[","]=3;
  40193. //>>excludeEnd("ctx");
  40194. self._nextPutAll_($8);
  40195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40196. $ctx1.sendIdx["nextPutAll:"]=5;
  40197. //>>excludeEnd("ctx");
  40198. $16=$recv($recv(aMethod)._selector())._asJavascript();
  40199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40200. $ctx1.sendIdx["asJavascript"]=1;
  40201. //>>excludeEnd("ctx");
  40202. $15=".fill(self,".__comma($16);
  40203. $14=$recv($15).__comma(",{");
  40204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40205. $ctx1.sendIdx[","]=6;
  40206. //>>excludeEnd("ctx");
  40207. $13=self._nextPutAll_($14);
  40208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40209. $ctx1.sendIdx["nextPutAll:"]=6;
  40210. //>>excludeEnd("ctx");
  40211. $recv($recv(aMethod)._locals())._do_separatedBy_((function(each){
  40212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40213. return $core.withContext(function($ctx2) {
  40214. //>>excludeEnd("ctx");
  40215. $17=$recv(each)._asVariableName();
  40216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40217. $ctx2.sendIdx["asVariableName"]=1;
  40218. //>>excludeEnd("ctx");
  40219. self._nextPutAll_($17);
  40220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40221. $ctx2.sendIdx["nextPutAll:"]=7;
  40222. //>>excludeEnd("ctx");
  40223. self._nextPutAll_(":");
  40224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40225. $ctx2.sendIdx["nextPutAll:"]=8;
  40226. //>>excludeEnd("ctx");
  40227. $18=self._nextPutAll_($recv(each)._asVariableName());
  40228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40229. $ctx2.sendIdx["nextPutAll:"]=9;
  40230. //>>excludeEnd("ctx");
  40231. return $18;
  40232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40233. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  40234. //>>excludeEnd("ctx");
  40235. }),(function(){
  40236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40237. return $core.withContext(function($ctx2) {
  40238. //>>excludeEnd("ctx");
  40239. return self._nextPutAll_(",");
  40240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40241. $ctx2.sendIdx["nextPutAll:"]=10;
  40242. //>>excludeEnd("ctx");
  40243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40244. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  40245. //>>excludeEnd("ctx");
  40246. }));
  40247. self._nextPutAll_("},");
  40248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40249. $ctx1.sendIdx["nextPutAll:"]=11;
  40250. //>>excludeEnd("ctx");
  40251. self._nextPutAll_($recv($recv(aMethod)._theClass())._asJavascript());
  40252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40253. $ctx1.sendIdx["nextPutAll:"]=12;
  40254. //>>excludeEnd("ctx");
  40255. self._nextPutAll_(")});");
  40256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40257. $ctx1.sendIdx["nextPutAll:"]=13;
  40258. //>>excludeEnd("ctx");
  40259. self._lf();
  40260. $19=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22);");
  40261. return self;
  40262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40263. }, function($ctx1) {$ctx1.fill(self,"nextPutContextFor:during:",{aMethod:aMethod,aBlock:aBlock},$globals.JSStream)});
  40264. //>>excludeEnd("ctx");
  40265. },
  40266. //>>excludeStart("ide", pragmas.excludeIdeData);
  40267. args: ["aMethod", "aBlock"],
  40268. source: "nextPutContextFor: aMethod during: aBlock\x0a\x09aMethod requiresSmalltalkContext ifFalse: [ ^ aBlock value ].\x0a\x09\x0a\x09self\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'return $core.withContext(function(', aMethod scope alias, ') {';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);';\x0a\x09\x09lf.\x0a\x0a\x09aBlock value.\x0a\x09\x0a\x09self\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '}, function(', aMethod scope alias, ') {', aMethod scope alias;\x0a\x09\x09nextPutAll: '.fill(self,', aMethod selector asJavascript, ',{'.\x0a\x0a\x09aMethod locals\x0a\x09\x09do: [ :each |\x0a\x09\x09\x09self\x0a\x09\x09\x09\x09nextPutAll: each asVariableName;\x0a\x09\x09\x09\x09nextPutAll: ':';\x0a\x09\x09\x09\x09nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ self nextPutAll: ',' ].\x0a\x09\x0a\x09self\x0a\x09\x09nextPutAll: '},';\x0a\x09\x09nextPutAll: aMethod theClass asJavascript;\x0a\x09\x09nextPutAll: ')});';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22);'",
  40269. referencedClasses: [],
  40270. //>>excludeEnd("ide");
  40271. messageSends: ["ifFalse:", "requiresSmalltalkContext", "value", "nextPutAll:", "lf", ",", "alias", "scope", "asJavascript", "selector", "do:separatedBy:", "locals", "asVariableName", "theClass"]
  40272. }),
  40273. $globals.JSStream);
  40274. $core.addMethod(
  40275. $core.method({
  40276. selector: "nextPutFunctionWith:arguments:",
  40277. protocol: 'streaming',
  40278. fn: function (aBlock,anArray){
  40279. var self=this;
  40280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40281. return $core.withContext(function($ctx1) {
  40282. //>>excludeEnd("ctx");
  40283. var $1,$2,$3,$4,$5,$6;
  40284. $recv(self["@stream"])._nextPutAll_("fn: function(");
  40285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40286. $ctx1.sendIdx["nextPutAll:"]=1;
  40287. //>>excludeEnd("ctx");
  40288. $recv(anArray)._do_separatedBy_((function(each){
  40289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40290. return $core.withContext(function($ctx2) {
  40291. //>>excludeEnd("ctx");
  40292. return $recv(self["@stream"])._nextPutAll_($recv(each)._asVariableName());
  40293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40294. $ctx2.sendIdx["nextPutAll:"]=2;
  40295. //>>excludeEnd("ctx");
  40296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40297. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40298. //>>excludeEnd("ctx");
  40299. }),(function(){
  40300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40301. return $core.withContext(function($ctx2) {
  40302. //>>excludeEnd("ctx");
  40303. return $recv(self["@stream"])._nextPut_(",");
  40304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40305. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  40306. //>>excludeEnd("ctx");
  40307. }));
  40308. $1=self["@stream"];
  40309. $recv($1)._nextPutAll_("){");
  40310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40311. $ctx1.sendIdx["nextPutAll:"]=3;
  40312. //>>excludeEnd("ctx");
  40313. $2=$recv($1)._lf();
  40314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40315. $ctx1.sendIdx["lf"]=1;
  40316. //>>excludeEnd("ctx");
  40317. $3=self["@stream"];
  40318. $recv($3)._nextPutAll_("var self=this;");
  40319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40320. $ctx1.sendIdx["nextPutAll:"]=4;
  40321. //>>excludeEnd("ctx");
  40322. $4=$recv($3)._lf();
  40323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40324. $ctx1.sendIdx["lf"]=2;
  40325. //>>excludeEnd("ctx");
  40326. $recv(aBlock)._value();
  40327. $5=self["@stream"];
  40328. $recv($5)._lf();
  40329. $6=$recv($5)._nextPutAll_("}");
  40330. return self;
  40331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40332. }, function($ctx1) {$ctx1.fill(self,"nextPutFunctionWith:arguments:",{aBlock:aBlock,anArray:anArray},$globals.JSStream)});
  40333. //>>excludeEnd("ctx");
  40334. },
  40335. //>>excludeStart("ide", pragmas.excludeIdeData);
  40336. args: ["aBlock", "anArray"],
  40337. source: "nextPutFunctionWith: aBlock arguments: anArray\x0a\x09stream nextPutAll: 'fn: function('.\x0a\x09anArray\x0a\x09\x09do: [ :each | stream nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ stream nextPut: ',' ].\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09stream nextPutAll: 'var self=this;'; lf.\x0a\x09aBlock value.\x0a\x09stream lf; nextPutAll: '}'",
  40338. referencedClasses: [],
  40339. //>>excludeEnd("ide");
  40340. messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "value"]
  40341. }),
  40342. $globals.JSStream);
  40343. $core.addMethod(
  40344. $core.method({
  40345. selector: "nextPutIf:with:",
  40346. protocol: 'streaming',
  40347. fn: function (aBlock,anotherBlock){
  40348. var self=this;
  40349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40350. return $core.withContext(function($ctx1) {
  40351. //>>excludeEnd("ctx");
  40352. var $1,$2;
  40353. $recv(self["@stream"])._nextPutAll_("if(");
  40354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40355. $ctx1.sendIdx["nextPutAll:"]=1;
  40356. //>>excludeEnd("ctx");
  40357. $recv(aBlock)._value();
  40358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40359. $ctx1.sendIdx["value"]=1;
  40360. //>>excludeEnd("ctx");
  40361. $1=self["@stream"];
  40362. $recv($1)._nextPutAll_("){");
  40363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40364. $ctx1.sendIdx["nextPutAll:"]=2;
  40365. //>>excludeEnd("ctx");
  40366. $2=$recv($1)._lf();
  40367. $recv(anotherBlock)._value();
  40368. $recv(self["@stream"])._nextPutAll_("}");
  40369. return self;
  40370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40371. }, function($ctx1) {$ctx1.fill(self,"nextPutIf:with:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.JSStream)});
  40372. //>>excludeEnd("ctx");
  40373. },
  40374. //>>excludeStart("ide", pragmas.excludeIdeData);
  40375. args: ["aBlock", "anotherBlock"],
  40376. source: "nextPutIf: aBlock with: anotherBlock\x0a\x09stream nextPutAll: 'if('.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09anotherBlock value.\x0a\x09stream nextPutAll: '}'",
  40377. referencedClasses: [],
  40378. //>>excludeEnd("ide");
  40379. messageSends: ["nextPutAll:", "value", "lf"]
  40380. }),
  40381. $globals.JSStream);
  40382. $core.addMethod(
  40383. $core.method({
  40384. selector: "nextPutIfElse:with:with:",
  40385. protocol: 'streaming',
  40386. fn: function (aBlock,ifBlock,elseBlock){
  40387. var self=this;
  40388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40389. return $core.withContext(function($ctx1) {
  40390. //>>excludeEnd("ctx");
  40391. var $1,$2,$3,$4;
  40392. $recv(self["@stream"])._nextPutAll_("if(");
  40393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40394. $ctx1.sendIdx["nextPutAll:"]=1;
  40395. //>>excludeEnd("ctx");
  40396. $recv(aBlock)._value();
  40397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40398. $ctx1.sendIdx["value"]=1;
  40399. //>>excludeEnd("ctx");
  40400. $1=self["@stream"];
  40401. $recv($1)._nextPutAll_("){");
  40402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40403. $ctx1.sendIdx["nextPutAll:"]=2;
  40404. //>>excludeEnd("ctx");
  40405. $2=$recv($1)._lf();
  40406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40407. $ctx1.sendIdx["lf"]=1;
  40408. //>>excludeEnd("ctx");
  40409. $recv(ifBlock)._value();
  40410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40411. $ctx1.sendIdx["value"]=2;
  40412. //>>excludeEnd("ctx");
  40413. $3=self["@stream"];
  40414. $recv($3)._nextPutAll_("} else {");
  40415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40416. $ctx1.sendIdx["nextPutAll:"]=3;
  40417. //>>excludeEnd("ctx");
  40418. $4=$recv($3)._lf();
  40419. $recv(elseBlock)._value();
  40420. $recv(self["@stream"])._nextPutAll_("}");
  40421. return self;
  40422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40423. }, function($ctx1) {$ctx1.fill(self,"nextPutIfElse:with:with:",{aBlock:aBlock,ifBlock:ifBlock,elseBlock:elseBlock},$globals.JSStream)});
  40424. //>>excludeEnd("ctx");
  40425. },
  40426. //>>excludeStart("ide", pragmas.excludeIdeData);
  40427. args: ["aBlock", "ifBlock", "elseBlock"],
  40428. source: "nextPutIfElse: aBlock with: ifBlock with: elseBlock\x0a\x09stream nextPutAll: 'if('.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09ifBlock value.\x0a\x09stream nextPutAll: '} else {'; lf.\x0a\x09elseBlock value.\x0a\x09stream nextPutAll: '}'",
  40429. referencedClasses: [],
  40430. //>>excludeEnd("ide");
  40431. messageSends: ["nextPutAll:", "value", "lf"]
  40432. }),
  40433. $globals.JSStream);
  40434. $core.addMethod(
  40435. $core.method({
  40436. selector: "nextPutMethodDeclaration:with:",
  40437. protocol: 'streaming',
  40438. fn: function (aMethod,aBlock){
  40439. var self=this;
  40440. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  40441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40442. return $core.withContext(function($ctx1) {
  40443. //>>excludeEnd("ctx");
  40444. var $1,$2,$5,$4,$3,$6,$9,$8,$7,$10,$11,$12,$15,$14,$13,$16,$19,$18,$17,$20,$23,$22,$21,$24,$25,$26;
  40445. $1=self["@stream"];
  40446. $recv($1)._nextPutAll_("$core.method({");
  40447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40448. $ctx1.sendIdx["nextPutAll:"]=1;
  40449. //>>excludeEnd("ctx");
  40450. $recv($1)._lf();
  40451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40452. $ctx1.sendIdx["lf"]=1;
  40453. //>>excludeEnd("ctx");
  40454. $2=$1;
  40455. $5=$recv($recv(aMethod)._selector())._asJavascript();
  40456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40457. $ctx1.sendIdx["asJavascript"]=1;
  40458. //>>excludeEnd("ctx");
  40459. $4="selector: ".__comma($5);
  40460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40461. $ctx1.sendIdx[","]=2;
  40462. //>>excludeEnd("ctx");
  40463. $3=$recv($4).__comma(",");
  40464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40465. $ctx1.sendIdx[","]=1;
  40466. //>>excludeEnd("ctx");
  40467. $recv($2)._nextPutAll_($3);
  40468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40469. $ctx1.sendIdx["nextPutAll:"]=2;
  40470. //>>excludeEnd("ctx");
  40471. $recv($1)._lf();
  40472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40473. $ctx1.sendIdx["lf"]=2;
  40474. //>>excludeEnd("ctx");
  40475. $6=$1;
  40476. $9=$recv($recv(aMethod)._source())._asJavascript();
  40477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40478. $ctx1.sendIdx["asJavascript"]=2;
  40479. //>>excludeEnd("ctx");
  40480. $8="source: ".__comma($9);
  40481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40482. $ctx1.sendIdx[","]=4;
  40483. //>>excludeEnd("ctx");
  40484. $7=$recv($8).__comma(",");
  40485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40486. $ctx1.sendIdx[","]=3;
  40487. //>>excludeEnd("ctx");
  40488. $recv($6)._nextPutAll_($7);
  40489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40490. $ctx1.sendIdx["nextPutAll:"]=3;
  40491. //>>excludeEnd("ctx");
  40492. $10=$recv($1)._lf();
  40493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40494. $ctx1.sendIdx["lf"]=3;
  40495. //>>excludeEnd("ctx");
  40496. $recv(aBlock)._value();
  40497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40498. $ctx1.sendIdx["value"]=1;
  40499. //>>excludeEnd("ctx");
  40500. $11=self["@stream"];
  40501. $12=$11;
  40502. $15=$recv($String())._lf();
  40503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40504. $ctx1.sendIdx["lf"]=4;
  40505. //>>excludeEnd("ctx");
  40506. $14=",".__comma($15);
  40507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40508. $ctx1.sendIdx[","]=6;
  40509. //>>excludeEnd("ctx");
  40510. $13=$recv($14).__comma("messageSends: ");
  40511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40512. $ctx1.sendIdx[","]=5;
  40513. //>>excludeEnd("ctx");
  40514. $recv($12)._nextPutAll_($13);
  40515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40516. $ctx1.sendIdx["nextPutAll:"]=4;
  40517. //>>excludeEnd("ctx");
  40518. $16=$11;
  40519. $19=$recv($recv(aMethod)._messageSends())._asArray();
  40520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40521. $ctx1.sendIdx["asArray"]=1;
  40522. //>>excludeEnd("ctx");
  40523. $18=$recv($19)._asJavascript();
  40524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40525. $ctx1.sendIdx["asJavascript"]=3;
  40526. //>>excludeEnd("ctx");
  40527. $17=$recv($18).__comma(",");
  40528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40529. $ctx1.sendIdx[","]=7;
  40530. //>>excludeEnd("ctx");
  40531. $recv($16)._nextPutAll_($17);
  40532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40533. $ctx1.sendIdx["nextPutAll:"]=5;
  40534. //>>excludeEnd("ctx");
  40535. $recv($11)._lf();
  40536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40537. $ctx1.sendIdx["lf"]=5;
  40538. //>>excludeEnd("ctx");
  40539. $20=$11;
  40540. $23=$recv($recv($recv($recv(aMethod)._arguments())._collect_((function(each){
  40541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40542. return $core.withContext(function($ctx2) {
  40543. //>>excludeEnd("ctx");
  40544. return $recv(each)._value();
  40545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40546. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  40547. //>>excludeEnd("ctx");
  40548. })))._asArray())._asJavascript();
  40549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40550. $ctx1.sendIdx["asJavascript"]=4;
  40551. //>>excludeEnd("ctx");
  40552. $22="args: ".__comma($23);
  40553. $21=$recv($22).__comma(",");
  40554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40555. $ctx1.sendIdx[","]=8;
  40556. //>>excludeEnd("ctx");
  40557. $recv($20)._nextPutAll_($21);
  40558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40559. $ctx1.sendIdx["nextPutAll:"]=6;
  40560. //>>excludeEnd("ctx");
  40561. $recv($11)._lf();
  40562. $24=$recv($11)._nextPutAll_("referencedClasses: [");
  40563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40564. $ctx1.sendIdx["nextPutAll:"]=7;
  40565. //>>excludeEnd("ctx");
  40566. $recv($recv(aMethod)._classReferences())._do_separatedBy_((function(each){
  40567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40568. return $core.withContext(function($ctx2) {
  40569. //>>excludeEnd("ctx");
  40570. return $recv(self["@stream"])._nextPutAll_($recv(each)._asJavascript());
  40571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40572. $ctx2.sendIdx["nextPutAll:"]=8;
  40573. //>>excludeEnd("ctx");
  40574. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40575. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  40576. //>>excludeEnd("ctx");
  40577. }),(function(){
  40578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40579. return $core.withContext(function($ctx2) {
  40580. //>>excludeEnd("ctx");
  40581. return $recv(self["@stream"])._nextPutAll_(",");
  40582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40583. $ctx2.sendIdx["nextPutAll:"]=9;
  40584. //>>excludeEnd("ctx");
  40585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40586. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  40587. //>>excludeEnd("ctx");
  40588. }));
  40589. $25=self["@stream"];
  40590. $recv($25)._nextPutAll_("]");
  40591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40592. $ctx1.sendIdx["nextPutAll:"]=10;
  40593. //>>excludeEnd("ctx");
  40594. $26=$recv($25)._nextPutAll_("})");
  40595. return self;
  40596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40597. }, function($ctx1) {$ctx1.fill(self,"nextPutMethodDeclaration:with:",{aMethod:aMethod,aBlock:aBlock},$globals.JSStream)});
  40598. //>>excludeEnd("ctx");
  40599. },
  40600. //>>excludeStart("ide", pragmas.excludeIdeData);
  40601. args: ["aMethod", "aBlock"],
  40602. source: "nextPutMethodDeclaration: aMethod with: aBlock\x0a\x09stream\x0a\x09\x09nextPutAll: '$core.method({'; lf;\x0a\x09\x09nextPutAll: 'selector: ', aMethod selector asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'source: ', aMethod source asJavascript, ',';lf.\x0a\x09aBlock value.\x0a\x09stream\x0a\x09\x09nextPutAll: ',', String lf, 'messageSends: ';\x0a\x09\x09nextPutAll: aMethod messageSends asArray asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'args: ', (aMethod arguments collect: [ :each | each value ]) asArray asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'referencedClasses: ['.\x0a\x09aMethod classReferences\x0a\x09\x09do: [ :each | stream nextPutAll: each asJavascript ]\x0a\x09\x09separatedBy: [ stream nextPutAll: ',' ].\x0a\x09stream\x0a\x09\x09nextPutAll: ']';\x0a\x09\x09nextPutAll: '})'",
  40603. referencedClasses: ["String"],
  40604. //>>excludeEnd("ide");
  40605. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "source", "value", "asArray", "messageSends", "collect:", "arguments", "do:separatedBy:", "classReferences"]
  40606. }),
  40607. $globals.JSStream);
  40608. $core.addMethod(
  40609. $core.method({
  40610. selector: "nextPutNonLocalReturnHandlingWith:",
  40611. protocol: 'streaming',
  40612. fn: function (aBlock){
  40613. var self=this;
  40614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40615. return $core.withContext(function($ctx1) {
  40616. //>>excludeEnd("ctx");
  40617. var $1,$2,$3,$4;
  40618. $1=self["@stream"];
  40619. $recv($1)._nextPutAll_("var $early={};");
  40620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40621. $ctx1.sendIdx["nextPutAll:"]=1;
  40622. //>>excludeEnd("ctx");
  40623. $recv($1)._lf();
  40624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40625. $ctx1.sendIdx["lf"]=1;
  40626. //>>excludeEnd("ctx");
  40627. $recv($1)._nextPutAll_("try {");
  40628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40629. $ctx1.sendIdx["nextPutAll:"]=2;
  40630. //>>excludeEnd("ctx");
  40631. $2=$recv($1)._lf();
  40632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40633. $ctx1.sendIdx["lf"]=2;
  40634. //>>excludeEnd("ctx");
  40635. $recv(aBlock)._value();
  40636. $3=self["@stream"];
  40637. $recv($3)._nextPutAll_("}");
  40638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40639. $ctx1.sendIdx["nextPutAll:"]=3;
  40640. //>>excludeEnd("ctx");
  40641. $recv($3)._lf();
  40642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40643. $ctx1.sendIdx["lf"]=3;
  40644. //>>excludeEnd("ctx");
  40645. $recv($3)._nextPutAll_("catch(e) {if(e===$early)return e[0]; throw e}");
  40646. $4=$recv($3)._lf();
  40647. return self;
  40648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40649. }, function($ctx1) {$ctx1.fill(self,"nextPutNonLocalReturnHandlingWith:",{aBlock:aBlock},$globals.JSStream)});
  40650. //>>excludeEnd("ctx");
  40651. },
  40652. //>>excludeStart("ide", pragmas.excludeIdeData);
  40653. args: ["aBlock"],
  40654. source: "nextPutNonLocalReturnHandlingWith: aBlock\x0a\x09stream\x0a\x09\x09nextPutAll: 'var $early={};'; lf;\x0a\x09\x09nextPutAll: 'try {'; lf.\x0a\x09aBlock value.\x0a\x09stream\x0a\x09\x09nextPutAll: '}'; lf;\x0a\x09\x09nextPutAll: 'catch(e) {if(e===$early)return e[0]; throw e}'; lf",
  40655. referencedClasses: [],
  40656. //>>excludeEnd("ide");
  40657. messageSends: ["nextPutAll:", "lf", "value"]
  40658. }),
  40659. $globals.JSStream);
  40660. $core.addMethod(
  40661. $core.method({
  40662. selector: "nextPutNonLocalReturnWith:",
  40663. protocol: 'streaming',
  40664. fn: function (aBlock){
  40665. var self=this;
  40666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40667. return $core.withContext(function($ctx1) {
  40668. //>>excludeEnd("ctx");
  40669. $recv(self["@stream"])._nextPutAll_("throw $early=[");
  40670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40671. $ctx1.sendIdx["nextPutAll:"]=1;
  40672. //>>excludeEnd("ctx");
  40673. $recv(aBlock)._value();
  40674. $recv(self["@stream"])._nextPutAll_("]");
  40675. return self;
  40676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40677. }, function($ctx1) {$ctx1.fill(self,"nextPutNonLocalReturnWith:",{aBlock:aBlock},$globals.JSStream)});
  40678. //>>excludeEnd("ctx");
  40679. },
  40680. //>>excludeStart("ide", pragmas.excludeIdeData);
  40681. args: ["aBlock"],
  40682. source: "nextPutNonLocalReturnWith: aBlock\x0a\x09stream nextPutAll: 'throw $early=['.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: ']'",
  40683. referencedClasses: [],
  40684. //>>excludeEnd("ide");
  40685. messageSends: ["nextPutAll:", "value"]
  40686. }),
  40687. $globals.JSStream);
  40688. $core.addMethod(
  40689. $core.method({
  40690. selector: "nextPutReturn",
  40691. protocol: 'streaming',
  40692. fn: function (){
  40693. var self=this;
  40694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40695. return $core.withContext(function($ctx1) {
  40696. //>>excludeEnd("ctx");
  40697. $recv(self["@stream"])._nextPutAll_("return ");
  40698. return self;
  40699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40700. }, function($ctx1) {$ctx1.fill(self,"nextPutReturn",{},$globals.JSStream)});
  40701. //>>excludeEnd("ctx");
  40702. },
  40703. //>>excludeStart("ide", pragmas.excludeIdeData);
  40704. args: [],
  40705. source: "nextPutReturn\x0a\x09stream nextPutAll: 'return '",
  40706. referencedClasses: [],
  40707. //>>excludeEnd("ide");
  40708. messageSends: ["nextPutAll:"]
  40709. }),
  40710. $globals.JSStream);
  40711. $core.addMethod(
  40712. $core.method({
  40713. selector: "nextPutReturnWith:",
  40714. protocol: 'streaming',
  40715. fn: function (aBlock){
  40716. var self=this;
  40717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40718. return $core.withContext(function($ctx1) {
  40719. //>>excludeEnd("ctx");
  40720. self._nextPutReturn();
  40721. $recv(aBlock)._value();
  40722. return self;
  40723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40724. }, function($ctx1) {$ctx1.fill(self,"nextPutReturnWith:",{aBlock:aBlock},$globals.JSStream)});
  40725. //>>excludeEnd("ctx");
  40726. },
  40727. //>>excludeStart("ide", pragmas.excludeIdeData);
  40728. args: ["aBlock"],
  40729. source: "nextPutReturnWith: aBlock\x0a\x09self nextPutReturn.\x0a\x09aBlock value",
  40730. referencedClasses: [],
  40731. //>>excludeEnd("ide");
  40732. messageSends: ["nextPutReturn", "value"]
  40733. }),
  40734. $globals.JSStream);
  40735. $core.addMethod(
  40736. $core.method({
  40737. selector: "nextPutSendIndexFor:",
  40738. protocol: 'streaming',
  40739. fn: function (anIRSend){
  40740. var self=this;
  40741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40742. return $core.withContext(function($ctx1) {
  40743. //>>excludeEnd("ctx");
  40744. var $1;
  40745. self._nextPutAll_(";");
  40746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40747. $ctx1.sendIdx["nextPutAll:"]=1;
  40748. //>>excludeEnd("ctx");
  40749. self._lf();
  40750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40751. $ctx1.sendIdx["lf"]=1;
  40752. //>>excludeEnd("ctx");
  40753. self._nextPutAll_("//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);");
  40754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40755. $ctx1.sendIdx["nextPutAll:"]=2;
  40756. //>>excludeEnd("ctx");
  40757. self._lf();
  40758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40759. $ctx1.sendIdx["lf"]=2;
  40760. //>>excludeEnd("ctx");
  40761. self._nextPutAll_($recv($recv(anIRSend)._scope())._alias());
  40762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40763. $ctx1.sendIdx["nextPutAll:"]=3;
  40764. //>>excludeEnd("ctx");
  40765. self._nextPutAll_(".sendIdx[");
  40766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40767. $ctx1.sendIdx["nextPutAll:"]=4;
  40768. //>>excludeEnd("ctx");
  40769. self._nextPutAll_($recv($recv(anIRSend)._selector())._asJavascript());
  40770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40771. $ctx1.sendIdx["nextPutAll:"]=5;
  40772. //>>excludeEnd("ctx");
  40773. self._nextPutAll_("]=");
  40774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40775. $ctx1.sendIdx["nextPutAll:"]=6;
  40776. //>>excludeEnd("ctx");
  40777. self._nextPutAll_($recv($recv(anIRSend)._index())._asString());
  40778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40779. $ctx1.sendIdx["nextPutAll:"]=7;
  40780. //>>excludeEnd("ctx");
  40781. self._nextPutAll_(";");
  40782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40783. $ctx1.sendIdx["nextPutAll:"]=8;
  40784. //>>excludeEnd("ctx");
  40785. self._lf();
  40786. $1=self._nextPutAll_("//>>excludeEnd(\x22ctx\x22)");
  40787. return self;
  40788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40789. }, function($ctx1) {$ctx1.fill(self,"nextPutSendIndexFor:",{anIRSend:anIRSend},$globals.JSStream)});
  40790. //>>excludeEnd("ctx");
  40791. },
  40792. //>>excludeStart("ide", pragmas.excludeIdeData);
  40793. args: ["anIRSend"],
  40794. source: "nextPutSendIndexFor: anIRSend\x0a\x09self \x0a\x09\x09nextPutAll: ';'; lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ctx\x22, pragmas.excludeDebugContexts);'; lf;\x0a\x09\x09nextPutAll: anIRSend scope alias;\x0a\x09\x09nextPutAll: '.sendIdx[';\x0a\x09\x09nextPutAll: anIRSend selector asJavascript;\x0a\x09\x09nextPutAll: ']=';\x0a\x09\x09nextPutAll: anIRSend index asString;\x0a\x09\x09nextPutAll: ';'; lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ctx\x22)'",
  40795. referencedClasses: [],
  40796. //>>excludeEnd("ide");
  40797. messageSends: ["nextPutAll:", "lf", "alias", "scope", "asJavascript", "selector", "asString", "index"]
  40798. }),
  40799. $globals.JSStream);
  40800. $core.addMethod(
  40801. $core.method({
  40802. selector: "nextPutSequenceWith:",
  40803. protocol: 'streaming',
  40804. fn: function (aBlock){
  40805. var self=this;
  40806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40807. return $core.withContext(function($ctx1) {
  40808. //>>excludeEnd("ctx");
  40809. $recv(aBlock)._value();
  40810. return self;
  40811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40812. }, function($ctx1) {$ctx1.fill(self,"nextPutSequenceWith:",{aBlock:aBlock},$globals.JSStream)});
  40813. //>>excludeEnd("ctx");
  40814. },
  40815. //>>excludeStart("ide", pragmas.excludeIdeData);
  40816. args: ["aBlock"],
  40817. source: "nextPutSequenceWith: aBlock\x0a\x09\x22stream\x0a\x09\x09nextPutAll: 'switch($core.thisContext.pc){'; lf.\x22\x0a\x09aBlock value.\x0a\x09\x22stream\x0a\x09\x09nextPutAll: '};'; lf\x22",
  40818. referencedClasses: [],
  40819. //>>excludeEnd("ide");
  40820. messageSends: ["value"]
  40821. }),
  40822. $globals.JSStream);
  40823. $core.addMethod(
  40824. $core.method({
  40825. selector: "nextPutStatementWith:",
  40826. protocol: 'streaming',
  40827. fn: function (aBlock){
  40828. var self=this;
  40829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40830. return $core.withContext(function($ctx1) {
  40831. //>>excludeEnd("ctx");
  40832. var $1,$2;
  40833. $recv(aBlock)._value();
  40834. $1=self["@stream"];
  40835. $recv($1)._nextPutAll_(";");
  40836. $2=$recv($1)._lf();
  40837. return self;
  40838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40839. }, function($ctx1) {$ctx1.fill(self,"nextPutStatementWith:",{aBlock:aBlock},$globals.JSStream)});
  40840. //>>excludeEnd("ctx");
  40841. },
  40842. //>>excludeStart("ide", pragmas.excludeIdeData);
  40843. args: ["aBlock"],
  40844. source: "nextPutStatementWith: aBlock\x0a\x09aBlock value.\x0a\x09stream nextPutAll: ';'; lf",
  40845. referencedClasses: [],
  40846. //>>excludeEnd("ide");
  40847. messageSends: ["value", "nextPutAll:", "lf"]
  40848. }),
  40849. $globals.JSStream);
  40850. $core.addMethod(
  40851. $core.method({
  40852. selector: "nextPutVars:",
  40853. protocol: 'streaming',
  40854. fn: function (aCollection){
  40855. var self=this;
  40856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40857. return $core.withContext(function($ctx1) {
  40858. //>>excludeEnd("ctx");
  40859. var $1,$2;
  40860. var $early={};
  40861. try {
  40862. $recv(aCollection)._ifEmpty_((function(){
  40863. throw $early=[self];
  40864. }));
  40865. $recv(self["@stream"])._nextPutAll_("var ");
  40866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40867. $ctx1.sendIdx["nextPutAll:"]=1;
  40868. //>>excludeEnd("ctx");
  40869. $recv(aCollection)._do_separatedBy_((function(each){
  40870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40871. return $core.withContext(function($ctx2) {
  40872. //>>excludeEnd("ctx");
  40873. return $recv(self["@stream"])._nextPutAll_(each);
  40874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40875. $ctx2.sendIdx["nextPutAll:"]=2;
  40876. //>>excludeEnd("ctx");
  40877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40878. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  40879. //>>excludeEnd("ctx");
  40880. }),(function(){
  40881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40882. return $core.withContext(function($ctx2) {
  40883. //>>excludeEnd("ctx");
  40884. return $recv(self["@stream"])._nextPutAll_(",");
  40885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40886. $ctx2.sendIdx["nextPutAll:"]=3;
  40887. //>>excludeEnd("ctx");
  40888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40889. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  40890. //>>excludeEnd("ctx");
  40891. }));
  40892. $1=self["@stream"];
  40893. $recv($1)._nextPutAll_(";");
  40894. $2=$recv($1)._lf();
  40895. return self;
  40896. }
  40897. catch(e) {if(e===$early)return e[0]; throw e}
  40898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40899. }, function($ctx1) {$ctx1.fill(self,"nextPutVars:",{aCollection:aCollection},$globals.JSStream)});
  40900. //>>excludeEnd("ctx");
  40901. },
  40902. //>>excludeStart("ide", pragmas.excludeIdeData);
  40903. args: ["aCollection"],
  40904. source: "nextPutVars: aCollection\x0a\x09aCollection ifEmpty: [ ^ self ].\x0a\x09\x0a\x09stream nextPutAll: 'var '.\x0a\x09aCollection\x0a\x09\x09do: [ :each | stream nextPutAll: each ]\x0a\x09\x09separatedBy: [ stream nextPutAll: ',' ].\x0a\x09stream nextPutAll: ';'; lf",
  40905. referencedClasses: [],
  40906. //>>excludeEnd("ide");
  40907. messageSends: ["ifEmpty:", "nextPutAll:", "do:separatedBy:", "lf"]
  40908. }),
  40909. $globals.JSStream);
  40910. $core.addMethod(
  40911. $core.method({
  40912. selector: "appendToInstruction:",
  40913. protocol: '*Compiler-IR',
  40914. fn: function (anIRInstruction){
  40915. var self=this;
  40916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40917. return $core.withContext(function($ctx1) {
  40918. //>>excludeEnd("ctx");
  40919. $recv(anIRInstruction)._appendBlock_(self);
  40920. return self;
  40921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40922. }, function($ctx1) {$ctx1.fill(self,"appendToInstruction:",{anIRInstruction:anIRInstruction},$globals.BlockClosure)});
  40923. //>>excludeEnd("ctx");
  40924. },
  40925. //>>excludeStart("ide", pragmas.excludeIdeData);
  40926. args: ["anIRInstruction"],
  40927. source: "appendToInstruction: anIRInstruction\x0a\x09anIRInstruction appendBlock: self",
  40928. referencedClasses: [],
  40929. //>>excludeEnd("ide");
  40930. messageSends: ["appendBlock:"]
  40931. }),
  40932. $globals.BlockClosure);
  40933. });
  40934. define("amber_core/Compiler-Inlining", ["amber/boot", "amber_core/Compiler-IR", "amber_core/Kernel-Objects", "amber_core/Compiler-Core"], function($boot){
  40935. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  40936. var smalltalk=$core,_st=$recv,globals=$globals;
  40937. $core.addPackage('Compiler-Inlining');
  40938. $core.packages["Compiler-Inlining"].transport = {"type":"amd","amdNamespace":"amber_core"};
  40939. $core.addClass('IRInlinedAssignment', $globals.IRAssignment, [], 'Compiler-Inlining');
  40940. //>>excludeStart("ide", pragmas.excludeIdeData);
  40941. $globals.IRInlinedAssignment.comment="I represent an inlined assignment instruction.";
  40942. //>>excludeEnd("ide");
  40943. $core.addMethod(
  40944. $core.method({
  40945. selector: "accept:",
  40946. protocol: 'visiting',
  40947. fn: function (aVisitor){
  40948. var self=this;
  40949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40950. return $core.withContext(function($ctx1) {
  40951. //>>excludeEnd("ctx");
  40952. var $1;
  40953. $1=$recv(aVisitor)._visitIRInlinedAssignment_(self);
  40954. return $1;
  40955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40956. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedAssignment)});
  40957. //>>excludeEnd("ctx");
  40958. },
  40959. //>>excludeStart("ide", pragmas.excludeIdeData);
  40960. args: ["aVisitor"],
  40961. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInlinedAssignment: self",
  40962. referencedClasses: [],
  40963. //>>excludeEnd("ide");
  40964. messageSends: ["visitIRInlinedAssignment:"]
  40965. }),
  40966. $globals.IRInlinedAssignment);
  40967. $core.addMethod(
  40968. $core.method({
  40969. selector: "isInlined",
  40970. protocol: 'testing',
  40971. fn: function (){
  40972. var self=this;
  40973. return true;
  40974. },
  40975. //>>excludeStart("ide", pragmas.excludeIdeData);
  40976. args: [],
  40977. source: "isInlined\x0a\x09^ true",
  40978. referencedClasses: [],
  40979. //>>excludeEnd("ide");
  40980. messageSends: []
  40981. }),
  40982. $globals.IRInlinedAssignment);
  40983. $core.addClass('IRInlinedClosure', $globals.IRClosure, [], 'Compiler-Inlining');
  40984. //>>excludeStart("ide", pragmas.excludeIdeData);
  40985. $globals.IRInlinedClosure.comment="I represent an inlined closure instruction.";
  40986. //>>excludeEnd("ide");
  40987. $core.addMethod(
  40988. $core.method({
  40989. selector: "accept:",
  40990. protocol: 'visiting',
  40991. fn: function (aVisitor){
  40992. var self=this;
  40993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40994. return $core.withContext(function($ctx1) {
  40995. //>>excludeEnd("ctx");
  40996. $recv(aVisitor)._visitIRInlinedClosure_(self);
  40997. return self;
  40998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40999. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedClosure)});
  41000. //>>excludeEnd("ctx");
  41001. },
  41002. //>>excludeStart("ide", pragmas.excludeIdeData);
  41003. args: ["aVisitor"],
  41004. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedClosure: self",
  41005. referencedClasses: [],
  41006. //>>excludeEnd("ide");
  41007. messageSends: ["visitIRInlinedClosure:"]
  41008. }),
  41009. $globals.IRInlinedClosure);
  41010. $core.addMethod(
  41011. $core.method({
  41012. selector: "isInlined",
  41013. protocol: 'testing',
  41014. fn: function (){
  41015. var self=this;
  41016. return true;
  41017. },
  41018. //>>excludeStart("ide", pragmas.excludeIdeData);
  41019. args: [],
  41020. source: "isInlined\x0a\x09^ true",
  41021. referencedClasses: [],
  41022. //>>excludeEnd("ide");
  41023. messageSends: []
  41024. }),
  41025. $globals.IRInlinedClosure);
  41026. $core.addClass('IRInlinedReturn', $globals.IRReturn, [], 'Compiler-Inlining');
  41027. //>>excludeStart("ide", pragmas.excludeIdeData);
  41028. $globals.IRInlinedReturn.comment="I represent an inlined local return instruction.";
  41029. //>>excludeEnd("ide");
  41030. $core.addMethod(
  41031. $core.method({
  41032. selector: "accept:",
  41033. protocol: 'visiting',
  41034. fn: function (aVisitor){
  41035. var self=this;
  41036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41037. return $core.withContext(function($ctx1) {
  41038. //>>excludeEnd("ctx");
  41039. var $1;
  41040. $1=$recv(aVisitor)._visitIRInlinedReturn_(self);
  41041. return $1;
  41042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41043. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedReturn)});
  41044. //>>excludeEnd("ctx");
  41045. },
  41046. //>>excludeStart("ide", pragmas.excludeIdeData);
  41047. args: ["aVisitor"],
  41048. source: "accept: aVisitor\x0a\x09^ aVisitor visitIRInlinedReturn: self",
  41049. referencedClasses: [],
  41050. //>>excludeEnd("ide");
  41051. messageSends: ["visitIRInlinedReturn:"]
  41052. }),
  41053. $globals.IRInlinedReturn);
  41054. $core.addMethod(
  41055. $core.method({
  41056. selector: "isInlined",
  41057. protocol: 'testing',
  41058. fn: function (){
  41059. var self=this;
  41060. return true;
  41061. },
  41062. //>>excludeStart("ide", pragmas.excludeIdeData);
  41063. args: [],
  41064. source: "isInlined\x0a\x09^ true",
  41065. referencedClasses: [],
  41066. //>>excludeEnd("ide");
  41067. messageSends: []
  41068. }),
  41069. $globals.IRInlinedReturn);
  41070. $core.addClass('IRInlinedSend', $globals.IRSend, [], 'Compiler-Inlining');
  41071. //>>excludeStart("ide", pragmas.excludeIdeData);
  41072. $globals.IRInlinedSend.comment="I am the abstract super class of inlined message send instructions.";
  41073. //>>excludeEnd("ide");
  41074. $core.addMethod(
  41075. $core.method({
  41076. selector: "accept:",
  41077. protocol: 'visiting',
  41078. fn: function (aVisitor){
  41079. var self=this;
  41080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41081. return $core.withContext(function($ctx1) {
  41082. //>>excludeEnd("ctx");
  41083. $recv(aVisitor)._visitInlinedSend_(self);
  41084. return self;
  41085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41086. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedSend)});
  41087. //>>excludeEnd("ctx");
  41088. },
  41089. //>>excludeStart("ide", pragmas.excludeIdeData);
  41090. args: ["aVisitor"],
  41091. source: "accept: aVisitor\x0a\x09aVisitor visitInlinedSend: self",
  41092. referencedClasses: [],
  41093. //>>excludeEnd("ide");
  41094. messageSends: ["visitInlinedSend:"]
  41095. }),
  41096. $globals.IRInlinedSend);
  41097. $core.addMethod(
  41098. $core.method({
  41099. selector: "internalVariables",
  41100. protocol: 'accessing',
  41101. fn: function (){
  41102. var self=this;
  41103. var $1;
  41104. $1=[];
  41105. return $1;
  41106. },
  41107. //>>excludeStart("ide", pragmas.excludeIdeData);
  41108. args: [],
  41109. source: "internalVariables\x0a\x09\x22Answer a collection of internal variables required \x0a\x09to perform the inlining\x22\x0a\x09\x0a\x09^ #()",
  41110. referencedClasses: [],
  41111. //>>excludeEnd("ide");
  41112. messageSends: []
  41113. }),
  41114. $globals.IRInlinedSend);
  41115. $core.addMethod(
  41116. $core.method({
  41117. selector: "isInlined",
  41118. protocol: 'testing',
  41119. fn: function (){
  41120. var self=this;
  41121. return true;
  41122. },
  41123. //>>excludeStart("ide", pragmas.excludeIdeData);
  41124. args: [],
  41125. source: "isInlined\x0a\x09^ true",
  41126. referencedClasses: [],
  41127. //>>excludeEnd("ide");
  41128. messageSends: []
  41129. }),
  41130. $globals.IRInlinedSend);
  41131. $core.addClass('IRInlinedIfFalse', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  41132. //>>excludeStart("ide", pragmas.excludeIdeData);
  41133. $globals.IRInlinedIfFalse.comment="I represent an inlined `#ifFalse:` message send instruction.";
  41134. //>>excludeEnd("ide");
  41135. $core.addMethod(
  41136. $core.method({
  41137. selector: "accept:",
  41138. protocol: 'visiting',
  41139. fn: function (aVisitor){
  41140. var self=this;
  41141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41142. return $core.withContext(function($ctx1) {
  41143. //>>excludeEnd("ctx");
  41144. $recv(aVisitor)._visitIRInlinedIfFalse_(self);
  41145. return self;
  41146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41147. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfFalse)});
  41148. //>>excludeEnd("ctx");
  41149. },
  41150. //>>excludeStart("ide", pragmas.excludeIdeData);
  41151. args: ["aVisitor"],
  41152. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfFalse: self",
  41153. referencedClasses: [],
  41154. //>>excludeEnd("ide");
  41155. messageSends: ["visitIRInlinedIfFalse:"]
  41156. }),
  41157. $globals.IRInlinedIfFalse);
  41158. $core.addClass('IRInlinedIfNilIfNotNil', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  41159. //>>excludeStart("ide", pragmas.excludeIdeData);
  41160. $globals.IRInlinedIfNilIfNotNil.comment="I represent an inlined `#ifNil:ifNotNil:` message send instruction.";
  41161. //>>excludeEnd("ide");
  41162. $core.addMethod(
  41163. $core.method({
  41164. selector: "accept:",
  41165. protocol: 'visiting',
  41166. fn: function (aVisitor){
  41167. var self=this;
  41168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41169. return $core.withContext(function($ctx1) {
  41170. //>>excludeEnd("ctx");
  41171. $recv(aVisitor)._visitIRInlinedIfNilIfNotNil_(self);
  41172. return self;
  41173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41174. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfNilIfNotNil)});
  41175. //>>excludeEnd("ctx");
  41176. },
  41177. //>>excludeStart("ide", pragmas.excludeIdeData);
  41178. args: ["aVisitor"],
  41179. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfNilIfNotNil: self",
  41180. referencedClasses: [],
  41181. //>>excludeEnd("ide");
  41182. messageSends: ["visitIRInlinedIfNilIfNotNil:"]
  41183. }),
  41184. $globals.IRInlinedIfNilIfNotNil);
  41185. $core.addMethod(
  41186. $core.method({
  41187. selector: "internalVariables",
  41188. protocol: 'accessing',
  41189. fn: function (){
  41190. var self=this;
  41191. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  41192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41193. return $core.withContext(function($ctx1) {
  41194. //>>excludeEnd("ctx");
  41195. var $1;
  41196. $1=$recv($Array())._with_(self._receiverInternalVariable());
  41197. return $1;
  41198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41199. }, function($ctx1) {$ctx1.fill(self,"internalVariables",{},$globals.IRInlinedIfNilIfNotNil)});
  41200. //>>excludeEnd("ctx");
  41201. },
  41202. //>>excludeStart("ide", pragmas.excludeIdeData);
  41203. args: [],
  41204. source: "internalVariables\x0a\x09^ Array with: self receiverInternalVariable",
  41205. referencedClasses: ["Array"],
  41206. //>>excludeEnd("ide");
  41207. messageSends: ["with:", "receiverInternalVariable"]
  41208. }),
  41209. $globals.IRInlinedIfNilIfNotNil);
  41210. $core.addMethod(
  41211. $core.method({
  41212. selector: "receiverInternalVariable",
  41213. protocol: 'accessing',
  41214. fn: function (){
  41215. var self=this;
  41216. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  41217. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  41218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41219. return $core.withContext(function($ctx1) {
  41220. //>>excludeEnd("ctx");
  41221. var $2,$3,$1;
  41222. $2=$recv($IRVariable())._new();
  41223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41224. $ctx1.sendIdx["new"]=1;
  41225. //>>excludeEnd("ctx");
  41226. $recv($2)._variable_($recv($recv($AliasVar())._new())._name_(self._receiverInternalVariableName()));
  41227. $3=$recv($2)._yourself();
  41228. $1=$3;
  41229. return $1;
  41230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41231. }, function($ctx1) {$ctx1.fill(self,"receiverInternalVariable",{},$globals.IRInlinedIfNilIfNotNil)});
  41232. //>>excludeEnd("ctx");
  41233. },
  41234. //>>excludeStart("ide", pragmas.excludeIdeData);
  41235. args: [],
  41236. source: "receiverInternalVariable\x0a\x09^ IRVariable new\x0a\x09\x09variable: (AliasVar new name: self receiverInternalVariableName);\x0a\x09\x09yourself.",
  41237. referencedClasses: ["IRVariable", "AliasVar"],
  41238. //>>excludeEnd("ide");
  41239. messageSends: ["variable:", "new", "name:", "receiverInternalVariableName", "yourself"]
  41240. }),
  41241. $globals.IRInlinedIfNilIfNotNil);
  41242. $core.addMethod(
  41243. $core.method({
  41244. selector: "receiverInternalVariableName",
  41245. protocol: 'accessing',
  41246. fn: function (){
  41247. var self=this;
  41248. return "$receiver";
  41249. },
  41250. //>>excludeStart("ide", pragmas.excludeIdeData);
  41251. args: [],
  41252. source: "receiverInternalVariableName\x0a\x09^ '$receiver'",
  41253. referencedClasses: [],
  41254. //>>excludeEnd("ide");
  41255. messageSends: []
  41256. }),
  41257. $globals.IRInlinedIfNilIfNotNil);
  41258. $core.addClass('IRInlinedIfTrue', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  41259. //>>excludeStart("ide", pragmas.excludeIdeData);
  41260. $globals.IRInlinedIfTrue.comment="I represent an inlined `#ifTrue:` message send instruction.";
  41261. //>>excludeEnd("ide");
  41262. $core.addMethod(
  41263. $core.method({
  41264. selector: "accept:",
  41265. protocol: 'visiting',
  41266. fn: function (aVisitor){
  41267. var self=this;
  41268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41269. return $core.withContext(function($ctx1) {
  41270. //>>excludeEnd("ctx");
  41271. $recv(aVisitor)._visitIRInlinedIfTrue_(self);
  41272. return self;
  41273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41274. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfTrue)});
  41275. //>>excludeEnd("ctx");
  41276. },
  41277. //>>excludeStart("ide", pragmas.excludeIdeData);
  41278. args: ["aVisitor"],
  41279. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrue: self",
  41280. referencedClasses: [],
  41281. //>>excludeEnd("ide");
  41282. messageSends: ["visitIRInlinedIfTrue:"]
  41283. }),
  41284. $globals.IRInlinedIfTrue);
  41285. $core.addClass('IRInlinedIfTrueIfFalse', $globals.IRInlinedSend, [], 'Compiler-Inlining');
  41286. //>>excludeStart("ide", pragmas.excludeIdeData);
  41287. $globals.IRInlinedIfTrueIfFalse.comment="I represent an inlined `#ifTrue:ifFalse:` message send instruction.";
  41288. //>>excludeEnd("ide");
  41289. $core.addMethod(
  41290. $core.method({
  41291. selector: "accept:",
  41292. protocol: 'visiting',
  41293. fn: function (aVisitor){
  41294. var self=this;
  41295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41296. return $core.withContext(function($ctx1) {
  41297. //>>excludeEnd("ctx");
  41298. $recv(aVisitor)._visitIRInlinedIfTrueIfFalse_(self);
  41299. return self;
  41300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41301. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedIfTrueIfFalse)});
  41302. //>>excludeEnd("ctx");
  41303. },
  41304. //>>excludeStart("ide", pragmas.excludeIdeData);
  41305. args: ["aVisitor"],
  41306. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedIfTrueIfFalse: self",
  41307. referencedClasses: [],
  41308. //>>excludeEnd("ide");
  41309. messageSends: ["visitIRInlinedIfTrueIfFalse:"]
  41310. }),
  41311. $globals.IRInlinedIfTrueIfFalse);
  41312. $core.addClass('IRInlinedSequence', $globals.IRBlockSequence, [], 'Compiler-Inlining');
  41313. //>>excludeStart("ide", pragmas.excludeIdeData);
  41314. $globals.IRInlinedSequence.comment="I represent a (block) sequence inside an inlined closure instruction (instance of `IRInlinedClosure`).";
  41315. //>>excludeEnd("ide");
  41316. $core.addMethod(
  41317. $core.method({
  41318. selector: "accept:",
  41319. protocol: 'visiting',
  41320. fn: function (aVisitor){
  41321. var self=this;
  41322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41323. return $core.withContext(function($ctx1) {
  41324. //>>excludeEnd("ctx");
  41325. $recv(aVisitor)._visitIRInlinedSequence_(self);
  41326. return self;
  41327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41328. }, function($ctx1) {$ctx1.fill(self,"accept:",{aVisitor:aVisitor},$globals.IRInlinedSequence)});
  41329. //>>excludeEnd("ctx");
  41330. },
  41331. //>>excludeStart("ide", pragmas.excludeIdeData);
  41332. args: ["aVisitor"],
  41333. source: "accept: aVisitor\x0a\x09aVisitor visitIRInlinedSequence: self",
  41334. referencedClasses: [],
  41335. //>>excludeEnd("ide");
  41336. messageSends: ["visitIRInlinedSequence:"]
  41337. }),
  41338. $globals.IRInlinedSequence);
  41339. $core.addMethod(
  41340. $core.method({
  41341. selector: "isInlined",
  41342. protocol: 'testing',
  41343. fn: function (){
  41344. var self=this;
  41345. return true;
  41346. },
  41347. //>>excludeStart("ide", pragmas.excludeIdeData);
  41348. args: [],
  41349. source: "isInlined\x0a\x09^ true",
  41350. referencedClasses: [],
  41351. //>>excludeEnd("ide");
  41352. messageSends: []
  41353. }),
  41354. $globals.IRInlinedSequence);
  41355. $core.addClass('IRInliner', $globals.IRVisitor, [], 'Compiler-Inlining');
  41356. //>>excludeStart("ide", pragmas.excludeIdeData);
  41357. $globals.IRInliner.comment="I visit an IR tree, inlining message sends and block closures.\x0a\x0aMessage selectors that can be inlined are answered by `IRSendInliner >> #inlinedSelectors`";
  41358. //>>excludeEnd("ide");
  41359. $core.addMethod(
  41360. $core.method({
  41361. selector: "assignmentInliner",
  41362. protocol: 'factory',
  41363. fn: function (){
  41364. var self=this;
  41365. function $IRAssignmentInliner(){return $globals.IRAssignmentInliner||(typeof IRAssignmentInliner=="undefined"?nil:IRAssignmentInliner)}
  41366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41367. return $core.withContext(function($ctx1) {
  41368. //>>excludeEnd("ctx");
  41369. var $2,$3,$1;
  41370. $2=$recv($IRAssignmentInliner())._new();
  41371. $recv($2)._translator_(self);
  41372. $3=$recv($2)._yourself();
  41373. $1=$3;
  41374. return $1;
  41375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41376. }, function($ctx1) {$ctx1.fill(self,"assignmentInliner",{},$globals.IRInliner)});
  41377. //>>excludeEnd("ctx");
  41378. },
  41379. //>>excludeStart("ide", pragmas.excludeIdeData);
  41380. args: [],
  41381. source: "assignmentInliner\x0a\x09^ IRAssignmentInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  41382. referencedClasses: ["IRAssignmentInliner"],
  41383. //>>excludeEnd("ide");
  41384. messageSends: ["translator:", "new", "yourself"]
  41385. }),
  41386. $globals.IRInliner);
  41387. $core.addMethod(
  41388. $core.method({
  41389. selector: "returnInliner",
  41390. protocol: 'factory',
  41391. fn: function (){
  41392. var self=this;
  41393. function $IRReturnInliner(){return $globals.IRReturnInliner||(typeof IRReturnInliner=="undefined"?nil:IRReturnInliner)}
  41394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41395. return $core.withContext(function($ctx1) {
  41396. //>>excludeEnd("ctx");
  41397. var $2,$3,$1;
  41398. $2=$recv($IRReturnInliner())._new();
  41399. $recv($2)._translator_(self);
  41400. $3=$recv($2)._yourself();
  41401. $1=$3;
  41402. return $1;
  41403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41404. }, function($ctx1) {$ctx1.fill(self,"returnInliner",{},$globals.IRInliner)});
  41405. //>>excludeEnd("ctx");
  41406. },
  41407. //>>excludeStart("ide", pragmas.excludeIdeData);
  41408. args: [],
  41409. source: "returnInliner\x0a\x09^ IRReturnInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  41410. referencedClasses: ["IRReturnInliner"],
  41411. //>>excludeEnd("ide");
  41412. messageSends: ["translator:", "new", "yourself"]
  41413. }),
  41414. $globals.IRInliner);
  41415. $core.addMethod(
  41416. $core.method({
  41417. selector: "sendInliner",
  41418. protocol: 'factory',
  41419. fn: function (){
  41420. var self=this;
  41421. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  41422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41423. return $core.withContext(function($ctx1) {
  41424. //>>excludeEnd("ctx");
  41425. var $2,$3,$1;
  41426. $2=$recv($IRSendInliner())._new();
  41427. $recv($2)._translator_(self);
  41428. $3=$recv($2)._yourself();
  41429. $1=$3;
  41430. return $1;
  41431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41432. }, function($ctx1) {$ctx1.fill(self,"sendInliner",{},$globals.IRInliner)});
  41433. //>>excludeEnd("ctx");
  41434. },
  41435. //>>excludeStart("ide", pragmas.excludeIdeData);
  41436. args: [],
  41437. source: "sendInliner\x0a\x09^ IRSendInliner new\x0a\x09\x09translator: self;\x0a\x09\x09yourself",
  41438. referencedClasses: ["IRSendInliner"],
  41439. //>>excludeEnd("ide");
  41440. messageSends: ["translator:", "new", "yourself"]
  41441. }),
  41442. $globals.IRInliner);
  41443. $core.addMethod(
  41444. $core.method({
  41445. selector: "shouldInlineAssignment:",
  41446. protocol: 'testing',
  41447. fn: function (anIRAssignment){
  41448. var self=this;
  41449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41450. return $core.withContext(function($ctx1) {
  41451. //>>excludeEnd("ctx");
  41452. var $4,$3,$2,$1;
  41453. $1=$recv($recv($recv(anIRAssignment)._isInlined())._not())._and_((function(){
  41454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41455. return $core.withContext(function($ctx2) {
  41456. //>>excludeEnd("ctx");
  41457. $4=$recv(anIRAssignment)._instructions();
  41458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41459. $ctx2.sendIdx["instructions"]=1;
  41460. //>>excludeEnd("ctx");
  41461. $3=$recv($4)._last();
  41462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41463. $ctx2.sendIdx["last"]=1;
  41464. //>>excludeEnd("ctx");
  41465. $2=$recv($3)._isSend();
  41466. return $recv($2)._and_((function(){
  41467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41468. return $core.withContext(function($ctx3) {
  41469. //>>excludeEnd("ctx");
  41470. return self._shouldInlineSend_($recv($recv(anIRAssignment)._instructions())._last());
  41471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41472. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  41473. //>>excludeEnd("ctx");
  41474. }));
  41475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41476. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  41477. //>>excludeEnd("ctx");
  41478. }));
  41479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41480. $ctx1.sendIdx["and:"]=1;
  41481. //>>excludeEnd("ctx");
  41482. return $1;
  41483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41484. }, function($ctx1) {$ctx1.fill(self,"shouldInlineAssignment:",{anIRAssignment:anIRAssignment},$globals.IRInliner)});
  41485. //>>excludeEnd("ctx");
  41486. },
  41487. //>>excludeStart("ide", pragmas.excludeIdeData);
  41488. args: ["anIRAssignment"],
  41489. source: "shouldInlineAssignment: anIRAssignment\x0a\x09^ anIRAssignment isInlined not and: [\x0a\x09\x09anIRAssignment instructions last isSend and: [\x0a\x09\x09\x09self shouldInlineSend: (anIRAssignment instructions last) ]]",
  41490. referencedClasses: [],
  41491. //>>excludeEnd("ide");
  41492. messageSends: ["and:", "not", "isInlined", "isSend", "last", "instructions", "shouldInlineSend:"]
  41493. }),
  41494. $globals.IRInliner);
  41495. $core.addMethod(
  41496. $core.method({
  41497. selector: "shouldInlineReturn:",
  41498. protocol: 'testing',
  41499. fn: function (anIRReturn){
  41500. var self=this;
  41501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41502. return $core.withContext(function($ctx1) {
  41503. //>>excludeEnd("ctx");
  41504. var $4,$3,$2,$1;
  41505. $1=$recv($recv($recv(anIRReturn)._isInlined())._not())._and_((function(){
  41506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41507. return $core.withContext(function($ctx2) {
  41508. //>>excludeEnd("ctx");
  41509. $4=$recv(anIRReturn)._instructions();
  41510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41511. $ctx2.sendIdx["instructions"]=1;
  41512. //>>excludeEnd("ctx");
  41513. $3=$recv($4)._first();
  41514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41515. $ctx2.sendIdx["first"]=1;
  41516. //>>excludeEnd("ctx");
  41517. $2=$recv($3)._isSend();
  41518. return $recv($2)._and_((function(){
  41519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41520. return $core.withContext(function($ctx3) {
  41521. //>>excludeEnd("ctx");
  41522. return self._shouldInlineSend_($recv($recv(anIRReturn)._instructions())._first());
  41523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41524. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  41525. //>>excludeEnd("ctx");
  41526. }));
  41527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41528. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  41529. //>>excludeEnd("ctx");
  41530. }));
  41531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41532. $ctx1.sendIdx["and:"]=1;
  41533. //>>excludeEnd("ctx");
  41534. return $1;
  41535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41536. }, function($ctx1) {$ctx1.fill(self,"shouldInlineReturn:",{anIRReturn:anIRReturn},$globals.IRInliner)});
  41537. //>>excludeEnd("ctx");
  41538. },
  41539. //>>excludeStart("ide", pragmas.excludeIdeData);
  41540. args: ["anIRReturn"],
  41541. source: "shouldInlineReturn: anIRReturn\x0a\x09^ anIRReturn isInlined not and: [\x0a\x09\x09anIRReturn instructions first isSend and: [\x0a\x09\x09\x09self shouldInlineSend: (anIRReturn instructions first) ]]",
  41542. referencedClasses: [],
  41543. //>>excludeEnd("ide");
  41544. messageSends: ["and:", "not", "isInlined", "isSend", "first", "instructions", "shouldInlineSend:"]
  41545. }),
  41546. $globals.IRInliner);
  41547. $core.addMethod(
  41548. $core.method({
  41549. selector: "shouldInlineSend:",
  41550. protocol: 'testing',
  41551. fn: function (anIRSend){
  41552. var self=this;
  41553. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  41554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41555. return $core.withContext(function($ctx1) {
  41556. //>>excludeEnd("ctx");
  41557. var $1;
  41558. $1=$recv($recv($recv(anIRSend)._isInlined())._not())._and_((function(){
  41559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41560. return $core.withContext(function($ctx2) {
  41561. //>>excludeEnd("ctx");
  41562. return $recv($IRSendInliner())._shouldInline_(anIRSend);
  41563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41564. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  41565. //>>excludeEnd("ctx");
  41566. }));
  41567. return $1;
  41568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41569. }, function($ctx1) {$ctx1.fill(self,"shouldInlineSend:",{anIRSend:anIRSend},$globals.IRInliner)});
  41570. //>>excludeEnd("ctx");
  41571. },
  41572. //>>excludeStart("ide", pragmas.excludeIdeData);
  41573. args: ["anIRSend"],
  41574. source: "shouldInlineSend: anIRSend\x0a\x09^ anIRSend isInlined not and: [\x0a\x09\x09IRSendInliner shouldInline: anIRSend ]",
  41575. referencedClasses: ["IRSendInliner"],
  41576. //>>excludeEnd("ide");
  41577. messageSends: ["and:", "not", "isInlined", "shouldInline:"]
  41578. }),
  41579. $globals.IRInliner);
  41580. $core.addMethod(
  41581. $core.method({
  41582. selector: "transformNonLocalReturn:",
  41583. protocol: 'visiting',
  41584. fn: function (anIRNonLocalReturn){
  41585. var self=this;
  41586. var localReturn;
  41587. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  41588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41589. return $core.withContext(function($ctx1) {
  41590. //>>excludeEnd("ctx");
  41591. var $2,$1,$4,$3,$5,$6,$7,$8,$9;
  41592. $2=$recv(anIRNonLocalReturn)._scope();
  41593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41594. $ctx1.sendIdx["scope"]=1;
  41595. //>>excludeEnd("ctx");
  41596. $1=$recv($2)._canInlineNonLocalReturns();
  41597. if($core.assert($1)){
  41598. $4=$recv(anIRNonLocalReturn)._scope();
  41599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41600. $ctx1.sendIdx["scope"]=2;
  41601. //>>excludeEnd("ctx");
  41602. $3=$recv($4)._methodScope();
  41603. $5=$recv(anIRNonLocalReturn)._scope();
  41604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41605. $ctx1.sendIdx["scope"]=3;
  41606. //>>excludeEnd("ctx");
  41607. $recv($3)._removeNonLocalReturn_($5);
  41608. $6=$recv($IRReturn())._new();
  41609. $recv($6)._scope_($recv(anIRNonLocalReturn)._scope());
  41610. $7=$recv($6)._yourself();
  41611. localReturn=$7;
  41612. localReturn;
  41613. $recv($recv(anIRNonLocalReturn)._instructions())._do_((function(each){
  41614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41615. return $core.withContext(function($ctx2) {
  41616. //>>excludeEnd("ctx");
  41617. return $recv(localReturn)._add_(each);
  41618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41619. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  41620. //>>excludeEnd("ctx");
  41621. }));
  41622. $recv(anIRNonLocalReturn)._replaceWith_(localReturn);
  41623. $8=localReturn;
  41624. return $8;
  41625. };
  41626. $9=(
  41627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41628. $ctx1.supercall = true,
  41629. //>>excludeEnd("ctx");
  41630. $globals.IRInliner.superclass.fn.prototype._visitIRNonLocalReturn_.apply($recv(self), [anIRNonLocalReturn]));
  41631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41632. $ctx1.supercall = false;
  41633. //>>excludeEnd("ctx");;
  41634. return $9;
  41635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41636. }, function($ctx1) {$ctx1.fill(self,"transformNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn,localReturn:localReturn},$globals.IRInliner)});
  41637. //>>excludeEnd("ctx");
  41638. },
  41639. //>>excludeStart("ide", pragmas.excludeIdeData);
  41640. args: ["anIRNonLocalReturn"],
  41641. source: "transformNonLocalReturn: anIRNonLocalReturn\x0a\x09\x22Replace a non local return into a local return\x22\x0a\x0a\x09| localReturn |\x0a\x09anIRNonLocalReturn scope canInlineNonLocalReturns ifTrue: [\x0a\x09\x09anIRNonLocalReturn scope methodScope removeNonLocalReturn: anIRNonLocalReturn scope.\x0a\x09\x09localReturn := IRReturn new\x0a\x09\x09\x09scope: anIRNonLocalReturn scope;\x0a\x09\x09\x09yourself.\x0a\x09\x09anIRNonLocalReturn instructions do: [ :each |\x0a\x09\x09\x09localReturn add: each ].\x0a\x09\x09anIRNonLocalReturn replaceWith: localReturn.\x0a\x09\x09^ localReturn ].\x0a\x09^ super visitIRNonLocalReturn: anIRNonLocalReturn",
  41642. referencedClasses: ["IRReturn"],
  41643. //>>excludeEnd("ide");
  41644. messageSends: ["ifTrue:", "canInlineNonLocalReturns", "scope", "removeNonLocalReturn:", "methodScope", "scope:", "new", "yourself", "do:", "instructions", "add:", "replaceWith:", "visitIRNonLocalReturn:"]
  41645. }),
  41646. $globals.IRInliner);
  41647. $core.addMethod(
  41648. $core.method({
  41649. selector: "visitIRAssignment:",
  41650. protocol: 'visiting',
  41651. fn: function (anIRAssignment){
  41652. var self=this;
  41653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41654. return $core.withContext(function($ctx1) {
  41655. //>>excludeEnd("ctx");
  41656. var $2,$1;
  41657. $2=self._shouldInlineAssignment_(anIRAssignment);
  41658. if($core.assert($2)){
  41659. $1=$recv(self._assignmentInliner())._inlineAssignment_(anIRAssignment);
  41660. } else {
  41661. $1=(
  41662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41663. $ctx1.supercall = true,
  41664. //>>excludeEnd("ctx");
  41665. $globals.IRInliner.superclass.fn.prototype._visitIRAssignment_.apply($recv(self), [anIRAssignment]));
  41666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41667. $ctx1.supercall = false;
  41668. //>>excludeEnd("ctx");;
  41669. };
  41670. return $1;
  41671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41672. }, function($ctx1) {$ctx1.fill(self,"visitIRAssignment:",{anIRAssignment:anIRAssignment},$globals.IRInliner)});
  41673. //>>excludeEnd("ctx");
  41674. },
  41675. //>>excludeStart("ide", pragmas.excludeIdeData);
  41676. args: ["anIRAssignment"],
  41677. source: "visitIRAssignment: anIRAssignment\x0a\x09^ (self shouldInlineAssignment: anIRAssignment)\x0a\x09\x09ifTrue: [ self assignmentInliner inlineAssignment: anIRAssignment ]\x0a\x09\x09ifFalse: [ super visitIRAssignment: anIRAssignment ]",
  41678. referencedClasses: [],
  41679. //>>excludeEnd("ide");
  41680. messageSends: ["ifTrue:ifFalse:", "shouldInlineAssignment:", "inlineAssignment:", "assignmentInliner", "visitIRAssignment:"]
  41681. }),
  41682. $globals.IRInliner);
  41683. $core.addMethod(
  41684. $core.method({
  41685. selector: "visitIRNonLocalReturn:",
  41686. protocol: 'visiting',
  41687. fn: function (anIRNonLocalReturn){
  41688. var self=this;
  41689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41690. return $core.withContext(function($ctx1) {
  41691. //>>excludeEnd("ctx");
  41692. var $1;
  41693. $1=self._transformNonLocalReturn_(anIRNonLocalReturn);
  41694. return $1;
  41695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41696. }, function($ctx1) {$ctx1.fill(self,"visitIRNonLocalReturn:",{anIRNonLocalReturn:anIRNonLocalReturn},$globals.IRInliner)});
  41697. //>>excludeEnd("ctx");
  41698. },
  41699. //>>excludeStart("ide", pragmas.excludeIdeData);
  41700. args: ["anIRNonLocalReturn"],
  41701. source: "visitIRNonLocalReturn: anIRNonLocalReturn\x0a\x09^ self transformNonLocalReturn: anIRNonLocalReturn",
  41702. referencedClasses: [],
  41703. //>>excludeEnd("ide");
  41704. messageSends: ["transformNonLocalReturn:"]
  41705. }),
  41706. $globals.IRInliner);
  41707. $core.addMethod(
  41708. $core.method({
  41709. selector: "visitIRReturn:",
  41710. protocol: 'visiting',
  41711. fn: function (anIRReturn){
  41712. var self=this;
  41713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41714. return $core.withContext(function($ctx1) {
  41715. //>>excludeEnd("ctx");
  41716. var $2,$1;
  41717. $2=self._shouldInlineReturn_(anIRReturn);
  41718. if($core.assert($2)){
  41719. $1=$recv(self._returnInliner())._inlineReturn_(anIRReturn);
  41720. } else {
  41721. $1=(
  41722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41723. $ctx1.supercall = true,
  41724. //>>excludeEnd("ctx");
  41725. $globals.IRInliner.superclass.fn.prototype._visitIRReturn_.apply($recv(self), [anIRReturn]));
  41726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41727. $ctx1.supercall = false;
  41728. //>>excludeEnd("ctx");;
  41729. };
  41730. return $1;
  41731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41732. }, function($ctx1) {$ctx1.fill(self,"visitIRReturn:",{anIRReturn:anIRReturn},$globals.IRInliner)});
  41733. //>>excludeEnd("ctx");
  41734. },
  41735. //>>excludeStart("ide", pragmas.excludeIdeData);
  41736. args: ["anIRReturn"],
  41737. source: "visitIRReturn: anIRReturn\x0a\x09^ (self shouldInlineReturn: anIRReturn)\x0a\x09\x09ifTrue: [ self returnInliner inlineReturn: anIRReturn ]\x0a\x09\x09ifFalse: [ super visitIRReturn: anIRReturn ]",
  41738. referencedClasses: [],
  41739. //>>excludeEnd("ide");
  41740. messageSends: ["ifTrue:ifFalse:", "shouldInlineReturn:", "inlineReturn:", "returnInliner", "visitIRReturn:"]
  41741. }),
  41742. $globals.IRInliner);
  41743. $core.addMethod(
  41744. $core.method({
  41745. selector: "visitIRSend:",
  41746. protocol: 'visiting',
  41747. fn: function (anIRSend){
  41748. var self=this;
  41749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41750. return $core.withContext(function($ctx1) {
  41751. //>>excludeEnd("ctx");
  41752. var $2,$1;
  41753. $2=self._shouldInlineSend_(anIRSend);
  41754. if($core.assert($2)){
  41755. $1=$recv(self._sendInliner())._inlineSend_(anIRSend);
  41756. } else {
  41757. $1=(
  41758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41759. $ctx1.supercall = true,
  41760. //>>excludeEnd("ctx");
  41761. $globals.IRInliner.superclass.fn.prototype._visitIRSend_.apply($recv(self), [anIRSend]));
  41762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41763. $ctx1.supercall = false;
  41764. //>>excludeEnd("ctx");;
  41765. };
  41766. return $1;
  41767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41768. }, function($ctx1) {$ctx1.fill(self,"visitIRSend:",{anIRSend:anIRSend},$globals.IRInliner)});
  41769. //>>excludeEnd("ctx");
  41770. },
  41771. //>>excludeStart("ide", pragmas.excludeIdeData);
  41772. args: ["anIRSend"],
  41773. source: "visitIRSend: anIRSend\x0a\x09^ (self shouldInlineSend: anIRSend)\x0a\x09\x09ifTrue: [ self sendInliner inlineSend: anIRSend ]\x0a\x09\x09ifFalse: [ super visitIRSend: anIRSend ]",
  41774. referencedClasses: [],
  41775. //>>excludeEnd("ide");
  41776. messageSends: ["ifTrue:ifFalse:", "shouldInlineSend:", "inlineSend:", "sendInliner", "visitIRSend:"]
  41777. }),
  41778. $globals.IRInliner);
  41779. $core.addClass('IRInliningJSTranslator', $globals.IRJSTranslator, [], 'Compiler-Inlining');
  41780. //>>excludeStart("ide", pragmas.excludeIdeData);
  41781. $globals.IRInliningJSTranslator.comment="I am a specialized JavaScript translator able to write inlined IR instructions to JavaScript stream (`JSStream` instance).";
  41782. //>>excludeEnd("ide");
  41783. $core.addMethod(
  41784. $core.method({
  41785. selector: "visitIRInlinedAssignment:",
  41786. protocol: 'visiting',
  41787. fn: function (anIRInlinedAssignment){
  41788. var self=this;
  41789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41790. return $core.withContext(function($ctx1) {
  41791. //>>excludeEnd("ctx");
  41792. self._visit_($recv($recv(anIRInlinedAssignment)._instructions())._last());
  41793. return self;
  41794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41795. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedAssignment:",{anIRInlinedAssignment:anIRInlinedAssignment},$globals.IRInliningJSTranslator)});
  41796. //>>excludeEnd("ctx");
  41797. },
  41798. //>>excludeStart("ide", pragmas.excludeIdeData);
  41799. args: ["anIRInlinedAssignment"],
  41800. source: "visitIRInlinedAssignment: anIRInlinedAssignment\x0a\x09self visit: anIRInlinedAssignment instructions last",
  41801. referencedClasses: [],
  41802. //>>excludeEnd("ide");
  41803. messageSends: ["visit:", "last", "instructions"]
  41804. }),
  41805. $globals.IRInliningJSTranslator);
  41806. $core.addMethod(
  41807. $core.method({
  41808. selector: "visitIRInlinedClosure:",
  41809. protocol: 'visiting',
  41810. fn: function (anIRInlinedClosure){
  41811. var self=this;
  41812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41813. return $core.withContext(function($ctx1) {
  41814. //>>excludeEnd("ctx");
  41815. $recv(self._stream())._nextPutVars_($recv($recv(anIRInlinedClosure)._tempDeclarations())._collect_((function(each){
  41816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41817. return $core.withContext(function($ctx2) {
  41818. //>>excludeEnd("ctx");
  41819. return $recv($recv(each)._name())._asVariableName();
  41820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41821. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  41822. //>>excludeEnd("ctx");
  41823. })));
  41824. $recv($recv(anIRInlinedClosure)._instructions())._do_((function(each){
  41825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41826. return $core.withContext(function($ctx2) {
  41827. //>>excludeEnd("ctx");
  41828. return self._visit_(each);
  41829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41830. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  41831. //>>excludeEnd("ctx");
  41832. }));
  41833. return self;
  41834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41835. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedClosure:",{anIRInlinedClosure:anIRInlinedClosure},$globals.IRInliningJSTranslator)});
  41836. //>>excludeEnd("ctx");
  41837. },
  41838. //>>excludeStart("ide", pragmas.excludeIdeData);
  41839. args: ["anIRInlinedClosure"],
  41840. source: "visitIRInlinedClosure: anIRInlinedClosure\x0a\x09self stream nextPutVars: (anIRInlinedClosure tempDeclarations collect: [ :each |\x0a\x09\x09each name asVariableName ]).\x0a\x09anIRInlinedClosure instructions do: [ :each |\x0a\x09\x09self visit: each ]",
  41841. referencedClasses: [],
  41842. //>>excludeEnd("ide");
  41843. messageSends: ["nextPutVars:", "stream", "collect:", "tempDeclarations", "asVariableName", "name", "do:", "instructions", "visit:"]
  41844. }),
  41845. $globals.IRInliningJSTranslator);
  41846. $core.addMethod(
  41847. $core.method({
  41848. selector: "visitIRInlinedIfFalse:",
  41849. protocol: 'visiting',
  41850. fn: function (anIRInlinedIfFalse){
  41851. var self=this;
  41852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41853. return $core.withContext(function($ctx1) {
  41854. //>>excludeEnd("ctx");
  41855. var $1,$2,$4,$3;
  41856. $1=self._stream();
  41857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41858. $ctx1.sendIdx["stream"]=1;
  41859. //>>excludeEnd("ctx");
  41860. $recv($1)._nextPutIf_with_((function(){
  41861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41862. return $core.withContext(function($ctx2) {
  41863. //>>excludeEnd("ctx");
  41864. $2=self._stream();
  41865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41866. $ctx2.sendIdx["stream"]=2;
  41867. //>>excludeEnd("ctx");
  41868. $recv($2)._nextPutAll_("!$core.assert(");
  41869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41870. $ctx2.sendIdx["nextPutAll:"]=1;
  41871. //>>excludeEnd("ctx");
  41872. $4=$recv(anIRInlinedIfFalse)._instructions();
  41873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41874. $ctx2.sendIdx["instructions"]=1;
  41875. //>>excludeEnd("ctx");
  41876. $3=$recv($4)._first();
  41877. self._visit_($3);
  41878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41879. $ctx2.sendIdx["visit:"]=1;
  41880. //>>excludeEnd("ctx");
  41881. return $recv(self._stream())._nextPutAll_(")");
  41882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41883. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  41884. //>>excludeEnd("ctx");
  41885. }),(function(){
  41886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41887. return $core.withContext(function($ctx2) {
  41888. //>>excludeEnd("ctx");
  41889. return self._visit_($recv($recv(anIRInlinedIfFalse)._instructions())._last());
  41890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41891. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  41892. //>>excludeEnd("ctx");
  41893. }));
  41894. return self;
  41895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41896. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfFalse:",{anIRInlinedIfFalse:anIRInlinedIfFalse},$globals.IRInliningJSTranslator)});
  41897. //>>excludeEnd("ctx");
  41898. },
  41899. //>>excludeStart("ide", pragmas.excludeIdeData);
  41900. args: ["anIRInlinedIfFalse"],
  41901. source: "visitIRInlinedIfFalse: anIRInlinedIfFalse\x0a\x09self stream nextPutIf: [\x0a\x09\x09self stream nextPutAll: '!$core.assert('.\x0a\x09\x09self visit: anIRInlinedIfFalse instructions first.\x0a\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfFalse instructions last ]",
  41902. referencedClasses: [],
  41903. //>>excludeEnd("ide");
  41904. messageSends: ["nextPutIf:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "last"]
  41905. }),
  41906. $globals.IRInliningJSTranslator);
  41907. $core.addMethod(
  41908. $core.method({
  41909. selector: "visitIRInlinedIfNilIfNotNil:",
  41910. protocol: 'visiting',
  41911. fn: function (anIRInlinedIfNilIfNotNil){
  41912. var self=this;
  41913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41914. return $core.withContext(function($ctx1) {
  41915. //>>excludeEnd("ctx");
  41916. var $1,$2,$3,$5,$4,$7,$6;
  41917. $1=self._stream();
  41918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41919. $ctx1.sendIdx["stream"]=1;
  41920. //>>excludeEnd("ctx");
  41921. $recv($1)._nextPutIfElse_with_with_((function(){
  41922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41923. return $core.withContext(function($ctx2) {
  41924. //>>excludeEnd("ctx");
  41925. $2=self._stream();
  41926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41927. $ctx2.sendIdx["stream"]=2;
  41928. //>>excludeEnd("ctx");
  41929. $3=$recv("(".__comma($recv(anIRInlinedIfNilIfNotNil)._receiverInternalVariableName())).__comma(" = ");
  41930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41931. $ctx2.sendIdx[","]=1;
  41932. //>>excludeEnd("ctx");
  41933. $recv($2)._nextPutAll_($3);
  41934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41935. $ctx2.sendIdx["nextPutAll:"]=1;
  41936. //>>excludeEnd("ctx");
  41937. $5=$recv(anIRInlinedIfNilIfNotNil)._instructions();
  41938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41939. $ctx2.sendIdx["instructions"]=1;
  41940. //>>excludeEnd("ctx");
  41941. $4=$recv($5)._first();
  41942. self._visit_($4);
  41943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41944. $ctx2.sendIdx["visit:"]=1;
  41945. //>>excludeEnd("ctx");
  41946. return $recv(self._stream())._nextPutAll_(") == null || $receiver.isNil");
  41947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41948. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  41949. //>>excludeEnd("ctx");
  41950. }),(function(){
  41951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41952. return $core.withContext(function($ctx2) {
  41953. //>>excludeEnd("ctx");
  41954. $7=$recv(anIRInlinedIfNilIfNotNil)._instructions();
  41955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41956. $ctx2.sendIdx["instructions"]=2;
  41957. //>>excludeEnd("ctx");
  41958. $6=$recv($7)._second();
  41959. return self._visit_($6);
  41960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41961. $ctx2.sendIdx["visit:"]=2;
  41962. //>>excludeEnd("ctx");
  41963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41964. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  41965. //>>excludeEnd("ctx");
  41966. }),(function(){
  41967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41968. return $core.withContext(function($ctx2) {
  41969. //>>excludeEnd("ctx");
  41970. return self._visit_($recv($recv(anIRInlinedIfNilIfNotNil)._instructions())._third());
  41971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41972. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  41973. //>>excludeEnd("ctx");
  41974. }));
  41975. return self;
  41976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41977. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfNilIfNotNil:",{anIRInlinedIfNilIfNotNil:anIRInlinedIfNilIfNotNil},$globals.IRInliningJSTranslator)});
  41978. //>>excludeEnd("ctx");
  41979. },
  41980. //>>excludeStart("ide", pragmas.excludeIdeData);
  41981. args: ["anIRInlinedIfNilIfNotNil"],
  41982. source: "visitIRInlinedIfNilIfNotNil: anIRInlinedIfNilIfNotNil\x0a\x09self stream\x0a\x09\x09nextPutIfElse: [\x0a\x09\x09\x09self stream nextPutAll: '(', anIRInlinedIfNilIfNotNil receiverInternalVariableName, ' = '.\x0a\x09\x09\x09self visit: anIRInlinedIfNilIfNotNil instructions first.\x0a\x09\x09\x09self stream nextPutAll: ') == null || $receiver.isNil' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfNilIfNotNil instructions second ]\x0a\x09\x09with: [ self visit: anIRInlinedIfNilIfNotNil instructions third ]",
  41983. referencedClasses: [],
  41984. //>>excludeEnd("ide");
  41985. messageSends: ["nextPutIfElse:with:with:", "stream", "nextPutAll:", ",", "receiverInternalVariableName", "visit:", "first", "instructions", "second", "third"]
  41986. }),
  41987. $globals.IRInliningJSTranslator);
  41988. $core.addMethod(
  41989. $core.method({
  41990. selector: "visitIRInlinedIfTrue:",
  41991. protocol: 'visiting',
  41992. fn: function (anIRInlinedIfTrue){
  41993. var self=this;
  41994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41995. return $core.withContext(function($ctx1) {
  41996. //>>excludeEnd("ctx");
  41997. var $1,$2,$4,$3;
  41998. $1=self._stream();
  41999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42000. $ctx1.sendIdx["stream"]=1;
  42001. //>>excludeEnd("ctx");
  42002. $recv($1)._nextPutIf_with_((function(){
  42003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42004. return $core.withContext(function($ctx2) {
  42005. //>>excludeEnd("ctx");
  42006. $2=self._stream();
  42007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42008. $ctx2.sendIdx["stream"]=2;
  42009. //>>excludeEnd("ctx");
  42010. $recv($2)._nextPutAll_("$core.assert(");
  42011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42012. $ctx2.sendIdx["nextPutAll:"]=1;
  42013. //>>excludeEnd("ctx");
  42014. $4=$recv(anIRInlinedIfTrue)._instructions();
  42015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42016. $ctx2.sendIdx["instructions"]=1;
  42017. //>>excludeEnd("ctx");
  42018. $3=$recv($4)._first();
  42019. self._visit_($3);
  42020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42021. $ctx2.sendIdx["visit:"]=1;
  42022. //>>excludeEnd("ctx");
  42023. return $recv(self._stream())._nextPutAll_(")");
  42024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42025. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42026. //>>excludeEnd("ctx");
  42027. }),(function(){
  42028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42029. return $core.withContext(function($ctx2) {
  42030. //>>excludeEnd("ctx");
  42031. return self._visit_($recv($recv(anIRInlinedIfTrue)._instructions())._last());
  42032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42033. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42034. //>>excludeEnd("ctx");
  42035. }));
  42036. return self;
  42037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42038. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfTrue:",{anIRInlinedIfTrue:anIRInlinedIfTrue},$globals.IRInliningJSTranslator)});
  42039. //>>excludeEnd("ctx");
  42040. },
  42041. //>>excludeStart("ide", pragmas.excludeIdeData);
  42042. args: ["anIRInlinedIfTrue"],
  42043. source: "visitIRInlinedIfTrue: anIRInlinedIfTrue\x0a\x09self stream nextPutIf: [\x0a\x09\x09self stream nextPutAll: '$core.assert('.\x0a\x09\x09self visit: anIRInlinedIfTrue instructions first.\x0a\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrue instructions last ]",
  42044. referencedClasses: [],
  42045. //>>excludeEnd("ide");
  42046. messageSends: ["nextPutIf:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "last"]
  42047. }),
  42048. $globals.IRInliningJSTranslator);
  42049. $core.addMethod(
  42050. $core.method({
  42051. selector: "visitIRInlinedIfTrueIfFalse:",
  42052. protocol: 'visiting',
  42053. fn: function (anIRInlinedIfTrueIfFalse){
  42054. var self=this;
  42055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42056. return $core.withContext(function($ctx1) {
  42057. //>>excludeEnd("ctx");
  42058. var $1,$2,$4,$3,$6,$5;
  42059. $1=self._stream();
  42060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42061. $ctx1.sendIdx["stream"]=1;
  42062. //>>excludeEnd("ctx");
  42063. $recv($1)._nextPutIfElse_with_with_((function(){
  42064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42065. return $core.withContext(function($ctx2) {
  42066. //>>excludeEnd("ctx");
  42067. $2=self._stream();
  42068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42069. $ctx2.sendIdx["stream"]=2;
  42070. //>>excludeEnd("ctx");
  42071. $recv($2)._nextPutAll_("$core.assert(");
  42072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42073. $ctx2.sendIdx["nextPutAll:"]=1;
  42074. //>>excludeEnd("ctx");
  42075. $4=$recv(anIRInlinedIfTrueIfFalse)._instructions();
  42076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42077. $ctx2.sendIdx["instructions"]=1;
  42078. //>>excludeEnd("ctx");
  42079. $3=$recv($4)._first();
  42080. self._visit_($3);
  42081. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42082. $ctx2.sendIdx["visit:"]=1;
  42083. //>>excludeEnd("ctx");
  42084. return $recv(self._stream())._nextPutAll_(")");
  42085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42086. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42087. //>>excludeEnd("ctx");
  42088. }),(function(){
  42089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42090. return $core.withContext(function($ctx2) {
  42091. //>>excludeEnd("ctx");
  42092. $6=$recv(anIRInlinedIfTrueIfFalse)._instructions();
  42093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42094. $ctx2.sendIdx["instructions"]=2;
  42095. //>>excludeEnd("ctx");
  42096. $5=$recv($6)._second();
  42097. return self._visit_($5);
  42098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42099. $ctx2.sendIdx["visit:"]=2;
  42100. //>>excludeEnd("ctx");
  42101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42102. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  42103. //>>excludeEnd("ctx");
  42104. }),(function(){
  42105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42106. return $core.withContext(function($ctx2) {
  42107. //>>excludeEnd("ctx");
  42108. return self._visit_($recv($recv(anIRInlinedIfTrueIfFalse)._instructions())._third());
  42109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42110. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  42111. //>>excludeEnd("ctx");
  42112. }));
  42113. return self;
  42114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42115. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedIfTrueIfFalse:",{anIRInlinedIfTrueIfFalse:anIRInlinedIfTrueIfFalse},$globals.IRInliningJSTranslator)});
  42116. //>>excludeEnd("ctx");
  42117. },
  42118. //>>excludeStart("ide", pragmas.excludeIdeData);
  42119. args: ["anIRInlinedIfTrueIfFalse"],
  42120. source: "visitIRInlinedIfTrueIfFalse: anIRInlinedIfTrueIfFalse\x0a\x09self stream\x0a\x09\x09nextPutIfElse: [\x0a\x09\x09\x09self stream nextPutAll: '$core.assert('.\x0a\x09\x09\x09self visit: anIRInlinedIfTrueIfFalse instructions first.\x0a\x09\x09\x09self stream nextPutAll: ')' ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrueIfFalse instructions second ]\x0a\x09\x09with: [ self visit: anIRInlinedIfTrueIfFalse instructions third ]",
  42121. referencedClasses: [],
  42122. //>>excludeEnd("ide");
  42123. messageSends: ["nextPutIfElse:with:with:", "stream", "nextPutAll:", "visit:", "first", "instructions", "second", "third"]
  42124. }),
  42125. $globals.IRInliningJSTranslator);
  42126. $core.addMethod(
  42127. $core.method({
  42128. selector: "visitIRInlinedNonLocalReturn:",
  42129. protocol: 'visiting',
  42130. fn: function (anIRInlinedReturn){
  42131. var self=this;
  42132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42133. return $core.withContext(function($ctx1) {
  42134. //>>excludeEnd("ctx");
  42135. var $1;
  42136. $1=self._stream();
  42137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42138. $ctx1.sendIdx["stream"]=1;
  42139. //>>excludeEnd("ctx");
  42140. $recv($1)._nextPutStatementWith_((function(){
  42141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42142. return $core.withContext(function($ctx2) {
  42143. //>>excludeEnd("ctx");
  42144. return self._visit_($recv($recv(anIRInlinedReturn)._instructions())._last());
  42145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42146. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  42147. //>>excludeEnd("ctx");
  42148. }));
  42149. $recv(self._stream())._nextPutNonLocalReturnWith_((function(){
  42150. }));
  42151. return self;
  42152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42153. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedNonLocalReturn:",{anIRInlinedReturn:anIRInlinedReturn},$globals.IRInliningJSTranslator)});
  42154. //>>excludeEnd("ctx");
  42155. },
  42156. //>>excludeStart("ide", pragmas.excludeIdeData);
  42157. args: ["anIRInlinedReturn"],
  42158. source: "visitIRInlinedNonLocalReturn: anIRInlinedReturn\x0a\x09self stream nextPutStatementWith: [\x0a\x09\x09self visit: anIRInlinedReturn instructions last ].\x0a\x09self stream nextPutNonLocalReturnWith: [ ]",
  42159. referencedClasses: [],
  42160. //>>excludeEnd("ide");
  42161. messageSends: ["nextPutStatementWith:", "stream", "visit:", "last", "instructions", "nextPutNonLocalReturnWith:"]
  42162. }),
  42163. $globals.IRInliningJSTranslator);
  42164. $core.addMethod(
  42165. $core.method({
  42166. selector: "visitIRInlinedReturn:",
  42167. protocol: 'visiting',
  42168. fn: function (anIRInlinedReturn){
  42169. var self=this;
  42170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42171. return $core.withContext(function($ctx1) {
  42172. //>>excludeEnd("ctx");
  42173. self._visit_($recv($recv(anIRInlinedReturn)._instructions())._last());
  42174. return self;
  42175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42176. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedReturn:",{anIRInlinedReturn:anIRInlinedReturn},$globals.IRInliningJSTranslator)});
  42177. //>>excludeEnd("ctx");
  42178. },
  42179. //>>excludeStart("ide", pragmas.excludeIdeData);
  42180. args: ["anIRInlinedReturn"],
  42181. source: "visitIRInlinedReturn: anIRInlinedReturn\x0a\x09self visit: anIRInlinedReturn instructions last",
  42182. referencedClasses: [],
  42183. //>>excludeEnd("ide");
  42184. messageSends: ["visit:", "last", "instructions"]
  42185. }),
  42186. $globals.IRInliningJSTranslator);
  42187. $core.addMethod(
  42188. $core.method({
  42189. selector: "visitIRInlinedSequence:",
  42190. protocol: 'visiting',
  42191. fn: function (anIRInlinedSequence){
  42192. var self=this;
  42193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42194. return $core.withContext(function($ctx1) {
  42195. //>>excludeEnd("ctx");
  42196. $recv($recv(anIRInlinedSequence)._instructions())._do_((function(each){
  42197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42198. return $core.withContext(function($ctx2) {
  42199. //>>excludeEnd("ctx");
  42200. return $recv(self._stream())._nextPutStatementWith_((function(){
  42201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42202. return $core.withContext(function($ctx3) {
  42203. //>>excludeEnd("ctx");
  42204. return self._visit_(each);
  42205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42206. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  42207. //>>excludeEnd("ctx");
  42208. }));
  42209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42210. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  42211. //>>excludeEnd("ctx");
  42212. }));
  42213. return self;
  42214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42215. }, function($ctx1) {$ctx1.fill(self,"visitIRInlinedSequence:",{anIRInlinedSequence:anIRInlinedSequence},$globals.IRInliningJSTranslator)});
  42216. //>>excludeEnd("ctx");
  42217. },
  42218. //>>excludeStart("ide", pragmas.excludeIdeData);
  42219. args: ["anIRInlinedSequence"],
  42220. source: "visitIRInlinedSequence: anIRInlinedSequence\x0a\x09anIRInlinedSequence instructions do: [ :each |\x0a\x09\x09self stream nextPutStatementWith: [ self visit: each ]]",
  42221. referencedClasses: [],
  42222. //>>excludeEnd("ide");
  42223. messageSends: ["do:", "instructions", "nextPutStatementWith:", "stream", "visit:"]
  42224. }),
  42225. $globals.IRInliningJSTranslator);
  42226. $core.addClass('IRSendInliner', $globals.Object, ['send', 'translator'], 'Compiler-Inlining');
  42227. //>>excludeStart("ide", pragmas.excludeIdeData);
  42228. $globals.IRSendInliner.comment="I inline some message sends and block closure arguments. I heavily rely on #perform: to dispatch inlining methods.";
  42229. //>>excludeEnd("ide");
  42230. $core.addMethod(
  42231. $core.method({
  42232. selector: "ifFalse:",
  42233. protocol: 'inlining',
  42234. fn: function (anIRInstruction){
  42235. var self=this;
  42236. function $IRInlinedIfFalse(){return $globals.IRInlinedIfFalse||(typeof IRInlinedIfFalse=="undefined"?nil:IRInlinedIfFalse)}
  42237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42238. return $core.withContext(function($ctx1) {
  42239. //>>excludeEnd("ctx");
  42240. var $1;
  42241. $1=self._inlinedSend_with_($recv($IRInlinedIfFalse())._new(),anIRInstruction);
  42242. return $1;
  42243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42244. }, function($ctx1) {$ctx1.fill(self,"ifFalse:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  42245. //>>excludeEnd("ctx");
  42246. },
  42247. //>>excludeStart("ide", pragmas.excludeIdeData);
  42248. args: ["anIRInstruction"],
  42249. source: "ifFalse: anIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfFalse new with: anIRInstruction",
  42250. referencedClasses: ["IRInlinedIfFalse"],
  42251. //>>excludeEnd("ide");
  42252. messageSends: ["inlinedSend:with:", "new"]
  42253. }),
  42254. $globals.IRSendInliner);
  42255. $core.addMethod(
  42256. $core.method({
  42257. selector: "ifFalse:ifTrue:",
  42258. protocol: 'inlining',
  42259. fn: function (anIRInstruction,anotherIRInstruction){
  42260. var self=this;
  42261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42262. return $core.withContext(function($ctx1) {
  42263. //>>excludeEnd("ctx");
  42264. var $1;
  42265. $1=self._perform_withArguments_("ifTrue:ifFalse:",[anotherIRInstruction,anIRInstruction]);
  42266. return $1;
  42267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42268. }, function($ctx1) {$ctx1.fill(self,"ifFalse:ifTrue:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  42269. //>>excludeEnd("ctx");
  42270. },
  42271. //>>excludeStart("ide", pragmas.excludeIdeData);
  42272. args: ["anIRInstruction", "anotherIRInstruction"],
  42273. source: "ifFalse: anIRInstruction ifTrue: anotherIRInstruction\x0a\x09^ self perform: #ifTrue:ifFalse: withArguments: { anotherIRInstruction. anIRInstruction }",
  42274. referencedClasses: [],
  42275. //>>excludeEnd("ide");
  42276. messageSends: ["perform:withArguments:"]
  42277. }),
  42278. $globals.IRSendInliner);
  42279. $core.addMethod(
  42280. $core.method({
  42281. selector: "ifNil:",
  42282. protocol: 'inlining',
  42283. fn: function (anIRInstruction){
  42284. var self=this;
  42285. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  42286. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  42287. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  42288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42289. return $core.withContext(function($ctx1) {
  42290. //>>excludeEnd("ctx");
  42291. var $2,$4,$5,$7,$8,$6,$9,$3,$1;
  42292. $2=$recv($IRInlinedIfNilIfNotNil())._new();
  42293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42294. $ctx1.sendIdx["new"]=1;
  42295. //>>excludeEnd("ctx");
  42296. $4=$recv($IRClosure())._new();
  42297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42298. $ctx1.sendIdx["new"]=2;
  42299. //>>excludeEnd("ctx");
  42300. $recv($4)._scope_($recv($recv(anIRInstruction)._scope())._copy());
  42301. $5=$4;
  42302. $7=$recv($IRBlockSequence())._new();
  42303. $recv($7)._add_($recv($recv(self._send())._instructions())._first());
  42304. $8=$recv($7)._yourself();
  42305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42306. $ctx1.sendIdx["yourself"]=1;
  42307. //>>excludeEnd("ctx");
  42308. $6=$8;
  42309. $recv($5)._add_($6);
  42310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42311. $ctx1.sendIdx["add:"]=1;
  42312. //>>excludeEnd("ctx");
  42313. $9=$recv($4)._yourself();
  42314. $3=$9;
  42315. $1=self._inlinedSend_with_with_($2,anIRInstruction,$3);
  42316. return $1;
  42317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42318. }, function($ctx1) {$ctx1.fill(self,"ifNil:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  42319. //>>excludeEnd("ctx");
  42320. },
  42321. //>>excludeStart("ide", pragmas.excludeIdeData);
  42322. args: ["anIRInstruction"],
  42323. source: "ifNil: anIRInstruction\x0a\x09^ self\x0a\x09\x09inlinedSend: IRInlinedIfNilIfNotNil new\x0a\x09\x09with: anIRInstruction\x0a\x09\x09with: (IRClosure new\x0a\x09\x09\x09scope: anIRInstruction scope copy;\x0a\x09\x09\x09add: (IRBlockSequence new\x0a\x09\x09\x09\x09add: self send instructions first;\x0a\x09\x09\x09\x09yourself);\x0a\x09\x09\x09yourself)",
  42324. referencedClasses: ["IRInlinedIfNilIfNotNil", "IRClosure", "IRBlockSequence"],
  42325. //>>excludeEnd("ide");
  42326. messageSends: ["inlinedSend:with:with:", "new", "scope:", "copy", "scope", "add:", "first", "instructions", "send", "yourself"]
  42327. }),
  42328. $globals.IRSendInliner);
  42329. $core.addMethod(
  42330. $core.method({
  42331. selector: "ifNil:ifNotNil:",
  42332. protocol: 'inlining',
  42333. fn: function (anIRInstruction,anotherIRInstruction){
  42334. var self=this;
  42335. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  42336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42337. return $core.withContext(function($ctx1) {
  42338. //>>excludeEnd("ctx");
  42339. var $1;
  42340. $1=self._inlinedSend_with_with_($recv($IRInlinedIfNilIfNotNil())._new(),anIRInstruction,anotherIRInstruction);
  42341. return $1;
  42342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42343. }, function($ctx1) {$ctx1.fill(self,"ifNil:ifNotNil:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  42344. //>>excludeEnd("ctx");
  42345. },
  42346. //>>excludeStart("ide", pragmas.excludeIdeData);
  42347. args: ["anIRInstruction", "anotherIRInstruction"],
  42348. source: "ifNil: anIRInstruction ifNotNil: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfNilIfNotNil new with: anIRInstruction with: anotherIRInstruction",
  42349. referencedClasses: ["IRInlinedIfNilIfNotNil"],
  42350. //>>excludeEnd("ide");
  42351. messageSends: ["inlinedSend:with:with:", "new"]
  42352. }),
  42353. $globals.IRSendInliner);
  42354. $core.addMethod(
  42355. $core.method({
  42356. selector: "ifNotNil:",
  42357. protocol: 'inlining',
  42358. fn: function (anIRInstruction){
  42359. var self=this;
  42360. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  42361. function $IRClosure(){return $globals.IRClosure||(typeof IRClosure=="undefined"?nil:IRClosure)}
  42362. function $IRBlockSequence(){return $globals.IRBlockSequence||(typeof IRBlockSequence=="undefined"?nil:IRBlockSequence)}
  42363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42364. return $core.withContext(function($ctx1) {
  42365. //>>excludeEnd("ctx");
  42366. var $2,$4,$5,$7,$8,$6,$9,$3,$1;
  42367. $2=$recv($IRInlinedIfNilIfNotNil())._new();
  42368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42369. $ctx1.sendIdx["new"]=1;
  42370. //>>excludeEnd("ctx");
  42371. $4=$recv($IRClosure())._new();
  42372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42373. $ctx1.sendIdx["new"]=2;
  42374. //>>excludeEnd("ctx");
  42375. $recv($4)._scope_($recv($recv(anIRInstruction)._scope())._copy());
  42376. $5=$4;
  42377. $7=$recv($IRBlockSequence())._new();
  42378. $recv($7)._add_($recv($recv(self._send())._instructions())._first());
  42379. $8=$recv($7)._yourself();
  42380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42381. $ctx1.sendIdx["yourself"]=1;
  42382. //>>excludeEnd("ctx");
  42383. $6=$8;
  42384. $recv($5)._add_($6);
  42385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42386. $ctx1.sendIdx["add:"]=1;
  42387. //>>excludeEnd("ctx");
  42388. $9=$recv($4)._yourself();
  42389. $3=$9;
  42390. $1=self._inlinedSend_with_with_($2,$3,anIRInstruction);
  42391. return $1;
  42392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42393. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  42394. //>>excludeEnd("ctx");
  42395. },
  42396. //>>excludeStart("ide", pragmas.excludeIdeData);
  42397. args: ["anIRInstruction"],
  42398. source: "ifNotNil: anIRInstruction\x0a\x09^ self\x0a\x09\x09inlinedSend: IRInlinedIfNilIfNotNil new\x0a\x09\x09with: (IRClosure new\x0a\x09\x09\x09scope: anIRInstruction scope copy;\x0a\x09\x09\x09add: (IRBlockSequence new\x0a\x09\x09\x09\x09add: self send instructions first;\x0a\x09\x09\x09\x09yourself);\x0a\x09\x09\x09yourself)\x0a\x09\x09with: anIRInstruction",
  42399. referencedClasses: ["IRInlinedIfNilIfNotNil", "IRClosure", "IRBlockSequence"],
  42400. //>>excludeEnd("ide");
  42401. messageSends: ["inlinedSend:with:with:", "new", "scope:", "copy", "scope", "add:", "first", "instructions", "send", "yourself"]
  42402. }),
  42403. $globals.IRSendInliner);
  42404. $core.addMethod(
  42405. $core.method({
  42406. selector: "ifNotNil:ifNil:",
  42407. protocol: 'inlining',
  42408. fn: function (anIRInstruction,anotherIRInstruction){
  42409. var self=this;
  42410. function $IRInlinedIfNilIfNotNil(){return $globals.IRInlinedIfNilIfNotNil||(typeof IRInlinedIfNilIfNotNil=="undefined"?nil:IRInlinedIfNilIfNotNil)}
  42411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42412. return $core.withContext(function($ctx1) {
  42413. //>>excludeEnd("ctx");
  42414. var $1;
  42415. $1=self._inlinedSend_with_with_($recv($IRInlinedIfNilIfNotNil())._new(),anotherIRInstruction,anIRInstruction);
  42416. return $1;
  42417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42418. }, function($ctx1) {$ctx1.fill(self,"ifNotNil:ifNil:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  42419. //>>excludeEnd("ctx");
  42420. },
  42421. //>>excludeStart("ide", pragmas.excludeIdeData);
  42422. args: ["anIRInstruction", "anotherIRInstruction"],
  42423. source: "ifNotNil: anIRInstruction ifNil: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfNilIfNotNil new with: anotherIRInstruction with: anIRInstruction",
  42424. referencedClasses: ["IRInlinedIfNilIfNotNil"],
  42425. //>>excludeEnd("ide");
  42426. messageSends: ["inlinedSend:with:with:", "new"]
  42427. }),
  42428. $globals.IRSendInliner);
  42429. $core.addMethod(
  42430. $core.method({
  42431. selector: "ifTrue:",
  42432. protocol: 'inlining',
  42433. fn: function (anIRInstruction){
  42434. var self=this;
  42435. function $IRInlinedIfTrue(){return $globals.IRInlinedIfTrue||(typeof IRInlinedIfTrue=="undefined"?nil:IRInlinedIfTrue)}
  42436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42437. return $core.withContext(function($ctx1) {
  42438. //>>excludeEnd("ctx");
  42439. var $1;
  42440. $1=self._inlinedSend_with_($recv($IRInlinedIfTrue())._new(),anIRInstruction);
  42441. return $1;
  42442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42443. }, function($ctx1) {$ctx1.fill(self,"ifTrue:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner)});
  42444. //>>excludeEnd("ctx");
  42445. },
  42446. //>>excludeStart("ide", pragmas.excludeIdeData);
  42447. args: ["anIRInstruction"],
  42448. source: "ifTrue: anIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfTrue new with: anIRInstruction",
  42449. referencedClasses: ["IRInlinedIfTrue"],
  42450. //>>excludeEnd("ide");
  42451. messageSends: ["inlinedSend:with:", "new"]
  42452. }),
  42453. $globals.IRSendInliner);
  42454. $core.addMethod(
  42455. $core.method({
  42456. selector: "ifTrue:ifFalse:",
  42457. protocol: 'inlining',
  42458. fn: function (anIRInstruction,anotherIRInstruction){
  42459. var self=this;
  42460. function $IRInlinedIfTrueIfFalse(){return $globals.IRInlinedIfTrueIfFalse||(typeof IRInlinedIfTrueIfFalse=="undefined"?nil:IRInlinedIfTrueIfFalse)}
  42461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42462. return $core.withContext(function($ctx1) {
  42463. //>>excludeEnd("ctx");
  42464. var $1;
  42465. $1=self._inlinedSend_with_with_($recv($IRInlinedIfTrueIfFalse())._new(),anIRInstruction,anotherIRInstruction);
  42466. return $1;
  42467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42468. }, function($ctx1) {$ctx1.fill(self,"ifTrue:ifFalse:",{anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction},$globals.IRSendInliner)});
  42469. //>>excludeEnd("ctx");
  42470. },
  42471. //>>excludeStart("ide", pragmas.excludeIdeData);
  42472. args: ["anIRInstruction", "anotherIRInstruction"],
  42473. source: "ifTrue: anIRInstruction ifFalse: anotherIRInstruction\x0a\x09^ self inlinedSend: IRInlinedIfTrueIfFalse new with: anIRInstruction with: anotherIRInstruction",
  42474. referencedClasses: ["IRInlinedIfTrueIfFalse"],
  42475. //>>excludeEnd("ide");
  42476. messageSends: ["inlinedSend:with:with:", "new"]
  42477. }),
  42478. $globals.IRSendInliner);
  42479. $core.addMethod(
  42480. $core.method({
  42481. selector: "inlineClosure:",
  42482. protocol: 'inlining',
  42483. fn: function (anIRClosure){
  42484. var self=this;
  42485. var inlinedClosure,sequence,statements;
  42486. function $IRTempDeclaration(){return $globals.IRTempDeclaration||(typeof IRTempDeclaration=="undefined"?nil:IRTempDeclaration)}
  42487. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  42488. function $IRVariable(){return $globals.IRVariable||(typeof IRVariable=="undefined"?nil:IRVariable)}
  42489. function $AliasVar(){return $globals.AliasVar||(typeof AliasVar=="undefined"?nil:AliasVar)}
  42490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42491. return $core.withContext(function($ctx1) {
  42492. //>>excludeEnd("ctx");
  42493. var $1,$2,$3,$4,$5,$7,$8,$6,$9,$11,$12,$14,$16,$17,$18,$19,$15,$13,$20,$22,$24,$25,$23,$21,$26,$10,$28,$27,$31,$30,$32,$29,$33,$36,$35,$34,$37;
  42494. inlinedClosure=self._inlinedClosure();
  42495. $1=inlinedClosure;
  42496. $2=$1;
  42497. $3=$recv(anIRClosure)._scope();
  42498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42499. $ctx1.sendIdx["scope"]=1;
  42500. //>>excludeEnd("ctx");
  42501. $recv($2)._scope_($3);
  42502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42503. $ctx1.sendIdx["scope:"]=1;
  42504. //>>excludeEnd("ctx");
  42505. $4=$recv($1)._parent_($recv(anIRClosure)._parent());
  42506. $recv($recv(anIRClosure)._tempDeclarations())._do_((function(each){
  42507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42508. return $core.withContext(function($ctx2) {
  42509. //>>excludeEnd("ctx");
  42510. return $recv(inlinedClosure)._add_(each);
  42511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42512. $ctx2.sendIdx["add:"]=1;
  42513. //>>excludeEnd("ctx");
  42514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42515. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  42516. //>>excludeEnd("ctx");
  42517. }));
  42518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42519. $ctx1.sendIdx["do:"]=1;
  42520. //>>excludeEnd("ctx");
  42521. sequence=self._inlinedSequence();
  42522. $recv($recv(anIRClosure)._arguments())._do_((function(each){
  42523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42524. return $core.withContext(function($ctx2) {
  42525. //>>excludeEnd("ctx");
  42526. $5=inlinedClosure;
  42527. $7=$recv($IRTempDeclaration())._new();
  42528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42529. $ctx2.sendIdx["new"]=1;
  42530. //>>excludeEnd("ctx");
  42531. $recv($7)._name_(each);
  42532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42533. $ctx2.sendIdx["name:"]=1;
  42534. //>>excludeEnd("ctx");
  42535. $8=$recv($7)._yourself();
  42536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42537. $ctx2.sendIdx["yourself"]=1;
  42538. //>>excludeEnd("ctx");
  42539. $6=$8;
  42540. $recv($5)._add_($6);
  42541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42542. $ctx2.sendIdx["add:"]=2;
  42543. //>>excludeEnd("ctx");
  42544. $9=sequence;
  42545. $11=$recv($IRAssignment())._new();
  42546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42547. $ctx2.sendIdx["new"]=2;
  42548. //>>excludeEnd("ctx");
  42549. $12=$11;
  42550. $14=$recv($IRVariable())._new();
  42551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42552. $ctx2.sendIdx["new"]=3;
  42553. //>>excludeEnd("ctx");
  42554. $16=$recv($AliasVar())._new();
  42555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42556. $ctx2.sendIdx["new"]=4;
  42557. //>>excludeEnd("ctx");
  42558. $17=$16;
  42559. $18=$recv(inlinedClosure)._scope();
  42560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42561. $ctx2.sendIdx["scope"]=2;
  42562. //>>excludeEnd("ctx");
  42563. $recv($17)._scope_($18);
  42564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42565. $ctx2.sendIdx["scope:"]=2;
  42566. //>>excludeEnd("ctx");
  42567. $recv($16)._name_(each);
  42568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42569. $ctx2.sendIdx["name:"]=2;
  42570. //>>excludeEnd("ctx");
  42571. $19=$recv($16)._yourself();
  42572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42573. $ctx2.sendIdx["yourself"]=2;
  42574. //>>excludeEnd("ctx");
  42575. $15=$19;
  42576. $13=$recv($14)._variable_($15);
  42577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42578. $ctx2.sendIdx["variable:"]=1;
  42579. //>>excludeEnd("ctx");
  42580. $recv($12)._add_($13);
  42581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42582. $ctx2.sendIdx["add:"]=4;
  42583. //>>excludeEnd("ctx");
  42584. $20=$11;
  42585. $22=$recv($IRVariable())._new();
  42586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42587. $ctx2.sendIdx["new"]=5;
  42588. //>>excludeEnd("ctx");
  42589. $24=$recv($AliasVar())._new();
  42590. $recv($24)._scope_($recv(inlinedClosure)._scope());
  42591. $recv($24)._name_("$receiver");
  42592. $25=$recv($24)._yourself();
  42593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42594. $ctx2.sendIdx["yourself"]=3;
  42595. //>>excludeEnd("ctx");
  42596. $23=$25;
  42597. $21=$recv($22)._variable_($23);
  42598. $recv($20)._add_($21);
  42599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42600. $ctx2.sendIdx["add:"]=5;
  42601. //>>excludeEnd("ctx");
  42602. $26=$recv($11)._yourself();
  42603. $10=$26;
  42604. return $recv($9)._add_($10);
  42605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42606. $ctx2.sendIdx["add:"]=3;
  42607. //>>excludeEnd("ctx");
  42608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42609. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  42610. //>>excludeEnd("ctx");
  42611. }));
  42612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42613. $ctx1.sendIdx["do:"]=2;
  42614. //>>excludeEnd("ctx");
  42615. $recv(inlinedClosure)._add_(sequence);
  42616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42617. $ctx1.sendIdx["add:"]=6;
  42618. //>>excludeEnd("ctx");
  42619. $28=$recv(anIRClosure)._instructions();
  42620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42621. $ctx1.sendIdx["instructions"]=2;
  42622. //>>excludeEnd("ctx");
  42623. $27=$recv($28)._last();
  42624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42625. $ctx1.sendIdx["last"]=1;
  42626. //>>excludeEnd("ctx");
  42627. statements=$recv($27)._instructions();
  42628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42629. $ctx1.sendIdx["instructions"]=1;
  42630. //>>excludeEnd("ctx");
  42631. $recv(statements)._ifNotEmpty_((function(){
  42632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42633. return $core.withContext(function($ctx2) {
  42634. //>>excludeEnd("ctx");
  42635. $recv($recv(statements)._allButLast())._do_((function(each){
  42636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42637. return $core.withContext(function($ctx3) {
  42638. //>>excludeEnd("ctx");
  42639. return $recv(sequence)._add_(each);
  42640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42641. $ctx3.sendIdx["add:"]=7;
  42642. //>>excludeEnd("ctx");
  42643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42644. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,4)});
  42645. //>>excludeEnd("ctx");
  42646. }));
  42647. $31=$recv(statements)._last();
  42648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42649. $ctx2.sendIdx["last"]=2;
  42650. //>>excludeEnd("ctx");
  42651. $30=$recv($31)._isReturn();
  42652. $29=$recv($30)._and_((function(){
  42653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42654. return $core.withContext(function($ctx3) {
  42655. //>>excludeEnd("ctx");
  42656. $32=$recv(statements)._last();
  42657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42658. $ctx3.sendIdx["last"]=3;
  42659. //>>excludeEnd("ctx");
  42660. return $recv($32)._isBlockReturn();
  42661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42662. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,5)});
  42663. //>>excludeEnd("ctx");
  42664. }));
  42665. if($core.assert($29)){
  42666. $33=sequence;
  42667. $36=$recv(statements)._last();
  42668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42669. $ctx2.sendIdx["last"]=4;
  42670. //>>excludeEnd("ctx");
  42671. $35=$recv($36)._instructions();
  42672. $34=$recv($35)._first();
  42673. return $recv($33)._add_($34);
  42674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42675. $ctx2.sendIdx["add:"]=8;
  42676. //>>excludeEnd("ctx");
  42677. } else {
  42678. return $recv(sequence)._add_($recv(statements)._last());
  42679. };
  42680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42681. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  42682. //>>excludeEnd("ctx");
  42683. }));
  42684. $37=inlinedClosure;
  42685. return $37;
  42686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42687. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,inlinedClosure:inlinedClosure,sequence:sequence,statements:statements},$globals.IRSendInliner)});
  42688. //>>excludeEnd("ctx");
  42689. },
  42690. //>>excludeStart("ide", pragmas.excludeIdeData);
  42691. args: ["anIRClosure"],
  42692. source: "inlineClosure: anIRClosure\x0a\x09| inlinedClosure sequence statements |\x0a\x0a\x09inlinedClosure := self inlinedClosure.\x0a\x09inlinedClosure \x0a\x09\x09scope: anIRClosure scope;\x0a\x09\x09parent: anIRClosure parent.\x0a\x0a\x09\x22Add the possible temp declarations\x22\x0a\x09anIRClosure tempDeclarations do: [ :each |\x0a\x09\x09\x09inlinedClosure add: each ].\x0a\x0a\x09\x22Add a block sequence\x22\x0a\x09sequence := self inlinedSequence.\x0a\x0a\x09\x22Map the closure arguments to the receiver of the message send\x22\x0a\x09anIRClosure arguments do: [ :each |\x0a\x09\x09inlinedClosure add: (IRTempDeclaration new name: each; yourself).\x0a\x09\x09sequence add: (IRAssignment new\x0a\x09\x09\x09add: (IRVariable new variable: (AliasVar new scope: inlinedClosure scope; name: each; yourself));\x0a\x09\x09\x09add: (IRVariable new variable: (AliasVar new scope: inlinedClosure scope; name: '$receiver'; yourself));\x0a\x09\x09\x09yourself) ].\x0a\x09\x09\x09\x0a\x09\x22To ensure the correct order of the closure instructions: first the temps then the sequence\x22\x0a\x09inlinedClosure add: sequence.\x0a\x0a\x09\x22Get all the statements\x22\x0a\x09statements := anIRClosure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements allButLast do: [ :each | sequence add: each ].\x0a\x0a\x09\x09\x22Inlined closures don't have implicit local returns\x22\x0a\x09\x09(statements last isReturn and: [ statements last isBlockReturn ])\x0a\x09\x09\x09ifTrue: [ sequence add: statements last instructions first ]\x0a\x09\x09\x09ifFalse: [ sequence add: statements last ] ].\x0a\x0a\x09^ inlinedClosure",
  42693. referencedClasses: ["IRTempDeclaration", "IRAssignment", "IRVariable", "AliasVar"],
  42694. //>>excludeEnd("ide");
  42695. messageSends: ["inlinedClosure", "scope:", "scope", "parent:", "parent", "do:", "tempDeclarations", "add:", "inlinedSequence", "arguments", "name:", "new", "yourself", "variable:", "instructions", "last", "ifNotEmpty:", "allButLast", "ifTrue:ifFalse:", "and:", "isReturn", "isBlockReturn", "first"]
  42696. }),
  42697. $globals.IRSendInliner);
  42698. $core.addMethod(
  42699. $core.method({
  42700. selector: "inlineSend:",
  42701. protocol: 'inlining',
  42702. fn: function (anIRSend){
  42703. var self=this;
  42704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42705. return $core.withContext(function($ctx1) {
  42706. //>>excludeEnd("ctx");
  42707. var $3,$2,$1;
  42708. self._send_(anIRSend);
  42709. $3=self._send();
  42710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42711. $ctx1.sendIdx["send"]=1;
  42712. //>>excludeEnd("ctx");
  42713. $2=$recv($3)._selector();
  42714. $1=self._perform_withArguments_($2,$recv($recv(self._send())._instructions())._allButFirst());
  42715. return $1;
  42716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42717. }, function($ctx1) {$ctx1.fill(self,"inlineSend:",{anIRSend:anIRSend},$globals.IRSendInliner)});
  42718. //>>excludeEnd("ctx");
  42719. },
  42720. //>>excludeStart("ide", pragmas.excludeIdeData);
  42721. args: ["anIRSend"],
  42722. source: "inlineSend: anIRSend\x0a\x09self send: anIRSend.\x0a\x09^ self\x0a\x09\x09perform: self send selector\x0a\x09\x09withArguments: self send instructions allButFirst",
  42723. referencedClasses: [],
  42724. //>>excludeEnd("ide");
  42725. messageSends: ["send:", "perform:withArguments:", "selector", "send", "allButFirst", "instructions"]
  42726. }),
  42727. $globals.IRSendInliner);
  42728. $core.addMethod(
  42729. $core.method({
  42730. selector: "inlinedClosure",
  42731. protocol: 'factory',
  42732. fn: function (){
  42733. var self=this;
  42734. function $IRInlinedClosure(){return $globals.IRInlinedClosure||(typeof IRInlinedClosure=="undefined"?nil:IRInlinedClosure)}
  42735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42736. return $core.withContext(function($ctx1) {
  42737. //>>excludeEnd("ctx");
  42738. var $1;
  42739. $1=$recv($IRInlinedClosure())._new();
  42740. return $1;
  42741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42742. }, function($ctx1) {$ctx1.fill(self,"inlinedClosure",{},$globals.IRSendInliner)});
  42743. //>>excludeEnd("ctx");
  42744. },
  42745. //>>excludeStart("ide", pragmas.excludeIdeData);
  42746. args: [],
  42747. source: "inlinedClosure\x0a\x09^ IRInlinedClosure new",
  42748. referencedClasses: ["IRInlinedClosure"],
  42749. //>>excludeEnd("ide");
  42750. messageSends: ["new"]
  42751. }),
  42752. $globals.IRSendInliner);
  42753. $core.addMethod(
  42754. $core.method({
  42755. selector: "inlinedSend:with:",
  42756. protocol: 'inlining',
  42757. fn: function (inlinedSend,anIRInstruction){
  42758. var self=this;
  42759. var inlinedClosure;
  42760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42761. return $core.withContext(function($ctx1) {
  42762. //>>excludeEnd("ctx");
  42763. var $1,$2,$5,$4,$3,$6,$7;
  42764. $1=$recv(anIRInstruction)._isClosure();
  42765. if(!$core.assert($1)){
  42766. self._inliningError_("Message argument should be a block");
  42767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42768. $ctx1.sendIdx["inliningError:"]=1;
  42769. //>>excludeEnd("ctx");
  42770. };
  42771. $2=$recv($recv($recv(anIRInstruction)._arguments())._size()).__eq((0));
  42772. if(!$core.assert($2)){
  42773. self._inliningError_("Inlined block should have zero argument");
  42774. };
  42775. inlinedClosure=$recv(self._translator())._visit_(self._inlineClosure_(anIRInstruction));
  42776. $5=self._send();
  42777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42778. $ctx1.sendIdx["send"]=1;
  42779. //>>excludeEnd("ctx");
  42780. $4=$recv($5)._instructions();
  42781. $3=$recv($4)._first();
  42782. $recv(inlinedSend)._add_($3);
  42783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42784. $ctx1.sendIdx["add:"]=1;
  42785. //>>excludeEnd("ctx");
  42786. $6=$recv(inlinedSend)._add_(inlinedClosure);
  42787. $recv(self._send())._replaceWith_(inlinedSend);
  42788. $7=$recv($recv(inlinedSend)._method())._internalVariables();
  42789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42790. $ctx1.sendIdx["internalVariables"]=1;
  42791. //>>excludeEnd("ctx");
  42792. $recv($7)._addAll_($recv(inlinedSend)._internalVariables());
  42793. return inlinedSend;
  42794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42795. }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,inlinedClosure:inlinedClosure},$globals.IRSendInliner)});
  42796. //>>excludeEnd("ctx");
  42797. },
  42798. //>>excludeStart("ide", pragmas.excludeIdeData);
  42799. args: ["inlinedSend", "anIRInstruction"],
  42800. source: "inlinedSend: inlinedSend with: anIRInstruction\x0a\x09| inlinedClosure |\x0a\x0a\x09anIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x09anIRInstruction arguments size = 0 ifFalse: [ self inliningError: 'Inlined block should have zero argument' ].\x0a\x0a\x09inlinedClosure := self translator visit: (self inlineClosure: anIRInstruction).\x0a\x0a\x09inlinedSend\x0a\x09\x09add: self send instructions first;\x0a\x09\x09add: inlinedClosure.\x0a\x0a\x09self send replaceWith: inlinedSend.\x0a\x09inlinedSend method internalVariables \x0a\x09\x09addAll: inlinedSend internalVariables.\x0a\x0a\x09^ inlinedSend",
  42801. referencedClasses: [],
  42802. //>>excludeEnd("ide");
  42803. messageSends: ["ifFalse:", "isClosure", "inliningError:", "=", "size", "arguments", "visit:", "translator", "inlineClosure:", "add:", "first", "instructions", "send", "replaceWith:", "addAll:", "internalVariables", "method"]
  42804. }),
  42805. $globals.IRSendInliner);
  42806. $core.addMethod(
  42807. $core.method({
  42808. selector: "inlinedSend:with:with:",
  42809. protocol: 'inlining',
  42810. fn: function (inlinedSend,anIRInstruction,anotherIRInstruction){
  42811. var self=this;
  42812. var inlinedClosure1,inlinedClosure2;
  42813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42814. return $core.withContext(function($ctx1) {
  42815. //>>excludeEnd("ctx");
  42816. var $1,$2,$3,$4,$7,$6,$5,$8,$9;
  42817. $1=$recv(anIRInstruction)._isClosure();
  42818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42819. $ctx1.sendIdx["isClosure"]=1;
  42820. //>>excludeEnd("ctx");
  42821. if(!$core.assert($1)){
  42822. self._inliningError_("Message argument should be a block");
  42823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42824. $ctx1.sendIdx["inliningError:"]=1;
  42825. //>>excludeEnd("ctx");
  42826. };
  42827. $2=$recv(anotherIRInstruction)._isClosure();
  42828. if(!$core.assert($2)){
  42829. self._inliningError_("Message argument should be a block");
  42830. };
  42831. $3=self._translator();
  42832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42833. $ctx1.sendIdx["translator"]=1;
  42834. //>>excludeEnd("ctx");
  42835. $4=self._inlineClosure_(anIRInstruction);
  42836. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42837. $ctx1.sendIdx["inlineClosure:"]=1;
  42838. //>>excludeEnd("ctx");
  42839. inlinedClosure1=$recv($3)._visit_($4);
  42840. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42841. $ctx1.sendIdx["visit:"]=1;
  42842. //>>excludeEnd("ctx");
  42843. inlinedClosure2=$recv(self._translator())._visit_(self._inlineClosure_(anotherIRInstruction));
  42844. $7=self._send();
  42845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42846. $ctx1.sendIdx["send"]=1;
  42847. //>>excludeEnd("ctx");
  42848. $6=$recv($7)._instructions();
  42849. $5=$recv($6)._first();
  42850. $recv(inlinedSend)._add_($5);
  42851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42852. $ctx1.sendIdx["add:"]=1;
  42853. //>>excludeEnd("ctx");
  42854. $recv(inlinedSend)._add_(inlinedClosure1);
  42855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42856. $ctx1.sendIdx["add:"]=2;
  42857. //>>excludeEnd("ctx");
  42858. $8=$recv(inlinedSend)._add_(inlinedClosure2);
  42859. $recv(self._send())._replaceWith_(inlinedSend);
  42860. $9=$recv($recv(inlinedSend)._method())._internalVariables();
  42861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42862. $ctx1.sendIdx["internalVariables"]=1;
  42863. //>>excludeEnd("ctx");
  42864. $recv($9)._addAll_($recv(inlinedSend)._internalVariables());
  42865. return inlinedSend;
  42866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42867. }, function($ctx1) {$ctx1.fill(self,"inlinedSend:with:with:",{inlinedSend:inlinedSend,anIRInstruction:anIRInstruction,anotherIRInstruction:anotherIRInstruction,inlinedClosure1:inlinedClosure1,inlinedClosure2:inlinedClosure2},$globals.IRSendInliner)});
  42868. //>>excludeEnd("ctx");
  42869. },
  42870. //>>excludeStart("ide", pragmas.excludeIdeData);
  42871. args: ["inlinedSend", "anIRInstruction", "anotherIRInstruction"],
  42872. source: "inlinedSend: inlinedSend with: anIRInstruction with: anotherIRInstruction\x0a\x09| inlinedClosure1 inlinedClosure2 |\x0a\x0a\x09anIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x09anotherIRInstruction isClosure ifFalse: [ self inliningError: 'Message argument should be a block' ].\x0a\x0a\x09inlinedClosure1 := self translator visit: (self inlineClosure: anIRInstruction).\x0a\x09inlinedClosure2 := self translator visit: (self inlineClosure: anotherIRInstruction).\x0a\x0a\x09inlinedSend\x0a\x09\x09add: self send instructions first;\x0a\x09\x09add: inlinedClosure1;\x0a\x09\x09add: inlinedClosure2.\x0a\x0a\x09self send replaceWith: inlinedSend.\x0a\x09inlinedSend method internalVariables \x0a\x09\x09addAll: inlinedSend internalVariables.\x0a\x09\x09\x0a\x09^ inlinedSend",
  42873. referencedClasses: [],
  42874. //>>excludeEnd("ide");
  42875. messageSends: ["ifFalse:", "isClosure", "inliningError:", "visit:", "translator", "inlineClosure:", "add:", "first", "instructions", "send", "replaceWith:", "addAll:", "internalVariables", "method"]
  42876. }),
  42877. $globals.IRSendInliner);
  42878. $core.addMethod(
  42879. $core.method({
  42880. selector: "inlinedSequence",
  42881. protocol: 'factory',
  42882. fn: function (){
  42883. var self=this;
  42884. function $IRInlinedSequence(){return $globals.IRInlinedSequence||(typeof IRInlinedSequence=="undefined"?nil:IRInlinedSequence)}
  42885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42886. return $core.withContext(function($ctx1) {
  42887. //>>excludeEnd("ctx");
  42888. var $1;
  42889. $1=$recv($IRInlinedSequence())._new();
  42890. return $1;
  42891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42892. }, function($ctx1) {$ctx1.fill(self,"inlinedSequence",{},$globals.IRSendInliner)});
  42893. //>>excludeEnd("ctx");
  42894. },
  42895. //>>excludeStart("ide", pragmas.excludeIdeData);
  42896. args: [],
  42897. source: "inlinedSequence\x0a\x09^ IRInlinedSequence new",
  42898. referencedClasses: ["IRInlinedSequence"],
  42899. //>>excludeEnd("ide");
  42900. messageSends: ["new"]
  42901. }),
  42902. $globals.IRSendInliner);
  42903. $core.addMethod(
  42904. $core.method({
  42905. selector: "inliningError:",
  42906. protocol: 'error handling',
  42907. fn: function (aString){
  42908. var self=this;
  42909. function $InliningError(){return $globals.InliningError||(typeof InliningError=="undefined"?nil:InliningError)}
  42910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42911. return $core.withContext(function($ctx1) {
  42912. //>>excludeEnd("ctx");
  42913. $recv($InliningError())._signal_(aString);
  42914. return self;
  42915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42916. }, function($ctx1) {$ctx1.fill(self,"inliningError:",{aString:aString},$globals.IRSendInliner)});
  42917. //>>excludeEnd("ctx");
  42918. },
  42919. //>>excludeStart("ide", pragmas.excludeIdeData);
  42920. args: ["aString"],
  42921. source: "inliningError: aString\x0a\x09InliningError signal: aString",
  42922. referencedClasses: ["InliningError"],
  42923. //>>excludeEnd("ide");
  42924. messageSends: ["signal:"]
  42925. }),
  42926. $globals.IRSendInliner);
  42927. $core.addMethod(
  42928. $core.method({
  42929. selector: "send",
  42930. protocol: 'accessing',
  42931. fn: function (){
  42932. var self=this;
  42933. var $1;
  42934. $1=self["@send"];
  42935. return $1;
  42936. },
  42937. //>>excludeStart("ide", pragmas.excludeIdeData);
  42938. args: [],
  42939. source: "send\x0a\x09^ send",
  42940. referencedClasses: [],
  42941. //>>excludeEnd("ide");
  42942. messageSends: []
  42943. }),
  42944. $globals.IRSendInliner);
  42945. $core.addMethod(
  42946. $core.method({
  42947. selector: "send:",
  42948. protocol: 'accessing',
  42949. fn: function (anIRSend){
  42950. var self=this;
  42951. self["@send"]=anIRSend;
  42952. return self;
  42953. },
  42954. //>>excludeStart("ide", pragmas.excludeIdeData);
  42955. args: ["anIRSend"],
  42956. source: "send: anIRSend\x0a\x09send := anIRSend",
  42957. referencedClasses: [],
  42958. //>>excludeEnd("ide");
  42959. messageSends: []
  42960. }),
  42961. $globals.IRSendInliner);
  42962. $core.addMethod(
  42963. $core.method({
  42964. selector: "translator",
  42965. protocol: 'accessing',
  42966. fn: function (){
  42967. var self=this;
  42968. var $1;
  42969. $1=self["@translator"];
  42970. return $1;
  42971. },
  42972. //>>excludeStart("ide", pragmas.excludeIdeData);
  42973. args: [],
  42974. source: "translator\x0a\x09^ translator",
  42975. referencedClasses: [],
  42976. //>>excludeEnd("ide");
  42977. messageSends: []
  42978. }),
  42979. $globals.IRSendInliner);
  42980. $core.addMethod(
  42981. $core.method({
  42982. selector: "translator:",
  42983. protocol: 'accessing',
  42984. fn: function (anASTTranslator){
  42985. var self=this;
  42986. self["@translator"]=anASTTranslator;
  42987. return self;
  42988. },
  42989. //>>excludeStart("ide", pragmas.excludeIdeData);
  42990. args: ["anASTTranslator"],
  42991. source: "translator: anASTTranslator\x0a\x09translator := anASTTranslator",
  42992. referencedClasses: [],
  42993. //>>excludeEnd("ide");
  42994. messageSends: []
  42995. }),
  42996. $globals.IRSendInliner);
  42997. $core.addMethod(
  42998. $core.method({
  42999. selector: "inlinedSelectors",
  43000. protocol: 'accessing',
  43001. fn: function (){
  43002. var self=this;
  43003. var $1;
  43004. $1=["ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:", "ifNil:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"];
  43005. return $1;
  43006. },
  43007. //>>excludeStart("ide", pragmas.excludeIdeData);
  43008. args: [],
  43009. source: "inlinedSelectors\x0a\x09^ #('ifTrue:' 'ifFalse:' 'ifTrue:ifFalse:' 'ifFalse:ifTrue:' 'ifNil:' 'ifNotNil:' 'ifNil:ifNotNil:' 'ifNotNil:ifNil:')",
  43010. referencedClasses: [],
  43011. //>>excludeEnd("ide");
  43012. messageSends: []
  43013. }),
  43014. $globals.IRSendInliner.klass);
  43015. $core.addMethod(
  43016. $core.method({
  43017. selector: "shouldInline:",
  43018. protocol: 'accessing',
  43019. fn: function (anIRInstruction){
  43020. var self=this;
  43021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43022. return $core.withContext(function($ctx1) {
  43023. //>>excludeEnd("ctx");
  43024. var $1,$2;
  43025. var $early={};
  43026. try {
  43027. $1=$recv(self._inlinedSelectors())._includes_($recv(anIRInstruction)._selector());
  43028. if(!$core.assert($1)){
  43029. return false;
  43030. };
  43031. $recv($recv($recv(anIRInstruction)._instructions())._allButFirst())._do_((function(each){
  43032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43033. return $core.withContext(function($ctx2) {
  43034. //>>excludeEnd("ctx");
  43035. $2=$recv(each)._isClosure();
  43036. if(!$core.assert($2)){
  43037. throw $early=[false];
  43038. };
  43039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43040. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  43041. //>>excludeEnd("ctx");
  43042. }));
  43043. return true;
  43044. }
  43045. catch(e) {if(e===$early)return e[0]; throw e}
  43046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43047. }, function($ctx1) {$ctx1.fill(self,"shouldInline:",{anIRInstruction:anIRInstruction},$globals.IRSendInliner.klass)});
  43048. //>>excludeEnd("ctx");
  43049. },
  43050. //>>excludeStart("ide", pragmas.excludeIdeData);
  43051. args: ["anIRInstruction"],
  43052. source: "shouldInline: anIRInstruction\x0a\x09(self inlinedSelectors includes: anIRInstruction selector) ifFalse: [ ^ false ].\x0a\x09anIRInstruction instructions allButFirst do: [ :each |\x0a\x09\x09each isClosure ifFalse: [ ^ false ]].\x0a\x09^ true",
  43053. referencedClasses: [],
  43054. //>>excludeEnd("ide");
  43055. messageSends: ["ifFalse:", "includes:", "inlinedSelectors", "selector", "do:", "allButFirst", "instructions", "isClosure"]
  43056. }),
  43057. $globals.IRSendInliner.klass);
  43058. $core.addClass('IRAssignmentInliner', $globals.IRSendInliner, ['assignment'], 'Compiler-Inlining');
  43059. //>>excludeStart("ide", pragmas.excludeIdeData);
  43060. $globals.IRAssignmentInliner.comment="I inline message sends together with assignments by moving them around into the inline closure instructions.\x0a\x0a##Example\x0a\x0a\x09foo\x0a\x09\x09| a |\x0a\x09\x09a := true ifTrue: [ 1 ]\x0a\x0aWill produce:\x0a\x0a\x09if($core.assert(true) {\x0a\x09\x09a = 1;\x0a\x09};";
  43061. //>>excludeEnd("ide");
  43062. $core.addMethod(
  43063. $core.method({
  43064. selector: "assignment",
  43065. protocol: 'accessing',
  43066. fn: function (){
  43067. var self=this;
  43068. var $1;
  43069. $1=self["@assignment"];
  43070. return $1;
  43071. },
  43072. //>>excludeStart("ide", pragmas.excludeIdeData);
  43073. args: [],
  43074. source: "assignment\x0a\x09^ assignment",
  43075. referencedClasses: [],
  43076. //>>excludeEnd("ide");
  43077. messageSends: []
  43078. }),
  43079. $globals.IRAssignmentInliner);
  43080. $core.addMethod(
  43081. $core.method({
  43082. selector: "assignment:",
  43083. protocol: 'accessing',
  43084. fn: function (aNode){
  43085. var self=this;
  43086. self["@assignment"]=aNode;
  43087. return self;
  43088. },
  43089. //>>excludeStart("ide", pragmas.excludeIdeData);
  43090. args: ["aNode"],
  43091. source: "assignment: aNode\x0a\x09assignment := aNode",
  43092. referencedClasses: [],
  43093. //>>excludeEnd("ide");
  43094. messageSends: []
  43095. }),
  43096. $globals.IRAssignmentInliner);
  43097. $core.addMethod(
  43098. $core.method({
  43099. selector: "inlineAssignment:",
  43100. protocol: 'inlining',
  43101. fn: function (anIRAssignment){
  43102. var self=this;
  43103. var inlinedAssignment;
  43104. function $IRInlinedAssignment(){return $globals.IRInlinedAssignment||(typeof IRInlinedAssignment=="undefined"?nil:IRInlinedAssignment)}
  43105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43106. return $core.withContext(function($ctx1) {
  43107. //>>excludeEnd("ctx");
  43108. var $1,$2;
  43109. self._assignment_(anIRAssignment);
  43110. inlinedAssignment=$recv($IRInlinedAssignment())._new();
  43111. $1=$recv(anIRAssignment)._instructions();
  43112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43113. $ctx1.sendIdx["instructions"]=1;
  43114. //>>excludeEnd("ctx");
  43115. $recv($1)._do_((function(each){
  43116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43117. return $core.withContext(function($ctx2) {
  43118. //>>excludeEnd("ctx");
  43119. return $recv(inlinedAssignment)._add_(each);
  43120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43121. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  43122. //>>excludeEnd("ctx");
  43123. }));
  43124. $recv(anIRAssignment)._replaceWith_(inlinedAssignment);
  43125. self._inlineSend_($recv($recv(inlinedAssignment)._instructions())._last());
  43126. $2=inlinedAssignment;
  43127. return $2;
  43128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43129. }, function($ctx1) {$ctx1.fill(self,"inlineAssignment:",{anIRAssignment:anIRAssignment,inlinedAssignment:inlinedAssignment},$globals.IRAssignmentInliner)});
  43130. //>>excludeEnd("ctx");
  43131. },
  43132. //>>excludeStart("ide", pragmas.excludeIdeData);
  43133. args: ["anIRAssignment"],
  43134. source: "inlineAssignment: anIRAssignment\x0a\x09| inlinedAssignment |\x0a\x09self assignment: anIRAssignment.\x0a\x09inlinedAssignment := IRInlinedAssignment new.\x0a\x09anIRAssignment instructions do: [ :each |\x0a\x09\x09inlinedAssignment add: each ].\x0a\x09anIRAssignment replaceWith: inlinedAssignment.\x0a\x09self inlineSend: inlinedAssignment instructions last.\x0a\x09^ inlinedAssignment",
  43135. referencedClasses: ["IRInlinedAssignment"],
  43136. //>>excludeEnd("ide");
  43137. messageSends: ["assignment:", "new", "do:", "instructions", "add:", "replaceWith:", "inlineSend:", "last"]
  43138. }),
  43139. $globals.IRAssignmentInliner);
  43140. $core.addMethod(
  43141. $core.method({
  43142. selector: "inlineClosure:",
  43143. protocol: 'inlining',
  43144. fn: function (anIRClosure){
  43145. var self=this;
  43146. var inlinedClosure,statements;
  43147. function $IRAssignment(){return $globals.IRAssignment||(typeof IRAssignment=="undefined"?nil:IRAssignment)}
  43148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43149. return $core.withContext(function($ctx1) {
  43150. //>>excludeEnd("ctx");
  43151. var $2,$1,$4,$3,$5,$7,$8,$6,$9;
  43152. inlinedClosure=(
  43153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43154. $ctx1.supercall = true,
  43155. //>>excludeEnd("ctx");
  43156. $globals.IRAssignmentInliner.superclass.fn.prototype._inlineClosure_.apply($recv(self), [anIRClosure]));
  43157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43158. $ctx1.supercall = false;
  43159. //>>excludeEnd("ctx");;
  43160. $2=$recv(inlinedClosure)._instructions();
  43161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43162. $ctx1.sendIdx["instructions"]=2;
  43163. //>>excludeEnd("ctx");
  43164. $1=$recv($2)._last();
  43165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43166. $ctx1.sendIdx["last"]=1;
  43167. //>>excludeEnd("ctx");
  43168. statements=$recv($1)._instructions();
  43169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43170. $ctx1.sendIdx["instructions"]=1;
  43171. //>>excludeEnd("ctx");
  43172. $recv(statements)._ifNotEmpty_((function(){
  43173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43174. return $core.withContext(function($ctx2) {
  43175. //>>excludeEnd("ctx");
  43176. $4=$recv(statements)._last();
  43177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43178. $ctx2.sendIdx["last"]=2;
  43179. //>>excludeEnd("ctx");
  43180. $3=$recv($4)._canBeAssigned();
  43181. if($core.assert($3)){
  43182. $5=$recv(statements)._last();
  43183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43184. $ctx2.sendIdx["last"]=3;
  43185. //>>excludeEnd("ctx");
  43186. $7=$recv($IRAssignment())._new();
  43187. $recv($7)._add_($recv($recv(self._assignment())._instructions())._first());
  43188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43189. $ctx2.sendIdx["add:"]=1;
  43190. //>>excludeEnd("ctx");
  43191. $recv($7)._add_($recv($recv(statements)._last())._copy());
  43192. $8=$recv($7)._yourself();
  43193. $6=$8;
  43194. return $recv($5)._replaceWith_($6);
  43195. };
  43196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43197. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43198. //>>excludeEnd("ctx");
  43199. }));
  43200. $9=inlinedClosure;
  43201. return $9;
  43202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43203. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,inlinedClosure:inlinedClosure,statements:statements},$globals.IRAssignmentInliner)});
  43204. //>>excludeEnd("ctx");
  43205. },
  43206. //>>excludeStart("ide", pragmas.excludeIdeData);
  43207. args: ["anIRClosure"],
  43208. source: "inlineClosure: anIRClosure\x0a\x09| inlinedClosure statements |\x0a\x0a\x09inlinedClosure := super inlineClosure: anIRClosure.\x0a\x09statements := inlinedClosure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements last canBeAssigned ifTrue: [\x0a\x09\x09\x09statements last replaceWith: (IRAssignment new\x0a\x09\x09\x09\x09add: self assignment instructions first;\x0a\x09\x09\x09\x09add: statements last copy;\x0a\x09\x09\x09\x09yourself) ] ].\x0a\x0a\x09^ inlinedClosure",
  43209. referencedClasses: ["IRAssignment"],
  43210. //>>excludeEnd("ide");
  43211. messageSends: ["inlineClosure:", "instructions", "last", "ifNotEmpty:", "ifTrue:", "canBeAssigned", "replaceWith:", "add:", "new", "first", "assignment", "copy", "yourself"]
  43212. }),
  43213. $globals.IRAssignmentInliner);
  43214. $core.addClass('IRReturnInliner', $globals.IRSendInliner, [], 'Compiler-Inlining');
  43215. //>>excludeStart("ide", pragmas.excludeIdeData);
  43216. $globals.IRReturnInliner.comment="I inline message sends with inlined closure together with a return instruction.";
  43217. //>>excludeEnd("ide");
  43218. $core.addMethod(
  43219. $core.method({
  43220. selector: "inlineClosure:",
  43221. protocol: 'inlining',
  43222. fn: function (anIRClosure){
  43223. var self=this;
  43224. var closure,statements;
  43225. function $IRReturn(){return $globals.IRReturn||(typeof IRReturn=="undefined"?nil:IRReturn)}
  43226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43227. return $core.withContext(function($ctx1) {
  43228. //>>excludeEnd("ctx");
  43229. var $1,$3,$2,$4,$5,$6,$7;
  43230. closure=(
  43231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43232. $ctx1.supercall = true,
  43233. //>>excludeEnd("ctx");
  43234. $globals.IRReturnInliner.superclass.fn.prototype._inlineClosure_.apply($recv(self), [anIRClosure]));
  43235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43236. $ctx1.supercall = false;
  43237. //>>excludeEnd("ctx");;
  43238. $1=$recv($recv(closure)._instructions())._last();
  43239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43240. $ctx1.sendIdx["last"]=1;
  43241. //>>excludeEnd("ctx");
  43242. statements=$recv($1)._instructions();
  43243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43244. $ctx1.sendIdx["instructions"]=1;
  43245. //>>excludeEnd("ctx");
  43246. $recv(statements)._ifNotEmpty_((function(){
  43247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43248. return $core.withContext(function($ctx2) {
  43249. //>>excludeEnd("ctx");
  43250. $3=$recv(statements)._last();
  43251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43252. $ctx2.sendIdx["last"]=2;
  43253. //>>excludeEnd("ctx");
  43254. $2=$recv($3)._isReturn();
  43255. if(!$core.assert($2)){
  43256. $4=$recv(statements)._last();
  43257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43258. $ctx2.sendIdx["last"]=3;
  43259. //>>excludeEnd("ctx");
  43260. $5=$recv($IRReturn())._new();
  43261. $recv($5)._add_($recv($recv(statements)._last())._copy());
  43262. $6=$recv($5)._yourself();
  43263. return $recv($4)._replaceWith_($6);
  43264. };
  43265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43266. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43267. //>>excludeEnd("ctx");
  43268. }));
  43269. $7=closure;
  43270. return $7;
  43271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43272. }, function($ctx1) {$ctx1.fill(self,"inlineClosure:",{anIRClosure:anIRClosure,closure:closure,statements:statements},$globals.IRReturnInliner)});
  43273. //>>excludeEnd("ctx");
  43274. },
  43275. //>>excludeStart("ide", pragmas.excludeIdeData);
  43276. args: ["anIRClosure"],
  43277. source: "inlineClosure: anIRClosure\x0a\x09| closure statements |\x0a\x0a\x09closure := super inlineClosure: anIRClosure.\x0a\x09statements := closure instructions last instructions.\x0a\x09\x0a\x09statements ifNotEmpty: [\x0a\x09\x09statements last isReturn\x0a\x09\x09\x09ifFalse: [ statements last replaceWith: (IRReturn new\x0a\x09\x09\x09\x09add: statements last copy;\x0a\x09\x09\x09\x09yourself)] ].\x0a\x0a\x09^ closure",
  43278. referencedClasses: ["IRReturn"],
  43279. //>>excludeEnd("ide");
  43280. messageSends: ["inlineClosure:", "instructions", "last", "ifNotEmpty:", "ifFalse:", "isReturn", "replaceWith:", "add:", "new", "copy", "yourself"]
  43281. }),
  43282. $globals.IRReturnInliner);
  43283. $core.addMethod(
  43284. $core.method({
  43285. selector: "inlineReturn:",
  43286. protocol: 'inlining',
  43287. fn: function (anIRReturn){
  43288. var self=this;
  43289. var return_;
  43290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43291. return $core.withContext(function($ctx1) {
  43292. //>>excludeEnd("ctx");
  43293. var $1,$2;
  43294. return_=self._inlinedReturn();
  43295. $1=$recv(anIRReturn)._instructions();
  43296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43297. $ctx1.sendIdx["instructions"]=1;
  43298. //>>excludeEnd("ctx");
  43299. $recv($1)._do_((function(each){
  43300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43301. return $core.withContext(function($ctx2) {
  43302. //>>excludeEnd("ctx");
  43303. return $recv(return_)._add_(each);
  43304. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43305. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  43306. //>>excludeEnd("ctx");
  43307. }));
  43308. $recv(anIRReturn)._replaceWith_(return_);
  43309. self._inlineSend_($recv($recv(return_)._instructions())._last());
  43310. $2=return_;
  43311. return $2;
  43312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43313. }, function($ctx1) {$ctx1.fill(self,"inlineReturn:",{anIRReturn:anIRReturn,return_:return_},$globals.IRReturnInliner)});
  43314. //>>excludeEnd("ctx");
  43315. },
  43316. //>>excludeStart("ide", pragmas.excludeIdeData);
  43317. args: ["anIRReturn"],
  43318. source: "inlineReturn: anIRReturn\x0a\x09| return |\x0a\x09return := self inlinedReturn.\x0a\x09anIRReturn instructions do: [ :each |\x0a\x09\x09return add: each ].\x0a\x09anIRReturn replaceWith: return.\x0a\x09self inlineSend: return instructions last.\x0a\x09^ return",
  43319. referencedClasses: [],
  43320. //>>excludeEnd("ide");
  43321. messageSends: ["inlinedReturn", "do:", "instructions", "add:", "replaceWith:", "inlineSend:", "last"]
  43322. }),
  43323. $globals.IRReturnInliner);
  43324. $core.addMethod(
  43325. $core.method({
  43326. selector: "inlinedReturn",
  43327. protocol: 'factory',
  43328. fn: function (){
  43329. var self=this;
  43330. function $IRInlinedReturn(){return $globals.IRInlinedReturn||(typeof IRInlinedReturn=="undefined"?nil:IRInlinedReturn)}
  43331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43332. return $core.withContext(function($ctx1) {
  43333. //>>excludeEnd("ctx");
  43334. var $1;
  43335. $1=$recv($IRInlinedReturn())._new();
  43336. return $1;
  43337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43338. }, function($ctx1) {$ctx1.fill(self,"inlinedReturn",{},$globals.IRReturnInliner)});
  43339. //>>excludeEnd("ctx");
  43340. },
  43341. //>>excludeStart("ide", pragmas.excludeIdeData);
  43342. args: [],
  43343. source: "inlinedReturn\x0a\x09^ IRInlinedReturn new",
  43344. referencedClasses: ["IRInlinedReturn"],
  43345. //>>excludeEnd("ide");
  43346. messageSends: ["new"]
  43347. }),
  43348. $globals.IRReturnInliner);
  43349. $core.addClass('InliningCodeGenerator', $globals.CodeGenerator, [], 'Compiler-Inlining');
  43350. //>>excludeStart("ide", pragmas.excludeIdeData);
  43351. $globals.InliningCodeGenerator.comment="I am a specialized code generator that uses inlining to produce more optimized JavaScript output";
  43352. //>>excludeEnd("ide");
  43353. $core.addMethod(
  43354. $core.method({
  43355. selector: "compileNode:",
  43356. protocol: 'compiling',
  43357. fn: function (aNode){
  43358. var self=this;
  43359. var ir,stream;
  43360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43361. return $core.withContext(function($ctx1) {
  43362. //>>excludeEnd("ctx");
  43363. var $2,$3,$1;
  43364. $recv(self._semanticAnalyzer())._visit_(aNode);
  43365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43366. $ctx1.sendIdx["visit:"]=1;
  43367. //>>excludeEnd("ctx");
  43368. ir=$recv(self._translator())._visit_(aNode);
  43369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43370. $ctx1.sendIdx["visit:"]=2;
  43371. //>>excludeEnd("ctx");
  43372. $recv(self._inliner())._visit_(ir);
  43373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43374. $ctx1.sendIdx["visit:"]=3;
  43375. //>>excludeEnd("ctx");
  43376. $2=self._irTranslator();
  43377. $recv($2)._currentClass_(self._currentClass());
  43378. $recv($2)._visit_(ir);
  43379. $3=$recv($2)._contents();
  43380. $1=$3;
  43381. return $1;
  43382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43383. }, function($ctx1) {$ctx1.fill(self,"compileNode:",{aNode:aNode,ir:ir,stream:stream},$globals.InliningCodeGenerator)});
  43384. //>>excludeEnd("ctx");
  43385. },
  43386. //>>excludeStart("ide", pragmas.excludeIdeData);
  43387. args: ["aNode"],
  43388. source: "compileNode: aNode\x0a\x09| ir stream |\x0a\x0a\x09self semanticAnalyzer visit: aNode.\x0a\x09ir := self translator visit: aNode.\x0a\x09self inliner visit: ir.\x0a\x0a\x09^ self irTranslator\x0a\x09\x09currentClass: self currentClass;\x0a\x09\x09visit: ir;\x0a\x09\x09contents",
  43389. referencedClasses: [],
  43390. //>>excludeEnd("ide");
  43391. messageSends: ["visit:", "semanticAnalyzer", "translator", "inliner", "currentClass:", "irTranslator", "currentClass", "contents"]
  43392. }),
  43393. $globals.InliningCodeGenerator);
  43394. $core.addMethod(
  43395. $core.method({
  43396. selector: "inliner",
  43397. protocol: 'compiling',
  43398. fn: function (){
  43399. var self=this;
  43400. function $IRInliner(){return $globals.IRInliner||(typeof IRInliner=="undefined"?nil:IRInliner)}
  43401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43402. return $core.withContext(function($ctx1) {
  43403. //>>excludeEnd("ctx");
  43404. var $1;
  43405. $1=$recv($IRInliner())._new();
  43406. return $1;
  43407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43408. }, function($ctx1) {$ctx1.fill(self,"inliner",{},$globals.InliningCodeGenerator)});
  43409. //>>excludeEnd("ctx");
  43410. },
  43411. //>>excludeStart("ide", pragmas.excludeIdeData);
  43412. args: [],
  43413. source: "inliner\x0a\x09^ IRInliner new",
  43414. referencedClasses: ["IRInliner"],
  43415. //>>excludeEnd("ide");
  43416. messageSends: ["new"]
  43417. }),
  43418. $globals.InliningCodeGenerator);
  43419. $core.addMethod(
  43420. $core.method({
  43421. selector: "irTranslator",
  43422. protocol: 'compiling',
  43423. fn: function (){
  43424. var self=this;
  43425. function $IRInliningJSTranslator(){return $globals.IRInliningJSTranslator||(typeof IRInliningJSTranslator=="undefined"?nil:IRInliningJSTranslator)}
  43426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43427. return $core.withContext(function($ctx1) {
  43428. //>>excludeEnd("ctx");
  43429. var $1;
  43430. $1=$recv($IRInliningJSTranslator())._new();
  43431. return $1;
  43432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43433. }, function($ctx1) {$ctx1.fill(self,"irTranslator",{},$globals.InliningCodeGenerator)});
  43434. //>>excludeEnd("ctx");
  43435. },
  43436. //>>excludeStart("ide", pragmas.excludeIdeData);
  43437. args: [],
  43438. source: "irTranslator\x0a\x09^ IRInliningJSTranslator new",
  43439. referencedClasses: ["IRInliningJSTranslator"],
  43440. //>>excludeEnd("ide");
  43441. messageSends: ["new"]
  43442. }),
  43443. $globals.InliningCodeGenerator);
  43444. });
  43445. define("amber_core/Compiler-Semantic", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Compiler-Core"], function($boot){
  43446. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  43447. var smalltalk=$core,_st=$recv,globals=$globals;
  43448. $core.addPackage('Compiler-Semantic');
  43449. $core.packages["Compiler-Semantic"].transport = {"type":"amd","amdNamespace":"amber_core"};
  43450. $core.addClass('LexicalScope', $globals.Object, ['node', 'instruction', 'temps', 'args', 'outerScope', 'blockIndex'], 'Compiler-Semantic');
  43451. //>>excludeStart("ide", pragmas.excludeIdeData);
  43452. $globals.LexicalScope.comment="I represent a lexical scope where variable names are associated with ScopeVars\x0aInstances are used for block scopes. Method scopes are instances of MethodLexicalScope.\x0a\x0aI am attached to a ScopeVar and method/block nodes.\x0aEach context (method/closure) get a fresh scope that inherits from its outer scope.";
  43453. //>>excludeEnd("ide");
  43454. $core.addMethod(
  43455. $core.method({
  43456. selector: "addArg:",
  43457. protocol: 'adding',
  43458. fn: function (aString){
  43459. var self=this;
  43460. function $ArgVar(){return $globals.ArgVar||(typeof ArgVar=="undefined"?nil:ArgVar)}
  43461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43462. return $core.withContext(function($ctx1) {
  43463. //>>excludeEnd("ctx");
  43464. var $1;
  43465. $1=self._args();
  43466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43467. $ctx1.sendIdx["args"]=1;
  43468. //>>excludeEnd("ctx");
  43469. $recv($1)._at_put_(aString,$recv($ArgVar())._on_(aString));
  43470. $recv($recv(self._args())._at_(aString))._scope_(self);
  43471. return self;
  43472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43473. }, function($ctx1) {$ctx1.fill(self,"addArg:",{aString:aString},$globals.LexicalScope)});
  43474. //>>excludeEnd("ctx");
  43475. },
  43476. //>>excludeStart("ide", pragmas.excludeIdeData);
  43477. args: ["aString"],
  43478. source: "addArg: aString\x0a\x09self args at: aString put: (ArgVar on: aString).\x0a\x09(self args at: aString) scope: self",
  43479. referencedClasses: ["ArgVar"],
  43480. //>>excludeEnd("ide");
  43481. messageSends: ["at:put:", "args", "on:", "scope:", "at:"]
  43482. }),
  43483. $globals.LexicalScope);
  43484. $core.addMethod(
  43485. $core.method({
  43486. selector: "addTemp:",
  43487. protocol: 'adding',
  43488. fn: function (aString){
  43489. var self=this;
  43490. function $TempVar(){return $globals.TempVar||(typeof TempVar=="undefined"?nil:TempVar)}
  43491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43492. return $core.withContext(function($ctx1) {
  43493. //>>excludeEnd("ctx");
  43494. var $1;
  43495. $1=self._temps();
  43496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43497. $ctx1.sendIdx["temps"]=1;
  43498. //>>excludeEnd("ctx");
  43499. $recv($1)._at_put_(aString,$recv($TempVar())._on_(aString));
  43500. $recv($recv(self._temps())._at_(aString))._scope_(self);
  43501. return self;
  43502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43503. }, function($ctx1) {$ctx1.fill(self,"addTemp:",{aString:aString},$globals.LexicalScope)});
  43504. //>>excludeEnd("ctx");
  43505. },
  43506. //>>excludeStart("ide", pragmas.excludeIdeData);
  43507. args: ["aString"],
  43508. source: "addTemp: aString\x0a\x09self temps at: aString put: (TempVar on: aString).\x0a\x09(self temps at: aString) scope: self",
  43509. referencedClasses: ["TempVar"],
  43510. //>>excludeEnd("ide");
  43511. messageSends: ["at:put:", "temps", "on:", "scope:", "at:"]
  43512. }),
  43513. $globals.LexicalScope);
  43514. $core.addMethod(
  43515. $core.method({
  43516. selector: "alias",
  43517. protocol: 'accessing',
  43518. fn: function (){
  43519. var self=this;
  43520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43521. return $core.withContext(function($ctx1) {
  43522. //>>excludeEnd("ctx");
  43523. var $1;
  43524. $1="$ctx".__comma($recv(self._scopeLevel())._asString());
  43525. return $1;
  43526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43527. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.LexicalScope)});
  43528. //>>excludeEnd("ctx");
  43529. },
  43530. //>>excludeStart("ide", pragmas.excludeIdeData);
  43531. args: [],
  43532. source: "alias\x0a\x09^ '$ctx', self scopeLevel asString",
  43533. referencedClasses: [],
  43534. //>>excludeEnd("ide");
  43535. messageSends: [",", "asString", "scopeLevel"]
  43536. }),
  43537. $globals.LexicalScope);
  43538. $core.addMethod(
  43539. $core.method({
  43540. selector: "allVariableNames",
  43541. protocol: 'accessing',
  43542. fn: function (){
  43543. var self=this;
  43544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43545. return $core.withContext(function($ctx1) {
  43546. //>>excludeEnd("ctx");
  43547. var $2,$1;
  43548. $2=$recv(self._args())._keys();
  43549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43550. $ctx1.sendIdx["keys"]=1;
  43551. //>>excludeEnd("ctx");
  43552. $1=$recv($2).__comma($recv(self._temps())._keys());
  43553. return $1;
  43554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43555. }, function($ctx1) {$ctx1.fill(self,"allVariableNames",{},$globals.LexicalScope)});
  43556. //>>excludeEnd("ctx");
  43557. },
  43558. //>>excludeStart("ide", pragmas.excludeIdeData);
  43559. args: [],
  43560. source: "allVariableNames\x0a\x09^ self args keys, self temps keys",
  43561. referencedClasses: [],
  43562. //>>excludeEnd("ide");
  43563. messageSends: [",", "keys", "args", "temps"]
  43564. }),
  43565. $globals.LexicalScope);
  43566. $core.addMethod(
  43567. $core.method({
  43568. selector: "args",
  43569. protocol: 'accessing',
  43570. fn: function (){
  43571. var self=this;
  43572. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  43573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43574. return $core.withContext(function($ctx1) {
  43575. //>>excludeEnd("ctx");
  43576. var $2,$1,$receiver;
  43577. $2=self["@args"];
  43578. if(($receiver = $2) == null || $receiver.isNil){
  43579. self["@args"]=$recv($Dictionary())._new();
  43580. $1=self["@args"];
  43581. } else {
  43582. $1=$2;
  43583. };
  43584. return $1;
  43585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43586. }, function($ctx1) {$ctx1.fill(self,"args",{},$globals.LexicalScope)});
  43587. //>>excludeEnd("ctx");
  43588. },
  43589. //>>excludeStart("ide", pragmas.excludeIdeData);
  43590. args: [],
  43591. source: "args\x0a\x09^ args ifNil: [ args := Dictionary new ]",
  43592. referencedClasses: ["Dictionary"],
  43593. //>>excludeEnd("ide");
  43594. messageSends: ["ifNil:", "new"]
  43595. }),
  43596. $globals.LexicalScope);
  43597. $core.addMethod(
  43598. $core.method({
  43599. selector: "bindingFor:",
  43600. protocol: 'accessing',
  43601. fn: function (aStringOrNode){
  43602. var self=this;
  43603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43604. return $core.withContext(function($ctx1) {
  43605. //>>excludeEnd("ctx");
  43606. var $2,$3,$4,$5,$1;
  43607. $2=self._pseudoVars();
  43608. $3=$recv(aStringOrNode)._value();
  43609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43610. $ctx1.sendIdx["value"]=1;
  43611. //>>excludeEnd("ctx");
  43612. $1=$recv($2)._at_ifAbsent_($3,(function(){
  43613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43614. return $core.withContext(function($ctx2) {
  43615. //>>excludeEnd("ctx");
  43616. $4=self._args();
  43617. $5=$recv(aStringOrNode)._value();
  43618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43619. $ctx2.sendIdx["value"]=2;
  43620. //>>excludeEnd("ctx");
  43621. return $recv($4)._at_ifAbsent_($5,(function(){
  43622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43623. return $core.withContext(function($ctx3) {
  43624. //>>excludeEnd("ctx");
  43625. return $recv(self._temps())._at_ifAbsent_($recv(aStringOrNode)._value(),(function(){
  43626. return nil;
  43627. }));
  43628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43629. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  43630. //>>excludeEnd("ctx");
  43631. }));
  43632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43633. $ctx2.sendIdx["at:ifAbsent:"]=2;
  43634. //>>excludeEnd("ctx");
  43635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43636. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43637. //>>excludeEnd("ctx");
  43638. }));
  43639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43640. $ctx1.sendIdx["at:ifAbsent:"]=1;
  43641. //>>excludeEnd("ctx");
  43642. return $1;
  43643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43644. }, function($ctx1) {$ctx1.fill(self,"bindingFor:",{aStringOrNode:aStringOrNode},$globals.LexicalScope)});
  43645. //>>excludeEnd("ctx");
  43646. },
  43647. //>>excludeStart("ide", pragmas.excludeIdeData);
  43648. args: ["aStringOrNode"],
  43649. source: "bindingFor: aStringOrNode\x0a\x09^ self pseudoVars at: aStringOrNode value ifAbsent: [\x0a\x09\x09self args at: aStringOrNode value ifAbsent: [\x0a\x09\x09\x09self temps at: aStringOrNode value ifAbsent: [ nil ]]]",
  43650. referencedClasses: [],
  43651. //>>excludeEnd("ide");
  43652. messageSends: ["at:ifAbsent:", "pseudoVars", "value", "args", "temps"]
  43653. }),
  43654. $globals.LexicalScope);
  43655. $core.addMethod(
  43656. $core.method({
  43657. selector: "blockIndex",
  43658. protocol: 'accessing',
  43659. fn: function (){
  43660. var self=this;
  43661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43662. return $core.withContext(function($ctx1) {
  43663. //>>excludeEnd("ctx");
  43664. var $2,$1,$receiver;
  43665. $2=self["@blockIndex"];
  43666. if(($receiver = $2) == null || $receiver.isNil){
  43667. $1=(0);
  43668. } else {
  43669. $1=$2;
  43670. };
  43671. return $1;
  43672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43673. }, function($ctx1) {$ctx1.fill(self,"blockIndex",{},$globals.LexicalScope)});
  43674. //>>excludeEnd("ctx");
  43675. },
  43676. //>>excludeStart("ide", pragmas.excludeIdeData);
  43677. args: [],
  43678. source: "blockIndex\x0a\x09^ blockIndex ifNil: [ 0 ]",
  43679. referencedClasses: [],
  43680. //>>excludeEnd("ide");
  43681. messageSends: ["ifNil:"]
  43682. }),
  43683. $globals.LexicalScope);
  43684. $core.addMethod(
  43685. $core.method({
  43686. selector: "blockIndex:",
  43687. protocol: 'accessing',
  43688. fn: function (anInteger){
  43689. var self=this;
  43690. self["@blockIndex"]=anInteger;
  43691. return self;
  43692. },
  43693. //>>excludeStart("ide", pragmas.excludeIdeData);
  43694. args: ["anInteger"],
  43695. source: "blockIndex: anInteger \x0a\x09blockIndex := anInteger",
  43696. referencedClasses: [],
  43697. //>>excludeEnd("ide");
  43698. messageSends: []
  43699. }),
  43700. $globals.LexicalScope);
  43701. $core.addMethod(
  43702. $core.method({
  43703. selector: "canInlineNonLocalReturns",
  43704. protocol: 'testing',
  43705. fn: function (){
  43706. var self=this;
  43707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43708. return $core.withContext(function($ctx1) {
  43709. //>>excludeEnd("ctx");
  43710. var $1;
  43711. $1=$recv(self._isInlined())._and_((function(){
  43712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43713. return $core.withContext(function($ctx2) {
  43714. //>>excludeEnd("ctx");
  43715. return $recv(self._outerScope())._canInlineNonLocalReturns();
  43716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43717. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43718. //>>excludeEnd("ctx");
  43719. }));
  43720. return $1;
  43721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43722. }, function($ctx1) {$ctx1.fill(self,"canInlineNonLocalReturns",{},$globals.LexicalScope)});
  43723. //>>excludeEnd("ctx");
  43724. },
  43725. //>>excludeStart("ide", pragmas.excludeIdeData);
  43726. args: [],
  43727. source: "canInlineNonLocalReturns\x0a\x09^ self isInlined and: [ self outerScope canInlineNonLocalReturns ]",
  43728. referencedClasses: [],
  43729. //>>excludeEnd("ide");
  43730. messageSends: ["and:", "isInlined", "canInlineNonLocalReturns", "outerScope"]
  43731. }),
  43732. $globals.LexicalScope);
  43733. $core.addMethod(
  43734. $core.method({
  43735. selector: "instruction",
  43736. protocol: 'accessing',
  43737. fn: function (){
  43738. var self=this;
  43739. var $1;
  43740. $1=self["@instruction"];
  43741. return $1;
  43742. },
  43743. //>>excludeStart("ide", pragmas.excludeIdeData);
  43744. args: [],
  43745. source: "instruction\x0a\x09^ instruction",
  43746. referencedClasses: [],
  43747. //>>excludeEnd("ide");
  43748. messageSends: []
  43749. }),
  43750. $globals.LexicalScope);
  43751. $core.addMethod(
  43752. $core.method({
  43753. selector: "instruction:",
  43754. protocol: 'accessing',
  43755. fn: function (anIRInstruction){
  43756. var self=this;
  43757. self["@instruction"]=anIRInstruction;
  43758. return self;
  43759. },
  43760. //>>excludeStart("ide", pragmas.excludeIdeData);
  43761. args: ["anIRInstruction"],
  43762. source: "instruction: anIRInstruction\x0a\x09instruction := anIRInstruction",
  43763. referencedClasses: [],
  43764. //>>excludeEnd("ide");
  43765. messageSends: []
  43766. }),
  43767. $globals.LexicalScope);
  43768. $core.addMethod(
  43769. $core.method({
  43770. selector: "isBlockScope",
  43771. protocol: 'testing',
  43772. fn: function (){
  43773. var self=this;
  43774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43775. return $core.withContext(function($ctx1) {
  43776. //>>excludeEnd("ctx");
  43777. var $1;
  43778. $1=$recv(self._isMethodScope())._not();
  43779. return $1;
  43780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43781. }, function($ctx1) {$ctx1.fill(self,"isBlockScope",{},$globals.LexicalScope)});
  43782. //>>excludeEnd("ctx");
  43783. },
  43784. //>>excludeStart("ide", pragmas.excludeIdeData);
  43785. args: [],
  43786. source: "isBlockScope\x0a\x09^ self isMethodScope not",
  43787. referencedClasses: [],
  43788. //>>excludeEnd("ide");
  43789. messageSends: ["not", "isMethodScope"]
  43790. }),
  43791. $globals.LexicalScope);
  43792. $core.addMethod(
  43793. $core.method({
  43794. selector: "isInlined",
  43795. protocol: 'testing',
  43796. fn: function (){
  43797. var self=this;
  43798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43799. return $core.withContext(function($ctx1) {
  43800. //>>excludeEnd("ctx");
  43801. var $3,$2,$1;
  43802. $3=self._instruction();
  43803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43804. $ctx1.sendIdx["instruction"]=1;
  43805. //>>excludeEnd("ctx");
  43806. $2=$recv($3)._notNil();
  43807. $1=$recv($2)._and_((function(){
  43808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43809. return $core.withContext(function($ctx2) {
  43810. //>>excludeEnd("ctx");
  43811. return $recv(self._instruction())._isInlined();
  43812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43813. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  43814. //>>excludeEnd("ctx");
  43815. }));
  43816. return $1;
  43817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43818. }, function($ctx1) {$ctx1.fill(self,"isInlined",{},$globals.LexicalScope)});
  43819. //>>excludeEnd("ctx");
  43820. },
  43821. //>>excludeStart("ide", pragmas.excludeIdeData);
  43822. args: [],
  43823. source: "isInlined\x0a\x09^ self instruction notNil and: [\x0a\x09\x09self instruction isInlined ]",
  43824. referencedClasses: [],
  43825. //>>excludeEnd("ide");
  43826. messageSends: ["and:", "notNil", "instruction", "isInlined"]
  43827. }),
  43828. $globals.LexicalScope);
  43829. $core.addMethod(
  43830. $core.method({
  43831. selector: "isMethodScope",
  43832. protocol: 'testing',
  43833. fn: function (){
  43834. var self=this;
  43835. return false;
  43836. },
  43837. //>>excludeStart("ide", pragmas.excludeIdeData);
  43838. args: [],
  43839. source: "isMethodScope\x0a\x09^ false",
  43840. referencedClasses: [],
  43841. //>>excludeEnd("ide");
  43842. messageSends: []
  43843. }),
  43844. $globals.LexicalScope);
  43845. $core.addMethod(
  43846. $core.method({
  43847. selector: "lookupVariable:",
  43848. protocol: 'accessing',
  43849. fn: function (aNode){
  43850. var self=this;
  43851. var lookup;
  43852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43853. return $core.withContext(function($ctx1) {
  43854. //>>excludeEnd("ctx");
  43855. var $1,$2,$3,$receiver;
  43856. lookup=self._bindingFor_(aNode);
  43857. $1=lookup;
  43858. if(($receiver = $1) == null || $receiver.isNil){
  43859. $2=self._outerScope();
  43860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43861. $ctx1.sendIdx["outerScope"]=1;
  43862. //>>excludeEnd("ctx");
  43863. if(($receiver = $2) == null || $receiver.isNil){
  43864. lookup=$2;
  43865. } else {
  43866. lookup=$recv(self._outerScope())._lookupVariable_(aNode);
  43867. };
  43868. lookup;
  43869. } else {
  43870. $1;
  43871. };
  43872. $3=lookup;
  43873. return $3;
  43874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43875. }, function($ctx1) {$ctx1.fill(self,"lookupVariable:",{aNode:aNode,lookup:lookup},$globals.LexicalScope)});
  43876. //>>excludeEnd("ctx");
  43877. },
  43878. //>>excludeStart("ide", pragmas.excludeIdeData);
  43879. args: ["aNode"],
  43880. source: "lookupVariable: aNode\x0a\x09| lookup |\x0a\x09lookup := (self bindingFor: aNode).\x0a\x09lookup ifNil: [\x0a\x09\x09lookup := self outerScope ifNotNil: [\x0a\x09\x09\x09(self outerScope lookupVariable: aNode) ]].\x0a\x09^ lookup",
  43881. referencedClasses: [],
  43882. //>>excludeEnd("ide");
  43883. messageSends: ["bindingFor:", "ifNil:", "ifNotNil:", "outerScope", "lookupVariable:"]
  43884. }),
  43885. $globals.LexicalScope);
  43886. $core.addMethod(
  43887. $core.method({
  43888. selector: "methodScope",
  43889. protocol: 'accessing',
  43890. fn: function (){
  43891. var self=this;
  43892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43893. return $core.withContext(function($ctx1) {
  43894. //>>excludeEnd("ctx");
  43895. var $2,$1,$receiver;
  43896. $2=self._outerScope();
  43897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43898. $ctx1.sendIdx["outerScope"]=1;
  43899. //>>excludeEnd("ctx");
  43900. if(($receiver = $2) == null || $receiver.isNil){
  43901. $1=$2;
  43902. } else {
  43903. $1=$recv(self._outerScope())._methodScope();
  43904. };
  43905. return $1;
  43906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43907. }, function($ctx1) {$ctx1.fill(self,"methodScope",{},$globals.LexicalScope)});
  43908. //>>excludeEnd("ctx");
  43909. },
  43910. //>>excludeStart("ide", pragmas.excludeIdeData);
  43911. args: [],
  43912. source: "methodScope\x0a\x09^ self outerScope ifNotNil: [\x0a\x09\x09self outerScope methodScope ]",
  43913. referencedClasses: [],
  43914. //>>excludeEnd("ide");
  43915. messageSends: ["ifNotNil:", "outerScope", "methodScope"]
  43916. }),
  43917. $globals.LexicalScope);
  43918. $core.addMethod(
  43919. $core.method({
  43920. selector: "node",
  43921. protocol: 'accessing',
  43922. fn: function (){
  43923. var self=this;
  43924. var $1;
  43925. $1=self["@node"];
  43926. return $1;
  43927. },
  43928. //>>excludeStart("ide", pragmas.excludeIdeData);
  43929. args: [],
  43930. source: "node\x0a\x09\x22Answer the node in which I am defined\x22\x0a\x09\x0a\x09^ node",
  43931. referencedClasses: [],
  43932. //>>excludeEnd("ide");
  43933. messageSends: []
  43934. }),
  43935. $globals.LexicalScope);
  43936. $core.addMethod(
  43937. $core.method({
  43938. selector: "node:",
  43939. protocol: 'accessing',
  43940. fn: function (aNode){
  43941. var self=this;
  43942. self["@node"]=aNode;
  43943. return self;
  43944. },
  43945. //>>excludeStart("ide", pragmas.excludeIdeData);
  43946. args: ["aNode"],
  43947. source: "node: aNode\x0a\x09node := aNode",
  43948. referencedClasses: [],
  43949. //>>excludeEnd("ide");
  43950. messageSends: []
  43951. }),
  43952. $globals.LexicalScope);
  43953. $core.addMethod(
  43954. $core.method({
  43955. selector: "outerScope",
  43956. protocol: 'accessing',
  43957. fn: function (){
  43958. var self=this;
  43959. var $1;
  43960. $1=self["@outerScope"];
  43961. return $1;
  43962. },
  43963. //>>excludeStart("ide", pragmas.excludeIdeData);
  43964. args: [],
  43965. source: "outerScope\x0a\x09^ outerScope",
  43966. referencedClasses: [],
  43967. //>>excludeEnd("ide");
  43968. messageSends: []
  43969. }),
  43970. $globals.LexicalScope);
  43971. $core.addMethod(
  43972. $core.method({
  43973. selector: "outerScope:",
  43974. protocol: 'accessing',
  43975. fn: function (aLexicalScope){
  43976. var self=this;
  43977. self["@outerScope"]=aLexicalScope;
  43978. return self;
  43979. },
  43980. //>>excludeStart("ide", pragmas.excludeIdeData);
  43981. args: ["aLexicalScope"],
  43982. source: "outerScope: aLexicalScope\x0a\x09outerScope := aLexicalScope",
  43983. referencedClasses: [],
  43984. //>>excludeEnd("ide");
  43985. messageSends: []
  43986. }),
  43987. $globals.LexicalScope);
  43988. $core.addMethod(
  43989. $core.method({
  43990. selector: "pseudoVars",
  43991. protocol: 'accessing',
  43992. fn: function (){
  43993. var self=this;
  43994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  43995. return $core.withContext(function($ctx1) {
  43996. //>>excludeEnd("ctx");
  43997. var $1;
  43998. $1=$recv(self._methodScope())._pseudoVars();
  43999. return $1;
  44000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44001. }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{},$globals.LexicalScope)});
  44002. //>>excludeEnd("ctx");
  44003. },
  44004. //>>excludeStart("ide", pragmas.excludeIdeData);
  44005. args: [],
  44006. source: "pseudoVars\x0a\x09^ self methodScope pseudoVars",
  44007. referencedClasses: [],
  44008. //>>excludeEnd("ide");
  44009. messageSends: ["pseudoVars", "methodScope"]
  44010. }),
  44011. $globals.LexicalScope);
  44012. $core.addMethod(
  44013. $core.method({
  44014. selector: "scopeLevel",
  44015. protocol: 'accessing',
  44016. fn: function (){
  44017. var self=this;
  44018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44019. return $core.withContext(function($ctx1) {
  44020. //>>excludeEnd("ctx");
  44021. var $1,$2,$4,$3,$5,$receiver;
  44022. $1=self._outerScope();
  44023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44024. $ctx1.sendIdx["outerScope"]=1;
  44025. //>>excludeEnd("ctx");
  44026. if(($receiver = $1) == null || $receiver.isNil){
  44027. return (1);
  44028. } else {
  44029. $1;
  44030. };
  44031. $2=self._isInlined();
  44032. if($core.assert($2)){
  44033. $4=self._outerScope();
  44034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44035. $ctx1.sendIdx["outerScope"]=2;
  44036. //>>excludeEnd("ctx");
  44037. $3=$recv($4)._scopeLevel();
  44038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44039. $ctx1.sendIdx["scopeLevel"]=1;
  44040. //>>excludeEnd("ctx");
  44041. return $3;
  44042. };
  44043. $5=$recv($recv(self._outerScope())._scopeLevel()).__plus((1));
  44044. return $5;
  44045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44046. }, function($ctx1) {$ctx1.fill(self,"scopeLevel",{},$globals.LexicalScope)});
  44047. //>>excludeEnd("ctx");
  44048. },
  44049. //>>excludeStart("ide", pragmas.excludeIdeData);
  44050. args: [],
  44051. source: "scopeLevel\x0a\x09self outerScope ifNil: [ ^ 1 ].\x0a\x09self isInlined ifTrue: [ ^ self outerScope scopeLevel ].\x0a\x09\x0a\x09^ self outerScope scopeLevel + 1",
  44052. referencedClasses: [],
  44053. //>>excludeEnd("ide");
  44054. messageSends: ["ifNil:", "outerScope", "ifTrue:", "isInlined", "scopeLevel", "+"]
  44055. }),
  44056. $globals.LexicalScope);
  44057. $core.addMethod(
  44058. $core.method({
  44059. selector: "temps",
  44060. protocol: 'accessing',
  44061. fn: function (){
  44062. var self=this;
  44063. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  44064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44065. return $core.withContext(function($ctx1) {
  44066. //>>excludeEnd("ctx");
  44067. var $2,$1,$receiver;
  44068. $2=self["@temps"];
  44069. if(($receiver = $2) == null || $receiver.isNil){
  44070. self["@temps"]=$recv($Dictionary())._new();
  44071. $1=self["@temps"];
  44072. } else {
  44073. $1=$2;
  44074. };
  44075. return $1;
  44076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44077. }, function($ctx1) {$ctx1.fill(self,"temps",{},$globals.LexicalScope)});
  44078. //>>excludeEnd("ctx");
  44079. },
  44080. //>>excludeStart("ide", pragmas.excludeIdeData);
  44081. args: [],
  44082. source: "temps\x0a\x09^ temps ifNil: [ temps := Dictionary new ]",
  44083. referencedClasses: ["Dictionary"],
  44084. //>>excludeEnd("ide");
  44085. messageSends: ["ifNil:", "new"]
  44086. }),
  44087. $globals.LexicalScope);
  44088. $core.addClass('MethodLexicalScope', $globals.LexicalScope, ['iVars', 'pseudoVars', 'unknownVariables', 'localReturn', 'nonLocalReturns'], 'Compiler-Semantic');
  44089. //>>excludeStart("ide", pragmas.excludeIdeData);
  44090. $globals.MethodLexicalScope.comment="I represent a method scope.";
  44091. //>>excludeEnd("ide");
  44092. $core.addMethod(
  44093. $core.method({
  44094. selector: "addIVar:",
  44095. protocol: 'adding',
  44096. fn: function (aString){
  44097. var self=this;
  44098. function $InstanceVar(){return $globals.InstanceVar||(typeof InstanceVar=="undefined"?nil:InstanceVar)}
  44099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44100. return $core.withContext(function($ctx1) {
  44101. //>>excludeEnd("ctx");
  44102. var $1;
  44103. $1=self._iVars();
  44104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44105. $ctx1.sendIdx["iVars"]=1;
  44106. //>>excludeEnd("ctx");
  44107. $recv($1)._at_put_(aString,$recv($InstanceVar())._on_(aString));
  44108. $recv($recv(self._iVars())._at_(aString))._scope_(self);
  44109. return self;
  44110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44111. }, function($ctx1) {$ctx1.fill(self,"addIVar:",{aString:aString},$globals.MethodLexicalScope)});
  44112. //>>excludeEnd("ctx");
  44113. },
  44114. //>>excludeStart("ide", pragmas.excludeIdeData);
  44115. args: ["aString"],
  44116. source: "addIVar: aString\x0a\x09self iVars at: aString put: (InstanceVar on: aString).\x0a\x09(self iVars at: aString) scope: self",
  44117. referencedClasses: ["InstanceVar"],
  44118. //>>excludeEnd("ide");
  44119. messageSends: ["at:put:", "iVars", "on:", "scope:", "at:"]
  44120. }),
  44121. $globals.MethodLexicalScope);
  44122. $core.addMethod(
  44123. $core.method({
  44124. selector: "addNonLocalReturn:",
  44125. protocol: 'adding',
  44126. fn: function (aScope){
  44127. var self=this;
  44128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44129. return $core.withContext(function($ctx1) {
  44130. //>>excludeEnd("ctx");
  44131. $recv(self._nonLocalReturns())._add_(aScope);
  44132. return self;
  44133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44134. }, function($ctx1) {$ctx1.fill(self,"addNonLocalReturn:",{aScope:aScope},$globals.MethodLexicalScope)});
  44135. //>>excludeEnd("ctx");
  44136. },
  44137. //>>excludeStart("ide", pragmas.excludeIdeData);
  44138. args: ["aScope"],
  44139. source: "addNonLocalReturn: aScope\x0a\x09self nonLocalReturns add: aScope",
  44140. referencedClasses: [],
  44141. //>>excludeEnd("ide");
  44142. messageSends: ["add:", "nonLocalReturns"]
  44143. }),
  44144. $globals.MethodLexicalScope);
  44145. $core.addMethod(
  44146. $core.method({
  44147. selector: "allVariableNames",
  44148. protocol: 'accessing',
  44149. fn: function (){
  44150. var self=this;
  44151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44152. return $core.withContext(function($ctx1) {
  44153. //>>excludeEnd("ctx");
  44154. var $2,$1;
  44155. $2=(
  44156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44157. $ctx1.supercall = true,
  44158. //>>excludeEnd("ctx");
  44159. $globals.MethodLexicalScope.superclass.fn.prototype._allVariableNames.apply($recv(self), []));
  44160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44161. $ctx1.supercall = false;
  44162. //>>excludeEnd("ctx");;
  44163. $1=$recv($2).__comma($recv(self._iVars())._keys());
  44164. return $1;
  44165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44166. }, function($ctx1) {$ctx1.fill(self,"allVariableNames",{},$globals.MethodLexicalScope)});
  44167. //>>excludeEnd("ctx");
  44168. },
  44169. //>>excludeStart("ide", pragmas.excludeIdeData);
  44170. args: [],
  44171. source: "allVariableNames\x0a\x09^ super allVariableNames, self iVars keys",
  44172. referencedClasses: [],
  44173. //>>excludeEnd("ide");
  44174. messageSends: [",", "allVariableNames", "keys", "iVars"]
  44175. }),
  44176. $globals.MethodLexicalScope);
  44177. $core.addMethod(
  44178. $core.method({
  44179. selector: "bindingFor:",
  44180. protocol: 'accessing',
  44181. fn: function (aNode){
  44182. var self=this;
  44183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44184. return $core.withContext(function($ctx1) {
  44185. //>>excludeEnd("ctx");
  44186. var $2,$1,$receiver;
  44187. $2=(
  44188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44189. $ctx1.supercall = true,
  44190. //>>excludeEnd("ctx");
  44191. $globals.MethodLexicalScope.superclass.fn.prototype._bindingFor_.apply($recv(self), [aNode]));
  44192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44193. $ctx1.supercall = false;
  44194. //>>excludeEnd("ctx");;
  44195. if(($receiver = $2) == null || $receiver.isNil){
  44196. $1=$recv(self._iVars())._at_ifAbsent_($recv(aNode)._value(),(function(){
  44197. return nil;
  44198. }));
  44199. } else {
  44200. $1=$2;
  44201. };
  44202. return $1;
  44203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44204. }, function($ctx1) {$ctx1.fill(self,"bindingFor:",{aNode:aNode},$globals.MethodLexicalScope)});
  44205. //>>excludeEnd("ctx");
  44206. },
  44207. //>>excludeStart("ide", pragmas.excludeIdeData);
  44208. args: ["aNode"],
  44209. source: "bindingFor: aNode\x0a\x09^ (super bindingFor: aNode) ifNil: [\x0a\x09\x09self iVars at: aNode value ifAbsent: [ nil ]]",
  44210. referencedClasses: [],
  44211. //>>excludeEnd("ide");
  44212. messageSends: ["ifNil:", "bindingFor:", "at:ifAbsent:", "iVars", "value"]
  44213. }),
  44214. $globals.MethodLexicalScope);
  44215. $core.addMethod(
  44216. $core.method({
  44217. selector: "canInlineNonLocalReturns",
  44218. protocol: 'testing',
  44219. fn: function (){
  44220. var self=this;
  44221. return true;
  44222. },
  44223. //>>excludeStart("ide", pragmas.excludeIdeData);
  44224. args: [],
  44225. source: "canInlineNonLocalReturns\x0a\x09^ true",
  44226. referencedClasses: [],
  44227. //>>excludeEnd("ide");
  44228. messageSends: []
  44229. }),
  44230. $globals.MethodLexicalScope);
  44231. $core.addMethod(
  44232. $core.method({
  44233. selector: "hasLocalReturn",
  44234. protocol: 'testing',
  44235. fn: function (){
  44236. var self=this;
  44237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44238. return $core.withContext(function($ctx1) {
  44239. //>>excludeEnd("ctx");
  44240. var $1;
  44241. $1=self._localReturn();
  44242. return $1;
  44243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44244. }, function($ctx1) {$ctx1.fill(self,"hasLocalReturn",{},$globals.MethodLexicalScope)});
  44245. //>>excludeEnd("ctx");
  44246. },
  44247. //>>excludeStart("ide", pragmas.excludeIdeData);
  44248. args: [],
  44249. source: "hasLocalReturn\x0a\x09^ self localReturn",
  44250. referencedClasses: [],
  44251. //>>excludeEnd("ide");
  44252. messageSends: ["localReturn"]
  44253. }),
  44254. $globals.MethodLexicalScope);
  44255. $core.addMethod(
  44256. $core.method({
  44257. selector: "hasNonLocalReturn",
  44258. protocol: 'testing',
  44259. fn: function (){
  44260. var self=this;
  44261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44262. return $core.withContext(function($ctx1) {
  44263. //>>excludeEnd("ctx");
  44264. var $1;
  44265. $1=$recv(self._nonLocalReturns())._notEmpty();
  44266. return $1;
  44267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44268. }, function($ctx1) {$ctx1.fill(self,"hasNonLocalReturn",{},$globals.MethodLexicalScope)});
  44269. //>>excludeEnd("ctx");
  44270. },
  44271. //>>excludeStart("ide", pragmas.excludeIdeData);
  44272. args: [],
  44273. source: "hasNonLocalReturn\x0a\x09^ self nonLocalReturns notEmpty",
  44274. referencedClasses: [],
  44275. //>>excludeEnd("ide");
  44276. messageSends: ["notEmpty", "nonLocalReturns"]
  44277. }),
  44278. $globals.MethodLexicalScope);
  44279. $core.addMethod(
  44280. $core.method({
  44281. selector: "iVars",
  44282. protocol: 'accessing',
  44283. fn: function (){
  44284. var self=this;
  44285. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  44286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44287. return $core.withContext(function($ctx1) {
  44288. //>>excludeEnd("ctx");
  44289. var $2,$1,$receiver;
  44290. $2=self["@iVars"];
  44291. if(($receiver = $2) == null || $receiver.isNil){
  44292. self["@iVars"]=$recv($Dictionary())._new();
  44293. $1=self["@iVars"];
  44294. } else {
  44295. $1=$2;
  44296. };
  44297. return $1;
  44298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44299. }, function($ctx1) {$ctx1.fill(self,"iVars",{},$globals.MethodLexicalScope)});
  44300. //>>excludeEnd("ctx");
  44301. },
  44302. //>>excludeStart("ide", pragmas.excludeIdeData);
  44303. args: [],
  44304. source: "iVars\x0a\x09^ iVars ifNil: [ iVars := Dictionary new ]",
  44305. referencedClasses: ["Dictionary"],
  44306. //>>excludeEnd("ide");
  44307. messageSends: ["ifNil:", "new"]
  44308. }),
  44309. $globals.MethodLexicalScope);
  44310. $core.addMethod(
  44311. $core.method({
  44312. selector: "isMethodScope",
  44313. protocol: 'testing',
  44314. fn: function (){
  44315. var self=this;
  44316. return true;
  44317. },
  44318. //>>excludeStart("ide", pragmas.excludeIdeData);
  44319. args: [],
  44320. source: "isMethodScope\x0a\x09^ true",
  44321. referencedClasses: [],
  44322. //>>excludeEnd("ide");
  44323. messageSends: []
  44324. }),
  44325. $globals.MethodLexicalScope);
  44326. $core.addMethod(
  44327. $core.method({
  44328. selector: "localReturn",
  44329. protocol: 'accessing',
  44330. fn: function (){
  44331. var self=this;
  44332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44333. return $core.withContext(function($ctx1) {
  44334. //>>excludeEnd("ctx");
  44335. var $2,$1,$receiver;
  44336. $2=self["@localReturn"];
  44337. if(($receiver = $2) == null || $receiver.isNil){
  44338. $1=false;
  44339. } else {
  44340. $1=$2;
  44341. };
  44342. return $1;
  44343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44344. }, function($ctx1) {$ctx1.fill(self,"localReturn",{},$globals.MethodLexicalScope)});
  44345. //>>excludeEnd("ctx");
  44346. },
  44347. //>>excludeStart("ide", pragmas.excludeIdeData);
  44348. args: [],
  44349. source: "localReturn\x0a\x09^ localReturn ifNil: [ false ]",
  44350. referencedClasses: [],
  44351. //>>excludeEnd("ide");
  44352. messageSends: ["ifNil:"]
  44353. }),
  44354. $globals.MethodLexicalScope);
  44355. $core.addMethod(
  44356. $core.method({
  44357. selector: "localReturn:",
  44358. protocol: 'accessing',
  44359. fn: function (aBoolean){
  44360. var self=this;
  44361. self["@localReturn"]=aBoolean;
  44362. return self;
  44363. },
  44364. //>>excludeStart("ide", pragmas.excludeIdeData);
  44365. args: ["aBoolean"],
  44366. source: "localReturn: aBoolean\x0a\x09localReturn := aBoolean",
  44367. referencedClasses: [],
  44368. //>>excludeEnd("ide");
  44369. messageSends: []
  44370. }),
  44371. $globals.MethodLexicalScope);
  44372. $core.addMethod(
  44373. $core.method({
  44374. selector: "methodScope",
  44375. protocol: 'accessing',
  44376. fn: function (){
  44377. var self=this;
  44378. return self;
  44379. },
  44380. //>>excludeStart("ide", pragmas.excludeIdeData);
  44381. args: [],
  44382. source: "methodScope\x0a\x09^ self",
  44383. referencedClasses: [],
  44384. //>>excludeEnd("ide");
  44385. messageSends: []
  44386. }),
  44387. $globals.MethodLexicalScope);
  44388. $core.addMethod(
  44389. $core.method({
  44390. selector: "nonLocalReturns",
  44391. protocol: 'accessing',
  44392. fn: function (){
  44393. var self=this;
  44394. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  44395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44396. return $core.withContext(function($ctx1) {
  44397. //>>excludeEnd("ctx");
  44398. var $2,$1,$receiver;
  44399. $2=self["@nonLocalReturns"];
  44400. if(($receiver = $2) == null || $receiver.isNil){
  44401. self["@nonLocalReturns"]=$recv($OrderedCollection())._new();
  44402. $1=self["@nonLocalReturns"];
  44403. } else {
  44404. $1=$2;
  44405. };
  44406. return $1;
  44407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44408. }, function($ctx1) {$ctx1.fill(self,"nonLocalReturns",{},$globals.MethodLexicalScope)});
  44409. //>>excludeEnd("ctx");
  44410. },
  44411. //>>excludeStart("ide", pragmas.excludeIdeData);
  44412. args: [],
  44413. source: "nonLocalReturns\x0a\x09^ nonLocalReturns ifNil: [ nonLocalReturns := OrderedCollection new ]",
  44414. referencedClasses: ["OrderedCollection"],
  44415. //>>excludeEnd("ide");
  44416. messageSends: ["ifNil:", "new"]
  44417. }),
  44418. $globals.MethodLexicalScope);
  44419. $core.addMethod(
  44420. $core.method({
  44421. selector: "pseudoVars",
  44422. protocol: 'accessing',
  44423. fn: function (){
  44424. var self=this;
  44425. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  44426. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  44427. function $PseudoVar(){return $globals.PseudoVar||(typeof PseudoVar=="undefined"?nil:PseudoVar)}
  44428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44429. return $core.withContext(function($ctx1) {
  44430. //>>excludeEnd("ctx");
  44431. var $1,$2,$3,$4,$receiver;
  44432. $1=self["@pseudoVars"];
  44433. if(($receiver = $1) == null || $receiver.isNil){
  44434. self["@pseudoVars"]=$recv($Dictionary())._new();
  44435. self["@pseudoVars"];
  44436. $recv($recv($Smalltalk())._pseudoVariableNames())._do_((function(each){
  44437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44438. return $core.withContext(function($ctx2) {
  44439. //>>excludeEnd("ctx");
  44440. $2=$recv($PseudoVar())._on_(each);
  44441. $recv($2)._scope_(self._methodScope());
  44442. $3=$recv($2)._yourself();
  44443. return $recv(self["@pseudoVars"])._at_put_(each,$3);
  44444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44445. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  44446. //>>excludeEnd("ctx");
  44447. }));
  44448. } else {
  44449. $1;
  44450. };
  44451. $4=self["@pseudoVars"];
  44452. return $4;
  44453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44454. }, function($ctx1) {$ctx1.fill(self,"pseudoVars",{},$globals.MethodLexicalScope)});
  44455. //>>excludeEnd("ctx");
  44456. },
  44457. //>>excludeStart("ide", pragmas.excludeIdeData);
  44458. args: [],
  44459. source: "pseudoVars\x0a\x09pseudoVars ifNil: [\x0a\x09\x09pseudoVars := Dictionary new.\x0a\x09\x09Smalltalk pseudoVariableNames do: [ :each |\x0a\x09\x09\x09pseudoVars at: each put: ((PseudoVar on: each)\x0a\x09\x09\x09\x09scope: self methodScope;\x0a\x09\x09\x09\x09yourself) ]].\x0a\x09^ pseudoVars",
  44460. referencedClasses: ["Dictionary", "Smalltalk", "PseudoVar"],
  44461. //>>excludeEnd("ide");
  44462. messageSends: ["ifNil:", "new", "do:", "pseudoVariableNames", "at:put:", "scope:", "on:", "methodScope", "yourself"]
  44463. }),
  44464. $globals.MethodLexicalScope);
  44465. $core.addMethod(
  44466. $core.method({
  44467. selector: "removeNonLocalReturn:",
  44468. protocol: 'adding',
  44469. fn: function (aScope){
  44470. var self=this;
  44471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44472. return $core.withContext(function($ctx1) {
  44473. //>>excludeEnd("ctx");
  44474. $recv(self._nonLocalReturns())._remove_ifAbsent_(aScope,(function(){
  44475. }));
  44476. return self;
  44477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44478. }, function($ctx1) {$ctx1.fill(self,"removeNonLocalReturn:",{aScope:aScope},$globals.MethodLexicalScope)});
  44479. //>>excludeEnd("ctx");
  44480. },
  44481. //>>excludeStart("ide", pragmas.excludeIdeData);
  44482. args: ["aScope"],
  44483. source: "removeNonLocalReturn: aScope\x0a\x09self nonLocalReturns remove: aScope ifAbsent: []",
  44484. referencedClasses: [],
  44485. //>>excludeEnd("ide");
  44486. messageSends: ["remove:ifAbsent:", "nonLocalReturns"]
  44487. }),
  44488. $globals.MethodLexicalScope);
  44489. $core.addMethod(
  44490. $core.method({
  44491. selector: "unknownVariables",
  44492. protocol: 'accessing',
  44493. fn: function (){
  44494. var self=this;
  44495. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  44496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44497. return $core.withContext(function($ctx1) {
  44498. //>>excludeEnd("ctx");
  44499. var $2,$1,$receiver;
  44500. $2=self["@unknownVariables"];
  44501. if(($receiver = $2) == null || $receiver.isNil){
  44502. self["@unknownVariables"]=$recv($OrderedCollection())._new();
  44503. $1=self["@unknownVariables"];
  44504. } else {
  44505. $1=$2;
  44506. };
  44507. return $1;
  44508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44509. }, function($ctx1) {$ctx1.fill(self,"unknownVariables",{},$globals.MethodLexicalScope)});
  44510. //>>excludeEnd("ctx");
  44511. },
  44512. //>>excludeStart("ide", pragmas.excludeIdeData);
  44513. args: [],
  44514. source: "unknownVariables\x0a\x09^ unknownVariables ifNil: [ unknownVariables := OrderedCollection new ]",
  44515. referencedClasses: ["OrderedCollection"],
  44516. //>>excludeEnd("ide");
  44517. messageSends: ["ifNil:", "new"]
  44518. }),
  44519. $globals.MethodLexicalScope);
  44520. $core.addClass('ScopeVar', $globals.Object, ['scope', 'name'], 'Compiler-Semantic');
  44521. //>>excludeStart("ide", pragmas.excludeIdeData);
  44522. $globals.ScopeVar.comment="I am an entry in a LexicalScope that gets associated with variable nodes of the same name.\x0aThere are 4 different subclasses of vars: temp vars, local vars, args, and unknown/global vars.";
  44523. //>>excludeEnd("ide");
  44524. $core.addMethod(
  44525. $core.method({
  44526. selector: "alias",
  44527. protocol: 'accessing',
  44528. fn: function (){
  44529. var self=this;
  44530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44531. return $core.withContext(function($ctx1) {
  44532. //>>excludeEnd("ctx");
  44533. var $1;
  44534. $1=$recv(self._name())._asVariableName();
  44535. return $1;
  44536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44537. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.ScopeVar)});
  44538. //>>excludeEnd("ctx");
  44539. },
  44540. //>>excludeStart("ide", pragmas.excludeIdeData);
  44541. args: [],
  44542. source: "alias\x0a\x09^ self name asVariableName",
  44543. referencedClasses: [],
  44544. //>>excludeEnd("ide");
  44545. messageSends: ["asVariableName", "name"]
  44546. }),
  44547. $globals.ScopeVar);
  44548. $core.addMethod(
  44549. $core.method({
  44550. selector: "isArgVar",
  44551. protocol: 'testing',
  44552. fn: function (){
  44553. var self=this;
  44554. return false;
  44555. },
  44556. //>>excludeStart("ide", pragmas.excludeIdeData);
  44557. args: [],
  44558. source: "isArgVar\x0a\x09^ false",
  44559. referencedClasses: [],
  44560. //>>excludeEnd("ide");
  44561. messageSends: []
  44562. }),
  44563. $globals.ScopeVar);
  44564. $core.addMethod(
  44565. $core.method({
  44566. selector: "isClassRefVar",
  44567. protocol: 'testing',
  44568. fn: function (){
  44569. var self=this;
  44570. return false;
  44571. },
  44572. //>>excludeStart("ide", pragmas.excludeIdeData);
  44573. args: [],
  44574. source: "isClassRefVar\x0a\x09^ false",
  44575. referencedClasses: [],
  44576. //>>excludeEnd("ide");
  44577. messageSends: []
  44578. }),
  44579. $globals.ScopeVar);
  44580. $core.addMethod(
  44581. $core.method({
  44582. selector: "isImmutable",
  44583. protocol: 'testing',
  44584. fn: function (){
  44585. var self=this;
  44586. return false;
  44587. },
  44588. //>>excludeStart("ide", pragmas.excludeIdeData);
  44589. args: [],
  44590. source: "isImmutable\x0a\x09^ false",
  44591. referencedClasses: [],
  44592. //>>excludeEnd("ide");
  44593. messageSends: []
  44594. }),
  44595. $globals.ScopeVar);
  44596. $core.addMethod(
  44597. $core.method({
  44598. selector: "isInstanceVar",
  44599. protocol: 'testing',
  44600. fn: function (){
  44601. var self=this;
  44602. return false;
  44603. },
  44604. //>>excludeStart("ide", pragmas.excludeIdeData);
  44605. args: [],
  44606. source: "isInstanceVar\x0a\x09^ false",
  44607. referencedClasses: [],
  44608. //>>excludeEnd("ide");
  44609. messageSends: []
  44610. }),
  44611. $globals.ScopeVar);
  44612. $core.addMethod(
  44613. $core.method({
  44614. selector: "isPseudoVar",
  44615. protocol: 'testing',
  44616. fn: function (){
  44617. var self=this;
  44618. return false;
  44619. },
  44620. //>>excludeStart("ide", pragmas.excludeIdeData);
  44621. args: [],
  44622. source: "isPseudoVar\x0a\x09^ false",
  44623. referencedClasses: [],
  44624. //>>excludeEnd("ide");
  44625. messageSends: []
  44626. }),
  44627. $globals.ScopeVar);
  44628. $core.addMethod(
  44629. $core.method({
  44630. selector: "isTempVar",
  44631. protocol: 'testing',
  44632. fn: function (){
  44633. var self=this;
  44634. return false;
  44635. },
  44636. //>>excludeStart("ide", pragmas.excludeIdeData);
  44637. args: [],
  44638. source: "isTempVar\x0a\x09^ false",
  44639. referencedClasses: [],
  44640. //>>excludeEnd("ide");
  44641. messageSends: []
  44642. }),
  44643. $globals.ScopeVar);
  44644. $core.addMethod(
  44645. $core.method({
  44646. selector: "isUnknownVar",
  44647. protocol: 'testing',
  44648. fn: function (){
  44649. var self=this;
  44650. return false;
  44651. },
  44652. //>>excludeStart("ide", pragmas.excludeIdeData);
  44653. args: [],
  44654. source: "isUnknownVar\x0a\x09^ false",
  44655. referencedClasses: [],
  44656. //>>excludeEnd("ide");
  44657. messageSends: []
  44658. }),
  44659. $globals.ScopeVar);
  44660. $core.addMethod(
  44661. $core.method({
  44662. selector: "name",
  44663. protocol: 'accessing',
  44664. fn: function (){
  44665. var self=this;
  44666. var $1;
  44667. $1=self["@name"];
  44668. return $1;
  44669. },
  44670. //>>excludeStart("ide", pragmas.excludeIdeData);
  44671. args: [],
  44672. source: "name\x0a\x09^ name",
  44673. referencedClasses: [],
  44674. //>>excludeEnd("ide");
  44675. messageSends: []
  44676. }),
  44677. $globals.ScopeVar);
  44678. $core.addMethod(
  44679. $core.method({
  44680. selector: "name:",
  44681. protocol: 'accessing',
  44682. fn: function (aString){
  44683. var self=this;
  44684. self["@name"]=aString;
  44685. return self;
  44686. },
  44687. //>>excludeStart("ide", pragmas.excludeIdeData);
  44688. args: ["aString"],
  44689. source: "name: aString\x0a\x09name := aString",
  44690. referencedClasses: [],
  44691. //>>excludeEnd("ide");
  44692. messageSends: []
  44693. }),
  44694. $globals.ScopeVar);
  44695. $core.addMethod(
  44696. $core.method({
  44697. selector: "scope",
  44698. protocol: 'accessing',
  44699. fn: function (){
  44700. var self=this;
  44701. var $1;
  44702. $1=self["@scope"];
  44703. return $1;
  44704. },
  44705. //>>excludeStart("ide", pragmas.excludeIdeData);
  44706. args: [],
  44707. source: "scope\x0a\x09^ scope",
  44708. referencedClasses: [],
  44709. //>>excludeEnd("ide");
  44710. messageSends: []
  44711. }),
  44712. $globals.ScopeVar);
  44713. $core.addMethod(
  44714. $core.method({
  44715. selector: "scope:",
  44716. protocol: 'accessing',
  44717. fn: function (aScope){
  44718. var self=this;
  44719. self["@scope"]=aScope;
  44720. return self;
  44721. },
  44722. //>>excludeStart("ide", pragmas.excludeIdeData);
  44723. args: ["aScope"],
  44724. source: "scope: aScope\x0a\x09scope := aScope",
  44725. referencedClasses: [],
  44726. //>>excludeEnd("ide");
  44727. messageSends: []
  44728. }),
  44729. $globals.ScopeVar);
  44730. $core.addMethod(
  44731. $core.method({
  44732. selector: "validateAssignment",
  44733. protocol: 'testing',
  44734. fn: function (){
  44735. var self=this;
  44736. function $InvalidAssignmentError(){return $globals.InvalidAssignmentError||(typeof InvalidAssignmentError=="undefined"?nil:InvalidAssignmentError)}
  44737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44738. return $core.withContext(function($ctx1) {
  44739. //>>excludeEnd("ctx");
  44740. var $1,$2,$3;
  44741. $1=$recv(self._isArgVar())._or_((function(){
  44742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44743. return $core.withContext(function($ctx2) {
  44744. //>>excludeEnd("ctx");
  44745. return self._isPseudoVar();
  44746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44747. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  44748. //>>excludeEnd("ctx");
  44749. }));
  44750. if($core.assert($1)){
  44751. $2=$recv($InvalidAssignmentError())._new();
  44752. $recv($2)._variableName_(self._name());
  44753. $3=$recv($2)._signal();
  44754. $3;
  44755. };
  44756. return self;
  44757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44758. }, function($ctx1) {$ctx1.fill(self,"validateAssignment",{},$globals.ScopeVar)});
  44759. //>>excludeEnd("ctx");
  44760. },
  44761. //>>excludeStart("ide", pragmas.excludeIdeData);
  44762. args: [],
  44763. source: "validateAssignment\x0a\x09(self isArgVar or: [ self isPseudoVar ]) ifTrue: [\x0a\x09\x09InvalidAssignmentError new\x0a\x09\x09\x09variableName: self name;\x0a\x09\x09\x09signal]",
  44764. referencedClasses: ["InvalidAssignmentError"],
  44765. //>>excludeEnd("ide");
  44766. messageSends: ["ifTrue:", "or:", "isArgVar", "isPseudoVar", "variableName:", "new", "name", "signal"]
  44767. }),
  44768. $globals.ScopeVar);
  44769. $core.addMethod(
  44770. $core.method({
  44771. selector: "on:",
  44772. protocol: 'instance creation',
  44773. fn: function (aString){
  44774. var self=this;
  44775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44776. return $core.withContext(function($ctx1) {
  44777. //>>excludeEnd("ctx");
  44778. var $2,$3,$1;
  44779. $2=self._new();
  44780. $recv($2)._name_(aString);
  44781. $3=$recv($2)._yourself();
  44782. $1=$3;
  44783. return $1;
  44784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44785. }, function($ctx1) {$ctx1.fill(self,"on:",{aString:aString},$globals.ScopeVar.klass)});
  44786. //>>excludeEnd("ctx");
  44787. },
  44788. //>>excludeStart("ide", pragmas.excludeIdeData);
  44789. args: ["aString"],
  44790. source: "on: aString\x0a\x09^ self new\x0a\x09\x09name: aString;\x0a\x09\x09yourself",
  44791. referencedClasses: [],
  44792. //>>excludeEnd("ide");
  44793. messageSends: ["name:", "new", "yourself"]
  44794. }),
  44795. $globals.ScopeVar.klass);
  44796. $core.addClass('AliasVar', $globals.ScopeVar, ['node'], 'Compiler-Semantic');
  44797. //>>excludeStart("ide", pragmas.excludeIdeData);
  44798. $globals.AliasVar.comment="I am an internally defined variable by the compiler";
  44799. //>>excludeEnd("ide");
  44800. $core.addMethod(
  44801. $core.method({
  44802. selector: "node",
  44803. protocol: 'accessing',
  44804. fn: function (){
  44805. var self=this;
  44806. var $1;
  44807. $1=self["@node"];
  44808. return $1;
  44809. },
  44810. //>>excludeStart("ide", pragmas.excludeIdeData);
  44811. args: [],
  44812. source: "node\x0a\x09^ node",
  44813. referencedClasses: [],
  44814. //>>excludeEnd("ide");
  44815. messageSends: []
  44816. }),
  44817. $globals.AliasVar);
  44818. $core.addMethod(
  44819. $core.method({
  44820. selector: "node:",
  44821. protocol: 'accessing',
  44822. fn: function (aNode){
  44823. var self=this;
  44824. self["@node"]=aNode;
  44825. return self;
  44826. },
  44827. //>>excludeStart("ide", pragmas.excludeIdeData);
  44828. args: ["aNode"],
  44829. source: "node: aNode\x0a\x09node := aNode",
  44830. referencedClasses: [],
  44831. //>>excludeEnd("ide");
  44832. messageSends: []
  44833. }),
  44834. $globals.AliasVar);
  44835. $core.addClass('ArgVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  44836. //>>excludeStart("ide", pragmas.excludeIdeData);
  44837. $globals.ArgVar.comment="I am an argument of a method or block.";
  44838. //>>excludeEnd("ide");
  44839. $core.addMethod(
  44840. $core.method({
  44841. selector: "isArgVar",
  44842. protocol: 'testing',
  44843. fn: function (){
  44844. var self=this;
  44845. return true;
  44846. },
  44847. //>>excludeStart("ide", pragmas.excludeIdeData);
  44848. args: [],
  44849. source: "isArgVar\x0a\x09^ true",
  44850. referencedClasses: [],
  44851. //>>excludeEnd("ide");
  44852. messageSends: []
  44853. }),
  44854. $globals.ArgVar);
  44855. $core.addMethod(
  44856. $core.method({
  44857. selector: "isImmutable",
  44858. protocol: 'testing',
  44859. fn: function (){
  44860. var self=this;
  44861. return true;
  44862. },
  44863. //>>excludeStart("ide", pragmas.excludeIdeData);
  44864. args: [],
  44865. source: "isImmutable\x0a\x09^ true",
  44866. referencedClasses: [],
  44867. //>>excludeEnd("ide");
  44868. messageSends: []
  44869. }),
  44870. $globals.ArgVar);
  44871. $core.addClass('ClassRefVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  44872. //>>excludeStart("ide", pragmas.excludeIdeData);
  44873. $globals.ClassRefVar.comment="I am an class reference variable";
  44874. //>>excludeEnd("ide");
  44875. $core.addMethod(
  44876. $core.method({
  44877. selector: "alias",
  44878. protocol: 'accessing',
  44879. fn: function (){
  44880. var self=this;
  44881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44882. return $core.withContext(function($ctx1) {
  44883. //>>excludeEnd("ctx");
  44884. var $1;
  44885. $1=$recv("$".__comma(self._name())).__comma("()");
  44886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44887. $ctx1.sendIdx[","]=1;
  44888. //>>excludeEnd("ctx");
  44889. return $1;
  44890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44891. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.ClassRefVar)});
  44892. //>>excludeEnd("ctx");
  44893. },
  44894. //>>excludeStart("ide", pragmas.excludeIdeData);
  44895. args: [],
  44896. source: "alias\x0a\x09\x22Fixes issue #190.\x0a\x09A function is created in the method definition, answering the class or nil.\x0a\x09See JSStream >> #nextPutClassRefFunction:\x22\x0a\x09\x0a\x09^ '$', self name, '()'",
  44897. referencedClasses: [],
  44898. //>>excludeEnd("ide");
  44899. messageSends: [",", "name"]
  44900. }),
  44901. $globals.ClassRefVar);
  44902. $core.addMethod(
  44903. $core.method({
  44904. selector: "isClassRefVar",
  44905. protocol: 'testing',
  44906. fn: function (){
  44907. var self=this;
  44908. return true;
  44909. },
  44910. //>>excludeStart("ide", pragmas.excludeIdeData);
  44911. args: [],
  44912. source: "isClassRefVar\x0a\x09^ true",
  44913. referencedClasses: [],
  44914. //>>excludeEnd("ide");
  44915. messageSends: []
  44916. }),
  44917. $globals.ClassRefVar);
  44918. $core.addMethod(
  44919. $core.method({
  44920. selector: "isImmutable",
  44921. protocol: 'testing',
  44922. fn: function (){
  44923. var self=this;
  44924. return true;
  44925. },
  44926. //>>excludeStart("ide", pragmas.excludeIdeData);
  44927. args: [],
  44928. source: "isImmutable\x0a\x09^ true",
  44929. referencedClasses: [],
  44930. //>>excludeEnd("ide");
  44931. messageSends: []
  44932. }),
  44933. $globals.ClassRefVar);
  44934. $core.addClass('InstanceVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  44935. //>>excludeStart("ide", pragmas.excludeIdeData);
  44936. $globals.InstanceVar.comment="I am an instance variable of a method or block.";
  44937. //>>excludeEnd("ide");
  44938. $core.addMethod(
  44939. $core.method({
  44940. selector: "alias",
  44941. protocol: 'testing',
  44942. fn: function (){
  44943. var self=this;
  44944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44945. return $core.withContext(function($ctx1) {
  44946. //>>excludeEnd("ctx");
  44947. var $1;
  44948. $1=$recv("self[\x22@".__comma(self._name())).__comma("\x22]");
  44949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44950. $ctx1.sendIdx[","]=1;
  44951. //>>excludeEnd("ctx");
  44952. return $1;
  44953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44954. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.InstanceVar)});
  44955. //>>excludeEnd("ctx");
  44956. },
  44957. //>>excludeStart("ide", pragmas.excludeIdeData);
  44958. args: [],
  44959. source: "alias\x0a\x09^ 'self[\x22@', self name, '\x22]'",
  44960. referencedClasses: [],
  44961. //>>excludeEnd("ide");
  44962. messageSends: [",", "name"]
  44963. }),
  44964. $globals.InstanceVar);
  44965. $core.addMethod(
  44966. $core.method({
  44967. selector: "isInstanceVar",
  44968. protocol: 'testing',
  44969. fn: function (){
  44970. var self=this;
  44971. return true;
  44972. },
  44973. //>>excludeStart("ide", pragmas.excludeIdeData);
  44974. args: [],
  44975. source: "isInstanceVar\x0a\x09^ true",
  44976. referencedClasses: [],
  44977. //>>excludeEnd("ide");
  44978. messageSends: []
  44979. }),
  44980. $globals.InstanceVar);
  44981. $core.addClass('PseudoVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  44982. //>>excludeStart("ide", pragmas.excludeIdeData);
  44983. $globals.PseudoVar.comment="I am an pseudo variable.\x0a\x0aThe five Smalltalk pseudo variables are: 'self', 'super', 'nil', 'true' and 'false'";
  44984. //>>excludeEnd("ide");
  44985. $core.addMethod(
  44986. $core.method({
  44987. selector: "alias",
  44988. protocol: 'accessing',
  44989. fn: function (){
  44990. var self=this;
  44991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44992. return $core.withContext(function($ctx1) {
  44993. //>>excludeEnd("ctx");
  44994. var $1;
  44995. $1=self._name();
  44996. return $1;
  44997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44998. }, function($ctx1) {$ctx1.fill(self,"alias",{},$globals.PseudoVar)});
  44999. //>>excludeEnd("ctx");
  45000. },
  45001. //>>excludeStart("ide", pragmas.excludeIdeData);
  45002. args: [],
  45003. source: "alias\x0a\x09^ self name",
  45004. referencedClasses: [],
  45005. //>>excludeEnd("ide");
  45006. messageSends: ["name"]
  45007. }),
  45008. $globals.PseudoVar);
  45009. $core.addMethod(
  45010. $core.method({
  45011. selector: "isImmutable",
  45012. protocol: 'testing',
  45013. fn: function (){
  45014. var self=this;
  45015. return true;
  45016. },
  45017. //>>excludeStart("ide", pragmas.excludeIdeData);
  45018. args: [],
  45019. source: "isImmutable\x0a\x09^ true",
  45020. referencedClasses: [],
  45021. //>>excludeEnd("ide");
  45022. messageSends: []
  45023. }),
  45024. $globals.PseudoVar);
  45025. $core.addMethod(
  45026. $core.method({
  45027. selector: "isPseudoVar",
  45028. protocol: 'testing',
  45029. fn: function (){
  45030. var self=this;
  45031. return true;
  45032. },
  45033. //>>excludeStart("ide", pragmas.excludeIdeData);
  45034. args: [],
  45035. source: "isPseudoVar\x0a\x09^ true",
  45036. referencedClasses: [],
  45037. //>>excludeEnd("ide");
  45038. messageSends: []
  45039. }),
  45040. $globals.PseudoVar);
  45041. $core.addClass('TempVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45042. //>>excludeStart("ide", pragmas.excludeIdeData);
  45043. $globals.TempVar.comment="I am an temporary variable of a method or block.";
  45044. //>>excludeEnd("ide");
  45045. $core.addMethod(
  45046. $core.method({
  45047. selector: "isTempVar",
  45048. protocol: 'testing',
  45049. fn: function (){
  45050. var self=this;
  45051. return true;
  45052. },
  45053. //>>excludeStart("ide", pragmas.excludeIdeData);
  45054. args: [],
  45055. source: "isTempVar\x0a\x09^ true",
  45056. referencedClasses: [],
  45057. //>>excludeEnd("ide");
  45058. messageSends: []
  45059. }),
  45060. $globals.TempVar);
  45061. $core.addClass('UnknownVar', $globals.ScopeVar, [], 'Compiler-Semantic');
  45062. //>>excludeStart("ide", pragmas.excludeIdeData);
  45063. $globals.UnknownVar.comment="I am an unknown variable. Amber uses unknown variables as JavaScript globals";
  45064. //>>excludeEnd("ide");
  45065. $core.addMethod(
  45066. $core.method({
  45067. selector: "isUnknownVar",
  45068. protocol: 'testing',
  45069. fn: function (){
  45070. var self=this;
  45071. return true;
  45072. },
  45073. //>>excludeStart("ide", pragmas.excludeIdeData);
  45074. args: [],
  45075. source: "isUnknownVar\x0a\x09^ true",
  45076. referencedClasses: [],
  45077. //>>excludeEnd("ide");
  45078. messageSends: []
  45079. }),
  45080. $globals.UnknownVar);
  45081. $core.addClass('SemanticAnalyzer', $globals.NodeVisitor, ['currentScope', 'blockIndex', 'theClass', 'classReferences', 'messageSends', 'superSends'], 'Compiler-Semantic');
  45082. //>>excludeStart("ide", pragmas.excludeIdeData);
  45083. $globals.SemanticAnalyzer.comment="I semantically analyze the abstract syntax tree and annotate it with informations such as non local returns and variable scopes.";
  45084. //>>excludeEnd("ide");
  45085. $core.addMethod(
  45086. $core.method({
  45087. selector: "classReferences",
  45088. protocol: 'accessing',
  45089. fn: function (){
  45090. var self=this;
  45091. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  45092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45093. return $core.withContext(function($ctx1) {
  45094. //>>excludeEnd("ctx");
  45095. var $2,$1,$receiver;
  45096. $2=self["@classReferences"];
  45097. if(($receiver = $2) == null || $receiver.isNil){
  45098. self["@classReferences"]=$recv($Set())._new();
  45099. $1=self["@classReferences"];
  45100. } else {
  45101. $1=$2;
  45102. };
  45103. return $1;
  45104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45105. }, function($ctx1) {$ctx1.fill(self,"classReferences",{},$globals.SemanticAnalyzer)});
  45106. //>>excludeEnd("ctx");
  45107. },
  45108. //>>excludeStart("ide", pragmas.excludeIdeData);
  45109. args: [],
  45110. source: "classReferences\x0a\x09^ classReferences ifNil: [ classReferences := Set new ]",
  45111. referencedClasses: ["Set"],
  45112. //>>excludeEnd("ide");
  45113. messageSends: ["ifNil:", "new"]
  45114. }),
  45115. $globals.SemanticAnalyzer);
  45116. $core.addMethod(
  45117. $core.method({
  45118. selector: "errorShadowingVariable:",
  45119. protocol: 'error handling',
  45120. fn: function (aString){
  45121. var self=this;
  45122. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  45123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45124. return $core.withContext(function($ctx1) {
  45125. //>>excludeEnd("ctx");
  45126. var $1,$2;
  45127. $1=$recv($ShadowingVariableError())._new();
  45128. $recv($1)._variableName_(aString);
  45129. $2=$recv($1)._signal();
  45130. return self;
  45131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45132. }, function($ctx1) {$ctx1.fill(self,"errorShadowingVariable:",{aString:aString},$globals.SemanticAnalyzer)});
  45133. //>>excludeEnd("ctx");
  45134. },
  45135. //>>excludeStart("ide", pragmas.excludeIdeData);
  45136. args: ["aString"],
  45137. source: "errorShadowingVariable: aString\x0a\x09ShadowingVariableError new\x0a\x09\x09variableName: aString;\x0a\x09\x09signal",
  45138. referencedClasses: ["ShadowingVariableError"],
  45139. //>>excludeEnd("ide");
  45140. messageSends: ["variableName:", "new", "signal"]
  45141. }),
  45142. $globals.SemanticAnalyzer);
  45143. $core.addMethod(
  45144. $core.method({
  45145. selector: "errorUnknownVariable:",
  45146. protocol: 'error handling',
  45147. fn: function (aNode){
  45148. var self=this;
  45149. var identifier;
  45150. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  45151. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  45152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45153. return $core.withContext(function($ctx1) {
  45154. //>>excludeEnd("ctx");
  45155. var $1,$2,$3,$4,$5;
  45156. identifier=$recv(aNode)._value();
  45157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45158. $ctx1.sendIdx["value"]=1;
  45159. //>>excludeEnd("ctx");
  45160. $1=$recv($recv($recv($recv($Smalltalk())._globalJsVariables())._includes_(identifier))._not())._and_((function(){
  45161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45162. return $core.withContext(function($ctx2) {
  45163. //>>excludeEnd("ctx");
  45164. return self._isVariableGloballyUndefined_(identifier);
  45165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45166. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  45167. //>>excludeEnd("ctx");
  45168. }));
  45169. if($core.assert($1)){
  45170. $2=$recv($UnknownVariableError())._new();
  45171. $3=$2;
  45172. $4=$recv(aNode)._value();
  45173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45174. $ctx1.sendIdx["value"]=2;
  45175. //>>excludeEnd("ctx");
  45176. $recv($3)._variableName_($4);
  45177. $5=$recv($2)._signal();
  45178. $5;
  45179. } else {
  45180. $recv($recv($recv(self["@currentScope"])._methodScope())._unknownVariables())._add_($recv(aNode)._value());
  45181. };
  45182. return self;
  45183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45184. }, function($ctx1) {$ctx1.fill(self,"errorUnknownVariable:",{aNode:aNode,identifier:identifier},$globals.SemanticAnalyzer)});
  45185. //>>excludeEnd("ctx");
  45186. },
  45187. //>>excludeStart("ide", pragmas.excludeIdeData);
  45188. args: ["aNode"],
  45189. source: "errorUnknownVariable: aNode\x0a\x09\x22Throw an error if the variable is undeclared in the global JS scope (i.e. window).\x0a\x09We allow all variables listed by Smalltalk>>#globalJsVariables.\x0a\x09This list includes: `jQuery`, `window`, `document`, `process` and `global`\x0a\x09for nodejs and browser environments.\x0a\x09\x0a\x09This is only to make sure compilation works on both browser-based and nodejs environments.\x0a\x09The ideal solution would be to use a pragma instead\x22\x0a\x0a\x09| identifier |\x0a\x09identifier := aNode value.\x0a\x09\x0a\x09((Smalltalk globalJsVariables includes: identifier) not\x0a\x09\x09and: [ self isVariableGloballyUndefined: identifier ])\x0a\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09UnknownVariableError new\x0a\x09\x09\x09\x09\x09variableName: aNode value;\x0a\x09\x09\x09\x09\x09signal ]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09currentScope methodScope unknownVariables add: aNode value ]",
  45190. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  45191. //>>excludeEnd("ide");
  45192. messageSends: ["value", "ifTrue:ifFalse:", "and:", "not", "includes:", "globalJsVariables", "isVariableGloballyUndefined:", "variableName:", "new", "signal", "add:", "unknownVariables", "methodScope"]
  45193. }),
  45194. $globals.SemanticAnalyzer);
  45195. $core.addMethod(
  45196. $core.method({
  45197. selector: "isVariableGloballyUndefined:",
  45198. protocol: 'testing',
  45199. fn: function (aString){
  45200. var self=this;
  45201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45202. return $core.withContext(function($ctx1) {
  45203. //>>excludeEnd("ctx");
  45204. return eval('typeof ' + aString + ' == "undefined"');
  45205. return self;
  45206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45207. }, function($ctx1) {$ctx1.fill(self,"isVariableGloballyUndefined:",{aString:aString},$globals.SemanticAnalyzer)});
  45208. //>>excludeEnd("ctx");
  45209. },
  45210. //>>excludeStart("ide", pragmas.excludeIdeData);
  45211. args: ["aString"],
  45212. source: "isVariableGloballyUndefined: aString\x0a\x09<return eval('typeof ' + aString + ' == \x22undefined\x22')>",
  45213. referencedClasses: [],
  45214. //>>excludeEnd("ide");
  45215. messageSends: []
  45216. }),
  45217. $globals.SemanticAnalyzer);
  45218. $core.addMethod(
  45219. $core.method({
  45220. selector: "messageSends",
  45221. protocol: 'accessing',
  45222. fn: function (){
  45223. var self=this;
  45224. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  45225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45226. return $core.withContext(function($ctx1) {
  45227. //>>excludeEnd("ctx");
  45228. var $2,$1,$receiver;
  45229. $2=self["@messageSends"];
  45230. if(($receiver = $2) == null || $receiver.isNil){
  45231. self["@messageSends"]=$recv($Dictionary())._new();
  45232. $1=self["@messageSends"];
  45233. } else {
  45234. $1=$2;
  45235. };
  45236. return $1;
  45237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45238. }, function($ctx1) {$ctx1.fill(self,"messageSends",{},$globals.SemanticAnalyzer)});
  45239. //>>excludeEnd("ctx");
  45240. },
  45241. //>>excludeStart("ide", pragmas.excludeIdeData);
  45242. args: [],
  45243. source: "messageSends\x0a\x09^ messageSends ifNil: [ messageSends := Dictionary new ]",
  45244. referencedClasses: ["Dictionary"],
  45245. //>>excludeEnd("ide");
  45246. messageSends: ["ifNil:", "new"]
  45247. }),
  45248. $globals.SemanticAnalyzer);
  45249. $core.addMethod(
  45250. $core.method({
  45251. selector: "newBlockScope",
  45252. protocol: 'factory',
  45253. fn: function (){
  45254. var self=this;
  45255. function $LexicalScope(){return $globals.LexicalScope||(typeof LexicalScope=="undefined"?nil:LexicalScope)}
  45256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45257. return $core.withContext(function($ctx1) {
  45258. //>>excludeEnd("ctx");
  45259. var $1;
  45260. $1=self._newScopeOfClass_($LexicalScope());
  45261. return $1;
  45262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45263. }, function($ctx1) {$ctx1.fill(self,"newBlockScope",{},$globals.SemanticAnalyzer)});
  45264. //>>excludeEnd("ctx");
  45265. },
  45266. //>>excludeStart("ide", pragmas.excludeIdeData);
  45267. args: [],
  45268. source: "newBlockScope\x0a\x09^ self newScopeOfClass: LexicalScope",
  45269. referencedClasses: ["LexicalScope"],
  45270. //>>excludeEnd("ide");
  45271. messageSends: ["newScopeOfClass:"]
  45272. }),
  45273. $globals.SemanticAnalyzer);
  45274. $core.addMethod(
  45275. $core.method({
  45276. selector: "newMethodScope",
  45277. protocol: 'factory',
  45278. fn: function (){
  45279. var self=this;
  45280. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  45281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45282. return $core.withContext(function($ctx1) {
  45283. //>>excludeEnd("ctx");
  45284. var $1;
  45285. $1=self._newScopeOfClass_($MethodLexicalScope());
  45286. return $1;
  45287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45288. }, function($ctx1) {$ctx1.fill(self,"newMethodScope",{},$globals.SemanticAnalyzer)});
  45289. //>>excludeEnd("ctx");
  45290. },
  45291. //>>excludeStart("ide", pragmas.excludeIdeData);
  45292. args: [],
  45293. source: "newMethodScope\x0a\x09^ self newScopeOfClass: MethodLexicalScope",
  45294. referencedClasses: ["MethodLexicalScope"],
  45295. //>>excludeEnd("ide");
  45296. messageSends: ["newScopeOfClass:"]
  45297. }),
  45298. $globals.SemanticAnalyzer);
  45299. $core.addMethod(
  45300. $core.method({
  45301. selector: "newScopeOfClass:",
  45302. protocol: 'factory',
  45303. fn: function (aLexicalScopeClass){
  45304. var self=this;
  45305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45306. return $core.withContext(function($ctx1) {
  45307. //>>excludeEnd("ctx");
  45308. var $2,$3,$1;
  45309. $2=$recv(aLexicalScopeClass)._new();
  45310. $recv($2)._outerScope_(self["@currentScope"]);
  45311. $3=$recv($2)._yourself();
  45312. $1=$3;
  45313. return $1;
  45314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45315. }, function($ctx1) {$ctx1.fill(self,"newScopeOfClass:",{aLexicalScopeClass:aLexicalScopeClass},$globals.SemanticAnalyzer)});
  45316. //>>excludeEnd("ctx");
  45317. },
  45318. //>>excludeStart("ide", pragmas.excludeIdeData);
  45319. args: ["aLexicalScopeClass"],
  45320. source: "newScopeOfClass: aLexicalScopeClass\x0a\x09^ aLexicalScopeClass new\x0a\x09\x09outerScope: currentScope;\x0a\x09\x09yourself",
  45321. referencedClasses: [],
  45322. //>>excludeEnd("ide");
  45323. messageSends: ["outerScope:", "new", "yourself"]
  45324. }),
  45325. $globals.SemanticAnalyzer);
  45326. $core.addMethod(
  45327. $core.method({
  45328. selector: "nextBlockIndex",
  45329. protocol: 'private',
  45330. fn: function (){
  45331. var self=this;
  45332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45333. return $core.withContext(function($ctx1) {
  45334. //>>excludeEnd("ctx");
  45335. var $1,$2,$receiver;
  45336. $1=self["@blockIndex"];
  45337. if(($receiver = $1) == null || $receiver.isNil){
  45338. self["@blockIndex"]=(0);
  45339. self["@blockIndex"];
  45340. } else {
  45341. $1;
  45342. };
  45343. self["@blockIndex"]=$recv(self["@blockIndex"]).__plus((1));
  45344. $2=self["@blockIndex"];
  45345. return $2;
  45346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45347. }, function($ctx1) {$ctx1.fill(self,"nextBlockIndex",{},$globals.SemanticAnalyzer)});
  45348. //>>excludeEnd("ctx");
  45349. },
  45350. //>>excludeStart("ide", pragmas.excludeIdeData);
  45351. args: [],
  45352. source: "nextBlockIndex\x0a\x09blockIndex ifNil: [ blockIndex := 0 ].\x0a\x09\x0a\x09blockIndex := blockIndex + 1.\x0a\x09^ blockIndex",
  45353. referencedClasses: [],
  45354. //>>excludeEnd("ide");
  45355. messageSends: ["ifNil:", "+"]
  45356. }),
  45357. $globals.SemanticAnalyzer);
  45358. $core.addMethod(
  45359. $core.method({
  45360. selector: "popScope",
  45361. protocol: 'scope',
  45362. fn: function (){
  45363. var self=this;
  45364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45365. return $core.withContext(function($ctx1) {
  45366. //>>excludeEnd("ctx");
  45367. var $1,$receiver;
  45368. $1=self["@currentScope"];
  45369. if(($receiver = $1) == null || $receiver.isNil){
  45370. $1;
  45371. } else {
  45372. self["@currentScope"]=$recv(self["@currentScope"])._outerScope();
  45373. self["@currentScope"];
  45374. };
  45375. return self;
  45376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45377. }, function($ctx1) {$ctx1.fill(self,"popScope",{},$globals.SemanticAnalyzer)});
  45378. //>>excludeEnd("ctx");
  45379. },
  45380. //>>excludeStart("ide", pragmas.excludeIdeData);
  45381. args: [],
  45382. source: "popScope\x0a\x09currentScope ifNotNil: [\x0a\x09\x09currentScope := currentScope outerScope ]",
  45383. referencedClasses: [],
  45384. //>>excludeEnd("ide");
  45385. messageSends: ["ifNotNil:", "outerScope"]
  45386. }),
  45387. $globals.SemanticAnalyzer);
  45388. $core.addMethod(
  45389. $core.method({
  45390. selector: "pushScope:",
  45391. protocol: 'scope',
  45392. fn: function (aScope){
  45393. var self=this;
  45394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45395. return $core.withContext(function($ctx1) {
  45396. //>>excludeEnd("ctx");
  45397. $recv(aScope)._outerScope_(self["@currentScope"]);
  45398. self["@currentScope"]=aScope;
  45399. return self;
  45400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45401. }, function($ctx1) {$ctx1.fill(self,"pushScope:",{aScope:aScope},$globals.SemanticAnalyzer)});
  45402. //>>excludeEnd("ctx");
  45403. },
  45404. //>>excludeStart("ide", pragmas.excludeIdeData);
  45405. args: ["aScope"],
  45406. source: "pushScope: aScope\x0a\x09aScope outerScope: currentScope.\x0a\x09currentScope := aScope",
  45407. referencedClasses: [],
  45408. //>>excludeEnd("ide");
  45409. messageSends: ["outerScope:"]
  45410. }),
  45411. $globals.SemanticAnalyzer);
  45412. $core.addMethod(
  45413. $core.method({
  45414. selector: "superSends",
  45415. protocol: 'accessing',
  45416. fn: function (){
  45417. var self=this;
  45418. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  45419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45420. return $core.withContext(function($ctx1) {
  45421. //>>excludeEnd("ctx");
  45422. var $2,$1,$receiver;
  45423. $2=self["@superSends"];
  45424. if(($receiver = $2) == null || $receiver.isNil){
  45425. self["@superSends"]=$recv($Dictionary())._new();
  45426. $1=self["@superSends"];
  45427. } else {
  45428. $1=$2;
  45429. };
  45430. return $1;
  45431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45432. }, function($ctx1) {$ctx1.fill(self,"superSends",{},$globals.SemanticAnalyzer)});
  45433. //>>excludeEnd("ctx");
  45434. },
  45435. //>>excludeStart("ide", pragmas.excludeIdeData);
  45436. args: [],
  45437. source: "superSends\x0a\x09^ superSends ifNil: [ superSends := Dictionary new ]",
  45438. referencedClasses: ["Dictionary"],
  45439. //>>excludeEnd("ide");
  45440. messageSends: ["ifNil:", "new"]
  45441. }),
  45442. $globals.SemanticAnalyzer);
  45443. $core.addMethod(
  45444. $core.method({
  45445. selector: "theClass",
  45446. protocol: 'accessing',
  45447. fn: function (){
  45448. var self=this;
  45449. var $1;
  45450. $1=self["@theClass"];
  45451. return $1;
  45452. },
  45453. //>>excludeStart("ide", pragmas.excludeIdeData);
  45454. args: [],
  45455. source: "theClass\x0a\x09^ theClass",
  45456. referencedClasses: [],
  45457. //>>excludeEnd("ide");
  45458. messageSends: []
  45459. }),
  45460. $globals.SemanticAnalyzer);
  45461. $core.addMethod(
  45462. $core.method({
  45463. selector: "theClass:",
  45464. protocol: 'accessing',
  45465. fn: function (aClass){
  45466. var self=this;
  45467. self["@theClass"]=aClass;
  45468. return self;
  45469. },
  45470. //>>excludeStart("ide", pragmas.excludeIdeData);
  45471. args: ["aClass"],
  45472. source: "theClass: aClass\x0a\x09theClass := aClass",
  45473. referencedClasses: [],
  45474. //>>excludeEnd("ide");
  45475. messageSends: []
  45476. }),
  45477. $globals.SemanticAnalyzer);
  45478. $core.addMethod(
  45479. $core.method({
  45480. selector: "validateVariableScope:",
  45481. protocol: 'scope',
  45482. fn: function (aString){
  45483. var self=this;
  45484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45485. return $core.withContext(function($ctx1) {
  45486. //>>excludeEnd("ctx");
  45487. var $1,$receiver;
  45488. $1=$recv(self["@currentScope"])._lookupVariable_(aString);
  45489. if(($receiver = $1) == null || $receiver.isNil){
  45490. $1;
  45491. } else {
  45492. self._errorShadowingVariable_(aString);
  45493. };
  45494. return self;
  45495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45496. }, function($ctx1) {$ctx1.fill(self,"validateVariableScope:",{aString:aString},$globals.SemanticAnalyzer)});
  45497. //>>excludeEnd("ctx");
  45498. },
  45499. //>>excludeStart("ide", pragmas.excludeIdeData);
  45500. args: ["aString"],
  45501. source: "validateVariableScope: aString\x0a\x09\x22Validate the variable scope in by doing a recursive lookup, up to the method scope\x22\x0a\x0a\x09(currentScope lookupVariable: aString) ifNotNil: [\x0a\x09\x09self errorShadowingVariable: aString ]",
  45502. referencedClasses: [],
  45503. //>>excludeEnd("ide");
  45504. messageSends: ["ifNotNil:", "lookupVariable:", "errorShadowingVariable:"]
  45505. }),
  45506. $globals.SemanticAnalyzer);
  45507. $core.addMethod(
  45508. $core.method({
  45509. selector: "visitAssignmentNode:",
  45510. protocol: 'visiting',
  45511. fn: function (aNode){
  45512. var self=this;
  45513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45514. return $core.withContext(function($ctx1) {
  45515. //>>excludeEnd("ctx");
  45516. (
  45517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45518. $ctx1.supercall = true,
  45519. //>>excludeEnd("ctx");
  45520. $globals.SemanticAnalyzer.superclass.fn.prototype._visitAssignmentNode_.apply($recv(self), [aNode]));
  45521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45522. $ctx1.supercall = false;
  45523. //>>excludeEnd("ctx");;
  45524. $recv($recv(aNode)._left())._beAssigned();
  45525. return self;
  45526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45527. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45528. //>>excludeEnd("ctx");
  45529. },
  45530. //>>excludeStart("ide", pragmas.excludeIdeData);
  45531. args: ["aNode"],
  45532. source: "visitAssignmentNode: aNode\x0a\x09super visitAssignmentNode: aNode.\x0a\x09aNode left beAssigned",
  45533. referencedClasses: [],
  45534. //>>excludeEnd("ide");
  45535. messageSends: ["visitAssignmentNode:", "beAssigned", "left"]
  45536. }),
  45537. $globals.SemanticAnalyzer);
  45538. $core.addMethod(
  45539. $core.method({
  45540. selector: "visitBlockNode:",
  45541. protocol: 'visiting',
  45542. fn: function (aNode){
  45543. var self=this;
  45544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45545. return $core.withContext(function($ctx1) {
  45546. //>>excludeEnd("ctx");
  45547. self._pushScope_(self._newBlockScope());
  45548. $recv(aNode)._scope_(self["@currentScope"]);
  45549. $recv(self["@currentScope"])._node_(aNode);
  45550. $recv(self["@currentScope"])._blockIndex_(self._nextBlockIndex());
  45551. $recv($recv(aNode)._parameters())._do_((function(each){
  45552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45553. return $core.withContext(function($ctx2) {
  45554. //>>excludeEnd("ctx");
  45555. self._validateVariableScope_(each);
  45556. return $recv(self["@currentScope"])._addArg_(each);
  45557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45558. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  45559. //>>excludeEnd("ctx");
  45560. }));
  45561. (
  45562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45563. $ctx1.supercall = true,
  45564. //>>excludeEnd("ctx");
  45565. $globals.SemanticAnalyzer.superclass.fn.prototype._visitBlockNode_.apply($recv(self), [aNode]));
  45566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45567. $ctx1.supercall = false;
  45568. //>>excludeEnd("ctx");;
  45569. self._popScope();
  45570. return self;
  45571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45572. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45573. //>>excludeEnd("ctx");
  45574. },
  45575. //>>excludeStart("ide", pragmas.excludeIdeData);
  45576. args: ["aNode"],
  45577. source: "visitBlockNode: aNode\x0a\x09self pushScope: self newBlockScope.\x0a\x09aNode scope: currentScope.\x0a\x09currentScope node: aNode.\x0a\x09currentScope blockIndex: self nextBlockIndex.\x0a\x0a\x09aNode parameters do: [ :each |\x0a\x09\x09self validateVariableScope: each.\x0a\x09\x09currentScope addArg: each ].\x0a\x0a\x09super visitBlockNode: aNode.\x0a\x09self popScope",
  45578. referencedClasses: [],
  45579. //>>excludeEnd("ide");
  45580. messageSends: ["pushScope:", "newBlockScope", "scope:", "node:", "blockIndex:", "nextBlockIndex", "do:", "parameters", "validateVariableScope:", "addArg:", "visitBlockNode:", "popScope"]
  45581. }),
  45582. $globals.SemanticAnalyzer);
  45583. $core.addMethod(
  45584. $core.method({
  45585. selector: "visitCascadeNode:",
  45586. protocol: 'visiting',
  45587. fn: function (aNode){
  45588. var self=this;
  45589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45590. return $core.withContext(function($ctx1) {
  45591. //>>excludeEnd("ctx");
  45592. var $3,$2,$1;
  45593. (
  45594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45595. $ctx1.supercall = true,
  45596. //>>excludeEnd("ctx");
  45597. $globals.SemanticAnalyzer.superclass.fn.prototype._visitCascadeNode_.apply($recv(self), [aNode]));
  45598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45599. $ctx1.supercall = false;
  45600. //>>excludeEnd("ctx");;
  45601. $3=$recv(aNode)._nodes();
  45602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45603. $ctx1.sendIdx["nodes"]=1;
  45604. //>>excludeEnd("ctx");
  45605. $2=$recv($3)._first();
  45606. $1=$recv($2)._superSend();
  45607. if($core.assert($1)){
  45608. $recv($recv(aNode)._nodes())._do_((function(each){
  45609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45610. return $core.withContext(function($ctx2) {
  45611. //>>excludeEnd("ctx");
  45612. return $recv(each)._superSend_(true);
  45613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45614. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  45615. //>>excludeEnd("ctx");
  45616. }));
  45617. };
  45618. return self;
  45619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45620. }, function($ctx1) {$ctx1.fill(self,"visitCascadeNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45621. //>>excludeEnd("ctx");
  45622. },
  45623. //>>excludeStart("ide", pragmas.excludeIdeData);
  45624. args: ["aNode"],
  45625. source: "visitCascadeNode: aNode\x0a\x09super visitCascadeNode: aNode.\x0a\x09aNode nodes first superSend ifTrue: [\x0a\x09\x09aNode nodes do: [ :each | each superSend: true ] ]",
  45626. referencedClasses: [],
  45627. //>>excludeEnd("ide");
  45628. messageSends: ["visitCascadeNode:", "ifTrue:", "superSend", "first", "nodes", "do:", "superSend:"]
  45629. }),
  45630. $globals.SemanticAnalyzer);
  45631. $core.addMethod(
  45632. $core.method({
  45633. selector: "visitMethodNode:",
  45634. protocol: 'visiting',
  45635. fn: function (aNode){
  45636. var self=this;
  45637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45638. return $core.withContext(function($ctx1) {
  45639. //>>excludeEnd("ctx");
  45640. var $1;
  45641. self._pushScope_(self._newMethodScope());
  45642. $recv(aNode)._scope_(self["@currentScope"]);
  45643. $recv(self["@currentScope"])._node_(aNode);
  45644. $recv($recv(self._theClass())._allInstanceVariableNames())._do_((function(each){
  45645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45646. return $core.withContext(function($ctx2) {
  45647. //>>excludeEnd("ctx");
  45648. return $recv(self["@currentScope"])._addIVar_(each);
  45649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45650. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  45651. //>>excludeEnd("ctx");
  45652. }));
  45653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45654. $ctx1.sendIdx["do:"]=1;
  45655. //>>excludeEnd("ctx");
  45656. $recv($recv(aNode)._arguments())._do_((function(each){
  45657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45658. return $core.withContext(function($ctx2) {
  45659. //>>excludeEnd("ctx");
  45660. self._validateVariableScope_(each);
  45661. return $recv(self["@currentScope"])._addArg_(each);
  45662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45663. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  45664. //>>excludeEnd("ctx");
  45665. }));
  45666. (
  45667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45668. $ctx1.supercall = true,
  45669. //>>excludeEnd("ctx");
  45670. $globals.SemanticAnalyzer.superclass.fn.prototype._visitMethodNode_.apply($recv(self), [aNode]));
  45671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45672. $ctx1.supercall = false;
  45673. //>>excludeEnd("ctx");;
  45674. $recv(aNode)._classReferences_(self._classReferences());
  45675. $recv(aNode)._sendIndexes_(self._messageSends());
  45676. $1=$recv(aNode)._superSends_($recv(self._superSends())._keys());
  45677. self._popScope();
  45678. return self;
  45679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45680. }, function($ctx1) {$ctx1.fill(self,"visitMethodNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45681. //>>excludeEnd("ctx");
  45682. },
  45683. //>>excludeStart("ide", pragmas.excludeIdeData);
  45684. args: ["aNode"],
  45685. source: "visitMethodNode: aNode\x0a\x09self pushScope: self newMethodScope.\x0a\x09aNode scope: currentScope.\x0a\x09currentScope node: aNode.\x0a\x0a\x09self theClass allInstanceVariableNames do: [ :each |\x0a\x09\x09currentScope addIVar: each ].\x0a\x09aNode arguments do: [ :each |\x0a\x09\x09self validateVariableScope: each.\x0a\x09\x09currentScope addArg: each ].\x0a\x0a\x09super visitMethodNode: aNode.\x0a\x0a\x09aNode\x0a\x09\x09classReferences: self classReferences;\x0a\x09\x09sendIndexes: self messageSends;\x0a\x09\x09superSends: self superSends keys.\x0a\x09self popScope",
  45686. referencedClasses: [],
  45687. //>>excludeEnd("ide");
  45688. messageSends: ["pushScope:", "newMethodScope", "scope:", "node:", "do:", "allInstanceVariableNames", "theClass", "addIVar:", "arguments", "validateVariableScope:", "addArg:", "visitMethodNode:", "classReferences:", "classReferences", "sendIndexes:", "messageSends", "superSends:", "keys", "superSends", "popScope"]
  45689. }),
  45690. $globals.SemanticAnalyzer);
  45691. $core.addMethod(
  45692. $core.method({
  45693. selector: "visitReturnNode:",
  45694. protocol: 'visiting',
  45695. fn: function (aNode){
  45696. var self=this;
  45697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45698. return $core.withContext(function($ctx1) {
  45699. //>>excludeEnd("ctx");
  45700. var $1;
  45701. $recv(aNode)._scope_(self["@currentScope"]);
  45702. $1=$recv(self["@currentScope"])._isMethodScope();
  45703. if($core.assert($1)){
  45704. $recv(self["@currentScope"])._localReturn_(true);
  45705. } else {
  45706. $recv($recv(self["@currentScope"])._methodScope())._addNonLocalReturn_(self["@currentScope"]);
  45707. };
  45708. (
  45709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45710. $ctx1.supercall = true,
  45711. //>>excludeEnd("ctx");
  45712. $globals.SemanticAnalyzer.superclass.fn.prototype._visitReturnNode_.apply($recv(self), [aNode]));
  45713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45714. $ctx1.supercall = false;
  45715. //>>excludeEnd("ctx");;
  45716. return self;
  45717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45718. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45719. //>>excludeEnd("ctx");
  45720. },
  45721. //>>excludeStart("ide", pragmas.excludeIdeData);
  45722. args: ["aNode"],
  45723. source: "visitReturnNode: aNode\x0a\x09aNode scope: currentScope.\x0a\x09currentScope isMethodScope\x0a\x09\x09ifTrue: [ currentScope localReturn: true ]\x0a\x09\x09ifFalse: [ currentScope methodScope addNonLocalReturn: currentScope ].\x0a\x09super visitReturnNode: aNode",
  45724. referencedClasses: [],
  45725. //>>excludeEnd("ide");
  45726. messageSends: ["scope:", "ifTrue:ifFalse:", "isMethodScope", "localReturn:", "addNonLocalReturn:", "methodScope", "visitReturnNode:"]
  45727. }),
  45728. $globals.SemanticAnalyzer);
  45729. $core.addMethod(
  45730. $core.method({
  45731. selector: "visitSendNode:",
  45732. protocol: 'visiting',
  45733. fn: function (aNode){
  45734. var self=this;
  45735. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  45736. function $IRSendInliner(){return $globals.IRSendInliner||(typeof IRSendInliner=="undefined"?nil:IRSendInliner)}
  45737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45738. return $core.withContext(function($ctx1) {
  45739. //>>excludeEnd("ctx");
  45740. var $3,$2,$1,$4,$5,$6,$8,$9,$7,$11,$12,$10,$13,$14,$15,$17,$18,$16,$receiver;
  45741. $3=$recv(aNode)._receiver();
  45742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45743. $ctx1.sendIdx["receiver"]=1;
  45744. //>>excludeEnd("ctx");
  45745. $2=$recv($3)._value();
  45746. $1=$recv($2).__eq("super");
  45747. if($core.assert($1)){
  45748. $recv(aNode)._superSend_(true);
  45749. $4=$recv(aNode)._receiver();
  45750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45751. $ctx1.sendIdx["receiver"]=2;
  45752. //>>excludeEnd("ctx");
  45753. $recv($4)._value_("self");
  45754. $5=self._superSends();
  45755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45756. $ctx1.sendIdx["superSends"]=1;
  45757. //>>excludeEnd("ctx");
  45758. $6=$recv(aNode)._selector();
  45759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45760. $ctx1.sendIdx["selector"]=1;
  45761. //>>excludeEnd("ctx");
  45762. $recv($5)._at_ifAbsentPut_($6,(function(){
  45763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45764. return $core.withContext(function($ctx2) {
  45765. //>>excludeEnd("ctx");
  45766. return $recv($Set())._new();
  45767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45768. $ctx2.sendIdx["new"]=1;
  45769. //>>excludeEnd("ctx");
  45770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45771. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  45772. //>>excludeEnd("ctx");
  45773. }));
  45774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45775. $ctx1.sendIdx["at:ifAbsentPut:"]=1;
  45776. //>>excludeEnd("ctx");
  45777. $8=self._superSends();
  45778. $9=$recv(aNode)._selector();
  45779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45780. $ctx1.sendIdx["selector"]=2;
  45781. //>>excludeEnd("ctx");
  45782. $7=$recv($8)._at_($9);
  45783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45784. $ctx1.sendIdx["at:"]=1;
  45785. //>>excludeEnd("ctx");
  45786. $recv($7)._add_(aNode);
  45787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45788. $ctx1.sendIdx["add:"]=1;
  45789. //>>excludeEnd("ctx");
  45790. } else {
  45791. $11=$recv($IRSendInliner())._inlinedSelectors();
  45792. $12=$recv(aNode)._selector();
  45793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45794. $ctx1.sendIdx["selector"]=3;
  45795. //>>excludeEnd("ctx");
  45796. $10=$recv($11)._includes_($12);
  45797. if($core.assert($10)){
  45798. $recv(aNode)._shouldBeInlined_(true);
  45799. $13=$recv(aNode)._receiver();
  45800. if(($receiver = $13) == null || $receiver.isNil){
  45801. $13;
  45802. } else {
  45803. var receiver;
  45804. receiver=$receiver;
  45805. $recv(receiver)._shouldBeAliased_(true);
  45806. };
  45807. };
  45808. };
  45809. $14=self._messageSends();
  45810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45811. $ctx1.sendIdx["messageSends"]=1;
  45812. //>>excludeEnd("ctx");
  45813. $15=$recv(aNode)._selector();
  45814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45815. $ctx1.sendIdx["selector"]=4;
  45816. //>>excludeEnd("ctx");
  45817. $recv($14)._at_ifAbsentPut_($15,(function(){
  45818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45819. return $core.withContext(function($ctx2) {
  45820. //>>excludeEnd("ctx");
  45821. return $recv($Set())._new();
  45822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45823. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  45824. //>>excludeEnd("ctx");
  45825. }));
  45826. $17=self._messageSends();
  45827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45828. $ctx1.sendIdx["messageSends"]=2;
  45829. //>>excludeEnd("ctx");
  45830. $18=$recv(aNode)._selector();
  45831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45832. $ctx1.sendIdx["selector"]=5;
  45833. //>>excludeEnd("ctx");
  45834. $16=$recv($17)._at_($18);
  45835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45836. $ctx1.sendIdx["at:"]=2;
  45837. //>>excludeEnd("ctx");
  45838. $recv($16)._add_(aNode);
  45839. $recv(aNode)._index_($recv($recv(self._messageSends())._at_($recv(aNode)._selector()))._size());
  45840. (
  45841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45842. $ctx1.supercall = true,
  45843. //>>excludeEnd("ctx");
  45844. $globals.SemanticAnalyzer.superclass.fn.prototype._visitSendNode_.apply($recv(self), [aNode]));
  45845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45846. $ctx1.supercall = false;
  45847. //>>excludeEnd("ctx");;
  45848. return self;
  45849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45850. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45851. //>>excludeEnd("ctx");
  45852. },
  45853. //>>excludeStart("ide", pragmas.excludeIdeData);
  45854. args: ["aNode"],
  45855. source: "visitSendNode: aNode\x0a\x0a\x09aNode receiver value = 'super'\x0a\x09\x09ifTrue: [\x0a\x09\x09\x09aNode superSend: true.\x0a\x09\x09\x09aNode receiver value: 'self'.\x0a\x09\x09\x09self superSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09\x09\x09(self superSends at: aNode selector) add: aNode ]\x0a\x09\x09\x0a\x09\x09ifFalse: [ (IRSendInliner inlinedSelectors includes: aNode selector) ifTrue: [\x0a\x09\x09\x09aNode shouldBeInlined: true.\x0a\x09\x09\x09aNode receiver ifNotNil: [ :receiver |\x0a\x09\x09\x09\x09receiver shouldBeAliased: true ] ] ].\x0a\x0a\x09self messageSends at: aNode selector ifAbsentPut: [ Set new ].\x0a\x09(self messageSends at: aNode selector) add: aNode.\x0a\x0a\x09aNode index: (self messageSends at: aNode selector) size.\x0a\x0a\x09super visitSendNode: aNode",
  45856. referencedClasses: ["Set", "IRSendInliner"],
  45857. //>>excludeEnd("ide");
  45858. messageSends: ["ifTrue:ifFalse:", "=", "value", "receiver", "superSend:", "value:", "at:ifAbsentPut:", "superSends", "selector", "new", "add:", "at:", "ifTrue:", "includes:", "inlinedSelectors", "shouldBeInlined:", "ifNotNil:", "shouldBeAliased:", "messageSends", "index:", "size", "visitSendNode:"]
  45859. }),
  45860. $globals.SemanticAnalyzer);
  45861. $core.addMethod(
  45862. $core.method({
  45863. selector: "visitSequenceNode:",
  45864. protocol: 'visiting',
  45865. fn: function (aNode){
  45866. var self=this;
  45867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45868. return $core.withContext(function($ctx1) {
  45869. //>>excludeEnd("ctx");
  45870. $recv($recv(aNode)._temps())._do_((function(each){
  45871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45872. return $core.withContext(function($ctx2) {
  45873. //>>excludeEnd("ctx");
  45874. self._validateVariableScope_(each);
  45875. return $recv(self["@currentScope"])._addTemp_(each);
  45876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45877. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  45878. //>>excludeEnd("ctx");
  45879. }));
  45880. (
  45881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45882. $ctx1.supercall = true,
  45883. //>>excludeEnd("ctx");
  45884. $globals.SemanticAnalyzer.superclass.fn.prototype._visitSequenceNode_.apply($recv(self), [aNode]));
  45885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45886. $ctx1.supercall = false;
  45887. //>>excludeEnd("ctx");;
  45888. return self;
  45889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45890. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.SemanticAnalyzer)});
  45891. //>>excludeEnd("ctx");
  45892. },
  45893. //>>excludeStart("ide", pragmas.excludeIdeData);
  45894. args: ["aNode"],
  45895. source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [ :each |\x0a\x09\x09self validateVariableScope: each.\x0a\x09\x09currentScope addTemp: each ].\x0a\x0a\x09super visitSequenceNode: aNode",
  45896. referencedClasses: [],
  45897. //>>excludeEnd("ide");
  45898. messageSends: ["do:", "temps", "validateVariableScope:", "addTemp:", "visitSequenceNode:"]
  45899. }),
  45900. $globals.SemanticAnalyzer);
  45901. $core.addMethod(
  45902. $core.method({
  45903. selector: "visitVariableNode:",
  45904. protocol: 'visiting',
  45905. fn: function (aNode){
  45906. var self=this;
  45907. var binding;
  45908. function $ClassRefVar(){return $globals.ClassRefVar||(typeof ClassRefVar=="undefined"?nil:ClassRefVar)}
  45909. function $UnknownVar(){return $globals.UnknownVar||(typeof UnknownVar=="undefined"?nil:UnknownVar)}
  45910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45911. return $core.withContext(function($ctx1) {
  45912. //>>excludeEnd("ctx");
  45913. var $1,$3,$2,$4,$5,$6,$7,$8,$9,$10,$11,$receiver;
  45914. binding=$recv(self["@currentScope"])._lookupVariable_(aNode);
  45915. $1=binding;
  45916. if(($receiver = $1) == null || $receiver.isNil){
  45917. $3=$recv(aNode)._value();
  45918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45919. $ctx1.sendIdx["value"]=1;
  45920. //>>excludeEnd("ctx");
  45921. $2=$recv($3)._isCapitalized();
  45922. if($core.assert($2)){
  45923. $4=$recv($ClassRefVar())._new();
  45924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45925. $ctx1.sendIdx["new"]=1;
  45926. //>>excludeEnd("ctx");
  45927. $5=$4;
  45928. $6=$recv(aNode)._value();
  45929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45930. $ctx1.sendIdx["value"]=2;
  45931. //>>excludeEnd("ctx");
  45932. $recv($5)._name_($6);
  45933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45934. $ctx1.sendIdx["name:"]=1;
  45935. //>>excludeEnd("ctx");
  45936. $7=$recv($4)._yourself();
  45937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45938. $ctx1.sendIdx["yourself"]=1;
  45939. //>>excludeEnd("ctx");
  45940. binding=$7;
  45941. binding;
  45942. $8=self._classReferences();
  45943. $9=$recv(aNode)._value();
  45944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45945. $ctx1.sendIdx["value"]=3;
  45946. //>>excludeEnd("ctx");
  45947. $recv($8)._add_($9);
  45948. } else {
  45949. self._errorUnknownVariable_(aNode);
  45950. $10=$recv($UnknownVar())._new();
  45951. $recv($10)._name_($recv(aNode)._value());
  45952. $11=$recv($10)._yourself();
  45953. binding=$11;
  45954. binding;
  45955. };
  45956. } else {
  45957. $1;
  45958. };
  45959. $recv(aNode)._binding_(binding);
  45960. return self;
  45961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45962. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode,binding:binding},$globals.SemanticAnalyzer)});
  45963. //>>excludeEnd("ctx");
  45964. },
  45965. //>>excludeStart("ide", pragmas.excludeIdeData);
  45966. args: ["aNode"],
  45967. source: "visitVariableNode: aNode\x0a\x09\x22Bind a ScopeVar to aNode by doing a lookup in the current scope.\x0a\x09If no ScopeVar is found, bind a UnknowVar and throw an error.\x22\x0a\x0a\x09| binding |\x0a\x09binding := currentScope lookupVariable: aNode.\x0a\x09\x0a\x09binding ifNil: [\x0a\x09\x09aNode value isCapitalized\x0a\x09\x09\x09ifTrue: [ \x22Capital letter variables might be globals.\x22\x0a\x09\x09\x09\x09binding := ClassRefVar new name: aNode value; yourself.\x0a\x09\x09\x09\x09self classReferences add: aNode value]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09self errorUnknownVariable: aNode.\x0a\x09\x09\x09\x09binding := UnknownVar new name: aNode value; yourself ] ].\x0a\x09\x09\x0a\x09aNode binding: binding.",
  45968. referencedClasses: ["ClassRefVar", "UnknownVar"],
  45969. //>>excludeEnd("ide");
  45970. messageSends: ["lookupVariable:", "ifNil:", "ifTrue:ifFalse:", "isCapitalized", "value", "name:", "new", "yourself", "add:", "classReferences", "errorUnknownVariable:", "binding:"]
  45971. }),
  45972. $globals.SemanticAnalyzer);
  45973. $core.addMethod(
  45974. $core.method({
  45975. selector: "on:",
  45976. protocol: 'instance creation',
  45977. fn: function (aClass){
  45978. var self=this;
  45979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45980. return $core.withContext(function($ctx1) {
  45981. //>>excludeEnd("ctx");
  45982. var $2,$3,$1;
  45983. $2=self._new();
  45984. $recv($2)._theClass_(aClass);
  45985. $3=$recv($2)._yourself();
  45986. $1=$3;
  45987. return $1;
  45988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45989. }, function($ctx1) {$ctx1.fill(self,"on:",{aClass:aClass},$globals.SemanticAnalyzer.klass)});
  45990. //>>excludeEnd("ctx");
  45991. },
  45992. //>>excludeStart("ide", pragmas.excludeIdeData);
  45993. args: ["aClass"],
  45994. source: "on: aClass\x0a\x09^ self new\x0a\x09\x09theClass: aClass;\x0a\x09\x09yourself",
  45995. referencedClasses: [],
  45996. //>>excludeEnd("ide");
  45997. messageSends: ["theClass:", "new", "yourself"]
  45998. }),
  45999. $globals.SemanticAnalyzer.klass);
  46000. });
  46001. define("amber_core/Compiler-Interpreter", ["amber/boot", "amber_core/Kernel-Methods", "amber_core/Compiler-Semantic", "amber_core/Kernel-Objects", "amber_core/Compiler-Core", "amber_core/Kernel-Exceptions", "amber_core/Compiler-AST"], function($boot){
  46002. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  46003. var smalltalk=$core,_st=$recv,globals=$globals;
  46004. $core.addPackage('Compiler-Interpreter');
  46005. $core.packages["Compiler-Interpreter"].transport = {"type":"amd","amdNamespace":"amber_core"};
  46006. $core.addClass('AIBlockClosure', $globals.BlockClosure, ['node', 'outerContext'], 'Compiler-Interpreter');
  46007. //>>excludeStart("ide", pragmas.excludeIdeData);
  46008. $globals.AIBlockClosure.comment="I am a special `BlockClosure` subclass used by an interpreter to interpret a block node.\x0a\x0aWhile I am polymorphic with `BlockClosure`, some methods such as `#new` will raise interpretation errors. Unlike a `BlockClosure`, my instance are not JavaScript functions.\x0a\x0aEvaluating an instance will result in interpreting the `node` instance variable (instance of `BlockNode`).";
  46009. //>>excludeEnd("ide");
  46010. $core.addMethod(
  46011. $core.method({
  46012. selector: "applyTo:arguments:",
  46013. protocol: 'evaluating',
  46014. fn: function (anObject,aCollection){
  46015. var self=this;
  46016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46017. return $core.withContext(function($ctx1) {
  46018. //>>excludeEnd("ctx");
  46019. self._interpreterError();
  46020. return self;
  46021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46022. }, function($ctx1) {$ctx1.fill(self,"applyTo:arguments:",{anObject:anObject,aCollection:aCollection},$globals.AIBlockClosure)});
  46023. //>>excludeEnd("ctx");
  46024. },
  46025. //>>excludeStart("ide", pragmas.excludeIdeData);
  46026. args: ["anObject", "aCollection"],
  46027. source: "applyTo: anObject arguments: aCollection\x0a\x09self interpreterError",
  46028. referencedClasses: [],
  46029. //>>excludeEnd("ide");
  46030. messageSends: ["interpreterError"]
  46031. }),
  46032. $globals.AIBlockClosure);
  46033. $core.addMethod(
  46034. $core.method({
  46035. selector: "compiledSource",
  46036. protocol: 'accessing',
  46037. fn: function (){
  46038. var self=this;
  46039. return "[ AST Block closure ]";
  46040. },
  46041. //>>excludeStart("ide", pragmas.excludeIdeData);
  46042. args: [],
  46043. source: "compiledSource\x0a\x09\x22Unlike blocks, the receiver doesn't represent a JS function\x22\x0a\x09\x0a\x09^ '[ AST Block closure ]'",
  46044. referencedClasses: [],
  46045. //>>excludeEnd("ide");
  46046. messageSends: []
  46047. }),
  46048. $globals.AIBlockClosure);
  46049. $core.addMethod(
  46050. $core.method({
  46051. selector: "currySelf",
  46052. protocol: 'converting',
  46053. fn: function (){
  46054. var self=this;
  46055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46056. return $core.withContext(function($ctx1) {
  46057. //>>excludeEnd("ctx");
  46058. self._interpreterError();
  46059. return self;
  46060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46061. }, function($ctx1) {$ctx1.fill(self,"currySelf",{},$globals.AIBlockClosure)});
  46062. //>>excludeEnd("ctx");
  46063. },
  46064. //>>excludeStart("ide", pragmas.excludeIdeData);
  46065. args: [],
  46066. source: "currySelf\x0a\x09self interpreterError",
  46067. referencedClasses: [],
  46068. //>>excludeEnd("ide");
  46069. messageSends: ["interpreterError"]
  46070. }),
  46071. $globals.AIBlockClosure);
  46072. $core.addMethod(
  46073. $core.method({
  46074. selector: "initializeWithContext:node:",
  46075. protocol: 'initialization',
  46076. fn: function (aContext,aNode){
  46077. var self=this;
  46078. self["@node"]=aNode;
  46079. self["@outerContext"]=aContext;
  46080. return self;
  46081. },
  46082. //>>excludeStart("ide", pragmas.excludeIdeData);
  46083. args: ["aContext", "aNode"],
  46084. source: "initializeWithContext: aContext node: aNode\x0a\x09node := aNode.\x0a\x09outerContext := aContext",
  46085. referencedClasses: [],
  46086. //>>excludeEnd("ide");
  46087. messageSends: []
  46088. }),
  46089. $globals.AIBlockClosure);
  46090. $core.addMethod(
  46091. $core.method({
  46092. selector: "interpreterError",
  46093. protocol: 'error handling',
  46094. fn: function (){
  46095. var self=this;
  46096. function $ASTInterpreterError(){return $globals.ASTInterpreterError||(typeof ASTInterpreterError=="undefined"?nil:ASTInterpreterError)}
  46097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46098. return $core.withContext(function($ctx1) {
  46099. //>>excludeEnd("ctx");
  46100. $recv($ASTInterpreterError())._signal_("Method cannot be interpreted by the interpreter.");
  46101. return self;
  46102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46103. }, function($ctx1) {$ctx1.fill(self,"interpreterError",{},$globals.AIBlockClosure)});
  46104. //>>excludeEnd("ctx");
  46105. },
  46106. //>>excludeStart("ide", pragmas.excludeIdeData);
  46107. args: [],
  46108. source: "interpreterError\x0a\x09ASTInterpreterError signal: 'Method cannot be interpreted by the interpreter.'",
  46109. referencedClasses: ["ASTInterpreterError"],
  46110. //>>excludeEnd("ide");
  46111. messageSends: ["signal:"]
  46112. }),
  46113. $globals.AIBlockClosure);
  46114. $core.addMethod(
  46115. $core.method({
  46116. selector: "numArgs",
  46117. protocol: 'accessing',
  46118. fn: function (){
  46119. var self=this;
  46120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46121. return $core.withContext(function($ctx1) {
  46122. //>>excludeEnd("ctx");
  46123. var $1;
  46124. $1=$recv($recv(self["@node"])._temps())._size();
  46125. return $1;
  46126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46127. }, function($ctx1) {$ctx1.fill(self,"numArgs",{},$globals.AIBlockClosure)});
  46128. //>>excludeEnd("ctx");
  46129. },
  46130. //>>excludeStart("ide", pragmas.excludeIdeData);
  46131. args: [],
  46132. source: "numArgs\x0a\x09^ node temps size",
  46133. referencedClasses: [],
  46134. //>>excludeEnd("ide");
  46135. messageSends: ["size", "temps"]
  46136. }),
  46137. $globals.AIBlockClosure);
  46138. $core.addMethod(
  46139. $core.method({
  46140. selector: "value",
  46141. protocol: 'evaluating',
  46142. fn: function (){
  46143. var self=this;
  46144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46145. return $core.withContext(function($ctx1) {
  46146. //>>excludeEnd("ctx");
  46147. var $1;
  46148. $1=self._valueWithPossibleArguments_([]);
  46149. return $1;
  46150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46151. }, function($ctx1) {$ctx1.fill(self,"value",{},$globals.AIBlockClosure)});
  46152. //>>excludeEnd("ctx");
  46153. },
  46154. //>>excludeStart("ide", pragmas.excludeIdeData);
  46155. args: [],
  46156. source: "value\x0a\x09^ self valueWithPossibleArguments: #()",
  46157. referencedClasses: [],
  46158. //>>excludeEnd("ide");
  46159. messageSends: ["valueWithPossibleArguments:"]
  46160. }),
  46161. $globals.AIBlockClosure);
  46162. $core.addMethod(
  46163. $core.method({
  46164. selector: "value:",
  46165. protocol: 'evaluating',
  46166. fn: function (anArgument){
  46167. var self=this;
  46168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46169. return $core.withContext(function($ctx1) {
  46170. //>>excludeEnd("ctx");
  46171. var $1;
  46172. $1=self._valueWithPossibleArguments_([anArgument]);
  46173. return $1;
  46174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46175. }, function($ctx1) {$ctx1.fill(self,"value:",{anArgument:anArgument},$globals.AIBlockClosure)});
  46176. //>>excludeEnd("ctx");
  46177. },
  46178. //>>excludeStart("ide", pragmas.excludeIdeData);
  46179. args: ["anArgument"],
  46180. source: "value: anArgument\x0a\x09^ self valueWithPossibleArguments: {anArgument}",
  46181. referencedClasses: [],
  46182. //>>excludeEnd("ide");
  46183. messageSends: ["valueWithPossibleArguments:"]
  46184. }),
  46185. $globals.AIBlockClosure);
  46186. $core.addMethod(
  46187. $core.method({
  46188. selector: "value:value:",
  46189. protocol: 'evaluating',
  46190. fn: function (firstArgument,secondArgument){
  46191. var self=this;
  46192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46193. return $core.withContext(function($ctx1) {
  46194. //>>excludeEnd("ctx");
  46195. var $1;
  46196. $1=self._valueWithPossibleArguments_([firstArgument,secondArgument]);
  46197. return $1;
  46198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46199. }, function($ctx1) {$ctx1.fill(self,"value:value:",{firstArgument:firstArgument,secondArgument:secondArgument},$globals.AIBlockClosure)});
  46200. //>>excludeEnd("ctx");
  46201. },
  46202. //>>excludeStart("ide", pragmas.excludeIdeData);
  46203. args: ["firstArgument", "secondArgument"],
  46204. source: "value: firstArgument value: secondArgument\x0a\x09^ self valueWithPossibleArguments: {firstArgument . secondArgument}",
  46205. referencedClasses: [],
  46206. //>>excludeEnd("ide");
  46207. messageSends: ["valueWithPossibleArguments:"]
  46208. }),
  46209. $globals.AIBlockClosure);
  46210. $core.addMethod(
  46211. $core.method({
  46212. selector: "value:value:value:",
  46213. protocol: 'evaluating',
  46214. fn: function (firstArgument,secondArgument,thirdArgument){
  46215. var self=this;
  46216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46217. return $core.withContext(function($ctx1) {
  46218. //>>excludeEnd("ctx");
  46219. var $1;
  46220. $1=self._valueWithPossibleArguments_([firstArgument,secondArgument,thirdArgument]);
  46221. return $1;
  46222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46223. }, function($ctx1) {$ctx1.fill(self,"value:value:value:",{firstArgument:firstArgument,secondArgument:secondArgument,thirdArgument:thirdArgument},$globals.AIBlockClosure)});
  46224. //>>excludeEnd("ctx");
  46225. },
  46226. //>>excludeStart("ide", pragmas.excludeIdeData);
  46227. args: ["firstArgument", "secondArgument", "thirdArgument"],
  46228. source: "value: firstArgument value: secondArgument value: thirdArgument\x0a\x09^ self valueWithPossibleArguments: {firstArgument . secondArgument . thirdArgument}",
  46229. referencedClasses: [],
  46230. //>>excludeEnd("ide");
  46231. messageSends: ["valueWithPossibleArguments:"]
  46232. }),
  46233. $globals.AIBlockClosure);
  46234. $core.addMethod(
  46235. $core.method({
  46236. selector: "valueWithPossibleArguments:",
  46237. protocol: 'evaluating',
  46238. fn: function (aCollection){
  46239. var self=this;
  46240. var context,sequenceNode;
  46241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46242. return $core.withContext(function($ctx1) {
  46243. //>>excludeEnd("ctx");
  46244. var $1,$2,$3,$4,$5,$6;
  46245. context=$recv(self["@outerContext"])._newInnerContext();
  46246. $1=$recv($recv($recv(self["@node"])._nodes())._first())._copy();
  46247. $recv($1)._parent_(nil);
  46248. $2=$recv($1)._yourself();
  46249. sequenceNode=$2;
  46250. $recv($recv(sequenceNode)._temps())._do_((function(each){
  46251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46252. return $core.withContext(function($ctx2) {
  46253. //>>excludeEnd("ctx");
  46254. return $recv(context)._defineLocal_(each);
  46255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46256. $ctx2.sendIdx["defineLocal:"]=1;
  46257. //>>excludeEnd("ctx");
  46258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46259. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  46260. //>>excludeEnd("ctx");
  46261. }));
  46262. $recv($recv(self["@node"])._parameters())._withIndexDo_((function(each,index){
  46263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46264. return $core.withContext(function($ctx2) {
  46265. //>>excludeEnd("ctx");
  46266. $recv(context)._defineLocal_(each);
  46267. return $recv(context)._localAt_put_(each,$recv(aCollection)._at_ifAbsent_(index,(function(){
  46268. return nil;
  46269. })));
  46270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46271. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,2)});
  46272. //>>excludeEnd("ctx");
  46273. }));
  46274. $3=$recv(context)._interpreter();
  46275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46276. $ctx1.sendIdx["interpreter"]=1;
  46277. //>>excludeEnd("ctx");
  46278. $recv($3)._node_($recv(sequenceNode)._nextChild());
  46279. $4=$recv($3)._proceed();
  46280. $5=$recv(self["@outerContext"])._interpreter();
  46281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46282. $ctx1.sendIdx["interpreter"]=2;
  46283. //>>excludeEnd("ctx");
  46284. $recv($5)._setNonLocalReturnFromContext_(context);
  46285. $6=$recv($recv(context)._interpreter())._pop();
  46286. return $6;
  46287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46288. }, function($ctx1) {$ctx1.fill(self,"valueWithPossibleArguments:",{aCollection:aCollection,context:context,sequenceNode:sequenceNode},$globals.AIBlockClosure)});
  46289. //>>excludeEnd("ctx");
  46290. },
  46291. //>>excludeStart("ide", pragmas.excludeIdeData);
  46292. args: ["aCollection"],
  46293. source: "valueWithPossibleArguments: aCollection\x0a\x09| context sequenceNode |\x0a\x09context := outerContext newInnerContext.\x0a\x0a\x09\x22Interpret a copy of the sequence node to avoid creating a new AIBlockClosure\x22\x0a\x09sequenceNode := node nodes first copy\x0a\x09\x09parent: nil;\x0a\x09\x09yourself.\x0a\x09\x09\x0a\x09\x22Define locals in the context\x22\x0a\x09sequenceNode temps do: [ :each |\x0a\x09\x09context defineLocal: each ].\x0a\x09\x09\x0a\x09\x22Populate the arguments into the context locals\x22\x09\x0a\x09node parameters withIndexDo: [ :each :index |\x0a\x09\x09context defineLocal: each.\x0a\x09\x09context localAt: each put: (aCollection at: index ifAbsent: [ nil ]) ].\x0a\x0a\x09\x22Interpret the first node of the BlockSequenceNode\x22\x0a\x09context interpreter\x0a\x09\x09node: sequenceNode nextChild;\x0a\x09\x09proceed.\x0a\x09\x09\x0a\x09outerContext interpreter\x0a\x09\x09setNonLocalReturnFromContext: context.\x0a\x09\x09\x0a\x09^ context interpreter pop",
  46294. referencedClasses: [],
  46295. //>>excludeEnd("ide");
  46296. messageSends: ["newInnerContext", "parent:", "copy", "first", "nodes", "yourself", "do:", "temps", "defineLocal:", "withIndexDo:", "parameters", "localAt:put:", "at:ifAbsent:", "node:", "interpreter", "nextChild", "proceed", "setNonLocalReturnFromContext:", "pop"]
  46297. }),
  46298. $globals.AIBlockClosure);
  46299. $core.addMethod(
  46300. $core.method({
  46301. selector: "forContext:node:",
  46302. protocol: 'instance creation',
  46303. fn: function (aContext,aNode){
  46304. var self=this;
  46305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46306. return $core.withContext(function($ctx1) {
  46307. //>>excludeEnd("ctx");
  46308. var $2,$3,$1;
  46309. $2=self._new();
  46310. $recv($2)._initializeWithContext_node_(aContext,aNode);
  46311. $3=$recv($2)._yourself();
  46312. $1=$3;
  46313. return $1;
  46314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46315. }, function($ctx1) {$ctx1.fill(self,"forContext:node:",{aContext:aContext,aNode:aNode},$globals.AIBlockClosure.klass)});
  46316. //>>excludeEnd("ctx");
  46317. },
  46318. //>>excludeStart("ide", pragmas.excludeIdeData);
  46319. args: ["aContext", "aNode"],
  46320. source: "forContext: aContext node: aNode\x0a\x09^ self new\x0a\x09\x09initializeWithContext: aContext node: aNode;\x0a\x09\x09yourself",
  46321. referencedClasses: [],
  46322. //>>excludeEnd("ide");
  46323. messageSends: ["initializeWithContext:node:", "new", "yourself"]
  46324. }),
  46325. $globals.AIBlockClosure.klass);
  46326. $core.addClass('AIContext', $globals.MethodContext, ['outerContext', 'innerContext', 'pc', 'locals', 'selector', 'index', 'sendIndexes', 'evaluatedSelector', 'ast', 'interpreter', 'supercall'], 'Compiler-Interpreter');
  46327. //>>excludeStart("ide", pragmas.excludeIdeData);
  46328. $globals.AIContext.comment="I am like a `MethodContext`, used by the `ASTInterpreter`.\x0aUnlike a `MethodContext`, my instances are not read-only.\x0a\x0aWhen debugging, my instances are created by copying the current `MethodContext` (thisContext)";
  46329. //>>excludeEnd("ide");
  46330. $core.addMethod(
  46331. $core.method({
  46332. selector: "arguments",
  46333. protocol: 'interpreting',
  46334. fn: function (){
  46335. var self=this;
  46336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46337. return $core.withContext(function($ctx1) {
  46338. //>>excludeEnd("ctx");
  46339. var $1;
  46340. $1=$recv($recv(self._ast())._arguments())._collect_((function(each){
  46341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46342. return $core.withContext(function($ctx2) {
  46343. //>>excludeEnd("ctx");
  46344. return self._localAt_ifAbsent_(each,(function(){
  46345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46346. return $core.withContext(function($ctx3) {
  46347. //>>excludeEnd("ctx");
  46348. return self._error_("Argument not in context");
  46349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46350. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  46351. //>>excludeEnd("ctx");
  46352. }));
  46353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46354. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  46355. //>>excludeEnd("ctx");
  46356. }));
  46357. return $1;
  46358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46359. }, function($ctx1) {$ctx1.fill(self,"arguments",{},$globals.AIContext)});
  46360. //>>excludeEnd("ctx");
  46361. },
  46362. //>>excludeStart("ide", pragmas.excludeIdeData);
  46363. args: [],
  46364. source: "arguments\x0a\x09^ self ast arguments collect: [ :each |\x0a\x09\x09self localAt: each ifAbsent: [ self error: 'Argument not in context' ] ]",
  46365. referencedClasses: [],
  46366. //>>excludeEnd("ide");
  46367. messageSends: ["collect:", "arguments", "ast", "localAt:ifAbsent:", "error:"]
  46368. }),
  46369. $globals.AIContext);
  46370. $core.addMethod(
  46371. $core.method({
  46372. selector: "ast",
  46373. protocol: 'interpreting',
  46374. fn: function (){
  46375. var self=this;
  46376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46377. return $core.withContext(function($ctx1) {
  46378. //>>excludeEnd("ctx");
  46379. var $1,$3,$2,$4,$5,$receiver;
  46380. $1=self._isBlockContext();
  46381. if($core.assert($1)){
  46382. $3=self._outerContext();
  46383. if(($receiver = $3) == null || $receiver.isNil){
  46384. $2=$3;
  46385. } else {
  46386. var context;
  46387. context=$receiver;
  46388. $2=$recv(context)._ast();
  46389. };
  46390. return $2;
  46391. };
  46392. $4=self["@ast"];
  46393. if(($receiver = $4) == null || $receiver.isNil){
  46394. self._initializeAST();
  46395. } else {
  46396. $4;
  46397. };
  46398. $5=self["@ast"];
  46399. return $5;
  46400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46401. }, function($ctx1) {$ctx1.fill(self,"ast",{},$globals.AIContext)});
  46402. //>>excludeEnd("ctx");
  46403. },
  46404. //>>excludeStart("ide", pragmas.excludeIdeData);
  46405. args: [],
  46406. source: "ast\x0a\x09self isBlockContext ifTrue: [ \x0a\x09\x09^ self outerContext ifNotNil: [ :context | context ast ] ].\x0a\x0a\x09ast ifNil: [ self initializeAST ].\x0a\x09^ ast",
  46407. referencedClasses: [],
  46408. //>>excludeEnd("ide");
  46409. messageSends: ["ifTrue:", "isBlockContext", "ifNotNil:", "outerContext", "ast", "ifNil:", "initializeAST"]
  46410. }),
  46411. $globals.AIContext);
  46412. $core.addMethod(
  46413. $core.method({
  46414. selector: "basicLocalAt:",
  46415. protocol: 'private',
  46416. fn: function (aString){
  46417. var self=this;
  46418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46419. return $core.withContext(function($ctx1) {
  46420. //>>excludeEnd("ctx");
  46421. var $1;
  46422. $1=$recv(self._locals())._at_(aString);
  46423. return $1;
  46424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46425. }, function($ctx1) {$ctx1.fill(self,"basicLocalAt:",{aString:aString},$globals.AIContext)});
  46426. //>>excludeEnd("ctx");
  46427. },
  46428. //>>excludeStart("ide", pragmas.excludeIdeData);
  46429. args: ["aString"],
  46430. source: "basicLocalAt: aString\x0a\x09^ self locals at: aString",
  46431. referencedClasses: [],
  46432. //>>excludeEnd("ide");
  46433. messageSends: ["at:", "locals"]
  46434. }),
  46435. $globals.AIContext);
  46436. $core.addMethod(
  46437. $core.method({
  46438. selector: "basicLocalAt:put:",
  46439. protocol: 'private',
  46440. fn: function (aString,anObject){
  46441. var self=this;
  46442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46443. return $core.withContext(function($ctx1) {
  46444. //>>excludeEnd("ctx");
  46445. $recv(self._locals())._at_put_(aString,anObject);
  46446. return self;
  46447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46448. }, function($ctx1) {$ctx1.fill(self,"basicLocalAt:put:",{aString:aString,anObject:anObject},$globals.AIContext)});
  46449. //>>excludeEnd("ctx");
  46450. },
  46451. //>>excludeStart("ide", pragmas.excludeIdeData);
  46452. args: ["aString", "anObject"],
  46453. source: "basicLocalAt: aString put: anObject\x0a\x09self locals at: aString put: anObject",
  46454. referencedClasses: [],
  46455. //>>excludeEnd("ide");
  46456. messageSends: ["at:put:", "locals"]
  46457. }),
  46458. $globals.AIContext);
  46459. $core.addMethod(
  46460. $core.method({
  46461. selector: "basicReceiver",
  46462. protocol: 'interpreting',
  46463. fn: function (){
  46464. var self=this;
  46465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46466. return $core.withContext(function($ctx1) {
  46467. //>>excludeEnd("ctx");
  46468. var $1;
  46469. $1=self._localAt_("self");
  46470. return $1;
  46471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46472. }, function($ctx1) {$ctx1.fill(self,"basicReceiver",{},$globals.AIContext)});
  46473. //>>excludeEnd("ctx");
  46474. },
  46475. //>>excludeStart("ide", pragmas.excludeIdeData);
  46476. args: [],
  46477. source: "basicReceiver\x0a\x09^ self localAt: 'self'",
  46478. referencedClasses: [],
  46479. //>>excludeEnd("ide");
  46480. messageSends: ["localAt:"]
  46481. }),
  46482. $globals.AIContext);
  46483. $core.addMethod(
  46484. $core.method({
  46485. selector: "defineLocal:",
  46486. protocol: 'accessing',
  46487. fn: function (aString){
  46488. var self=this;
  46489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46490. return $core.withContext(function($ctx1) {
  46491. //>>excludeEnd("ctx");
  46492. $recv(self._locals())._at_put_(aString,nil);
  46493. return self;
  46494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46495. }, function($ctx1) {$ctx1.fill(self,"defineLocal:",{aString:aString},$globals.AIContext)});
  46496. //>>excludeEnd("ctx");
  46497. },
  46498. //>>excludeStart("ide", pragmas.excludeIdeData);
  46499. args: ["aString"],
  46500. source: "defineLocal: aString\x0a\x09self locals at: aString put: nil",
  46501. referencedClasses: [],
  46502. //>>excludeEnd("ide");
  46503. messageSends: ["at:put:", "locals"]
  46504. }),
  46505. $globals.AIContext);
  46506. $core.addMethod(
  46507. $core.method({
  46508. selector: "evaluate:on:",
  46509. protocol: 'evaluating',
  46510. fn: function (aString,anEvaluator){
  46511. var self=this;
  46512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46513. return $core.withContext(function($ctx1) {
  46514. //>>excludeEnd("ctx");
  46515. var $1;
  46516. $1=$recv(anEvaluator)._evaluate_context_(aString,self);
  46517. return $1;
  46518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46519. }, function($ctx1) {$ctx1.fill(self,"evaluate:on:",{aString:aString,anEvaluator:anEvaluator},$globals.AIContext)});
  46520. //>>excludeEnd("ctx");
  46521. },
  46522. //>>excludeStart("ide", pragmas.excludeIdeData);
  46523. args: ["aString", "anEvaluator"],
  46524. source: "evaluate: aString on: anEvaluator\x0a\x09^ anEvaluator evaluate: aString context: self",
  46525. referencedClasses: [],
  46526. //>>excludeEnd("ide");
  46527. messageSends: ["evaluate:context:"]
  46528. }),
  46529. $globals.AIContext);
  46530. $core.addMethod(
  46531. $core.method({
  46532. selector: "evaluateNode:",
  46533. protocol: 'evaluating',
  46534. fn: function (aNode){
  46535. var self=this;
  46536. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  46537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46538. return $core.withContext(function($ctx1) {
  46539. //>>excludeEnd("ctx");
  46540. var $2,$3,$1;
  46541. $2=$recv($ASTInterpreter())._new();
  46542. $recv($2)._context_(self);
  46543. $recv($2)._node_($recv(aNode)._nextChild());
  46544. $recv($2)._proceed();
  46545. $3=$recv($2)._result();
  46546. $1=$3;
  46547. return $1;
  46548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46549. }, function($ctx1) {$ctx1.fill(self,"evaluateNode:",{aNode:aNode},$globals.AIContext)});
  46550. //>>excludeEnd("ctx");
  46551. },
  46552. //>>excludeStart("ide", pragmas.excludeIdeData);
  46553. args: ["aNode"],
  46554. source: "evaluateNode: aNode\x0a\x09^ ASTInterpreter new\x0a\x09\x09context: self;\x0a\x09\x09node: aNode nextChild;\x0a\x09\x09proceed;\x0a\x09\x09result",
  46555. referencedClasses: ["ASTInterpreter"],
  46556. //>>excludeEnd("ide");
  46557. messageSends: ["context:", "new", "node:", "nextChild", "proceed", "result"]
  46558. }),
  46559. $globals.AIContext);
  46560. $core.addMethod(
  46561. $core.method({
  46562. selector: "evaluatedSelector",
  46563. protocol: 'accessing',
  46564. fn: function (){
  46565. var self=this;
  46566. var $1;
  46567. $1=self["@evaluatedSelector"];
  46568. return $1;
  46569. },
  46570. //>>excludeStart("ide", pragmas.excludeIdeData);
  46571. args: [],
  46572. source: "evaluatedSelector\x0a\x09^ evaluatedSelector",
  46573. referencedClasses: [],
  46574. //>>excludeEnd("ide");
  46575. messageSends: []
  46576. }),
  46577. $globals.AIContext);
  46578. $core.addMethod(
  46579. $core.method({
  46580. selector: "evaluatedSelector:",
  46581. protocol: 'accessing',
  46582. fn: function (aString){
  46583. var self=this;
  46584. self["@evaluatedSelector"]=aString;
  46585. return self;
  46586. },
  46587. //>>excludeStart("ide", pragmas.excludeIdeData);
  46588. args: ["aString"],
  46589. source: "evaluatedSelector: aString\x0a\x09evaluatedSelector := aString",
  46590. referencedClasses: [],
  46591. //>>excludeEnd("ide");
  46592. messageSends: []
  46593. }),
  46594. $globals.AIContext);
  46595. $core.addMethod(
  46596. $core.method({
  46597. selector: "index",
  46598. protocol: 'accessing',
  46599. fn: function (){
  46600. var self=this;
  46601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46602. return $core.withContext(function($ctx1) {
  46603. //>>excludeEnd("ctx");
  46604. var $2,$1,$receiver;
  46605. $2=self["@index"];
  46606. if(($receiver = $2) == null || $receiver.isNil){
  46607. $1=(0);
  46608. } else {
  46609. $1=$2;
  46610. };
  46611. return $1;
  46612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46613. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.AIContext)});
  46614. //>>excludeEnd("ctx");
  46615. },
  46616. //>>excludeStart("ide", pragmas.excludeIdeData);
  46617. args: [],
  46618. source: "index\x0a\x09^ index ifNil: [ 0 ]",
  46619. referencedClasses: [],
  46620. //>>excludeEnd("ide");
  46621. messageSends: ["ifNil:"]
  46622. }),
  46623. $globals.AIContext);
  46624. $core.addMethod(
  46625. $core.method({
  46626. selector: "index:",
  46627. protocol: 'accessing',
  46628. fn: function (anInteger){
  46629. var self=this;
  46630. self["@index"]=anInteger;
  46631. return self;
  46632. },
  46633. //>>excludeStart("ide", pragmas.excludeIdeData);
  46634. args: ["anInteger"],
  46635. source: "index: anInteger\x0a\x09index := anInteger",
  46636. referencedClasses: [],
  46637. //>>excludeEnd("ide");
  46638. messageSends: []
  46639. }),
  46640. $globals.AIContext);
  46641. $core.addMethod(
  46642. $core.method({
  46643. selector: "initializeAST",
  46644. protocol: 'initialization',
  46645. fn: function (){
  46646. var self=this;
  46647. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  46648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46649. return $core.withContext(function($ctx1) {
  46650. //>>excludeEnd("ctx");
  46651. var $1;
  46652. $1=self._method();
  46653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46654. $ctx1.sendIdx["method"]=1;
  46655. //>>excludeEnd("ctx");
  46656. self["@ast"]=$recv($1)._ast();
  46657. $recv($recv($SemanticAnalyzer())._on_($recv(self._method())._methodClass()))._visit_(self["@ast"]);
  46658. return self;
  46659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46660. }, function($ctx1) {$ctx1.fill(self,"initializeAST",{},$globals.AIContext)});
  46661. //>>excludeEnd("ctx");
  46662. },
  46663. //>>excludeStart("ide", pragmas.excludeIdeData);
  46664. args: [],
  46665. source: "initializeAST\x0a\x09ast := self method ast.\x0a\x09(SemanticAnalyzer on: self method methodClass)\x0a\x09\x09visit: ast",
  46666. referencedClasses: ["SemanticAnalyzer"],
  46667. //>>excludeEnd("ide");
  46668. messageSends: ["ast", "method", "visit:", "on:", "methodClass"]
  46669. }),
  46670. $globals.AIContext);
  46671. $core.addMethod(
  46672. $core.method({
  46673. selector: "initializeFromMethodContext:",
  46674. protocol: 'initialization',
  46675. fn: function (aMethodContext){
  46676. var self=this;
  46677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46678. return $core.withContext(function($ctx1) {
  46679. //>>excludeEnd("ctx");
  46680. var $1,$2,$3,$4,$receiver;
  46681. self._evaluatedSelector_($recv(aMethodContext)._evaluatedSelector());
  46682. self._index_($recv(aMethodContext)._index());
  46683. self._sendIndexes_($recv(aMethodContext)._sendIndexes());
  46684. self._receiver_($recv(aMethodContext)._receiver());
  46685. self._supercall_($recv(aMethodContext)._supercall());
  46686. $1=self._selector_($recv(aMethodContext)._selector());
  46687. $2=$recv(aMethodContext)._outerContext();
  46688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46689. $ctx1.sendIdx["outerContext"]=1;
  46690. //>>excludeEnd("ctx");
  46691. if(($receiver = $2) == null || $receiver.isNil){
  46692. $2;
  46693. } else {
  46694. var outer;
  46695. outer=$receiver;
  46696. $3=$recv(outer)._methodContext();
  46697. if(($receiver = $3) == null || $receiver.isNil){
  46698. $3;
  46699. } else {
  46700. self._outerContext_($recv(self._class())._fromMethodContext_($recv(aMethodContext)._outerContext()));
  46701. };
  46702. $4=$recv(aMethodContext)._locals();
  46703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46704. $ctx1.sendIdx["locals"]=1;
  46705. //>>excludeEnd("ctx");
  46706. $recv($4)._keysAndValuesDo_((function(key,value){
  46707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46708. return $core.withContext(function($ctx2) {
  46709. //>>excludeEnd("ctx");
  46710. return $recv(self._locals())._at_put_(key,value);
  46711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46712. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  46713. //>>excludeEnd("ctx");
  46714. }));
  46715. };
  46716. return self;
  46717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46718. }, function($ctx1) {$ctx1.fill(self,"initializeFromMethodContext:",{aMethodContext:aMethodContext},$globals.AIContext)});
  46719. //>>excludeEnd("ctx");
  46720. },
  46721. //>>excludeStart("ide", pragmas.excludeIdeData);
  46722. args: ["aMethodContext"],
  46723. source: "initializeFromMethodContext: aMethodContext\x0a\x0a\x09self\x0a\x09\x09evaluatedSelector: aMethodContext evaluatedSelector;\x0a\x09\x09index: aMethodContext index;\x0a\x09\x09sendIndexes: aMethodContext sendIndexes;\x0a\x09\x09receiver: aMethodContext receiver;\x0a\x09\x09supercall: aMethodContext supercall;\x0a\x09\x09selector: aMethodContext selector.\x0a\x09\x09\x0a\x09aMethodContext outerContext ifNotNil: [ :outer |\x0a\x09\x09\x22If the method context is nil, the block was defined in JS, so ignore it\x22\x0a\x09\x09outer methodContext ifNotNil: [\x0a\x09\x09\x09self outerContext: (self class fromMethodContext: aMethodContext outerContext) ].\x0a\x09\x09\x09aMethodContext locals keysAndValuesDo: [ :key :value |\x0a\x09\x09\x09\x09self locals at: key put: value ] ]",
  46724. referencedClasses: [],
  46725. //>>excludeEnd("ide");
  46726. messageSends: ["evaluatedSelector:", "evaluatedSelector", "index:", "index", "sendIndexes:", "sendIndexes", "receiver:", "receiver", "supercall:", "supercall", "selector:", "selector", "ifNotNil:", "outerContext", "methodContext", "outerContext:", "fromMethodContext:", "class", "keysAndValuesDo:", "locals", "at:put:"]
  46727. }),
  46728. $globals.AIContext);
  46729. $core.addMethod(
  46730. $core.method({
  46731. selector: "initializeInterpreter",
  46732. protocol: 'initialization',
  46733. fn: function (){
  46734. var self=this;
  46735. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  46736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46737. return $core.withContext(function($ctx1) {
  46738. //>>excludeEnd("ctx");
  46739. var $1,$2,$3,$receiver;
  46740. $1=$recv($ASTInterpreter())._new();
  46741. $recv($1)._context_(self);
  46742. $2=$recv($1)._yourself();
  46743. self["@interpreter"]=$2;
  46744. $3=self._innerContext();
  46745. if(($receiver = $3) == null || $receiver.isNil){
  46746. $3;
  46747. } else {
  46748. self._setupInterpreter_(self["@interpreter"]);
  46749. };
  46750. return self;
  46751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46752. }, function($ctx1) {$ctx1.fill(self,"initializeInterpreter",{},$globals.AIContext)});
  46753. //>>excludeEnd("ctx");
  46754. },
  46755. //>>excludeStart("ide", pragmas.excludeIdeData);
  46756. args: [],
  46757. source: "initializeInterpreter\x0a\x09interpreter := ASTInterpreter new\x0a\x09\x09context: self;\x0a\x09\x09yourself.\x0a\x09\x0a\x09self innerContext ifNotNil: [\x0a\x09\x09self setupInterpreter: interpreter ]",
  46758. referencedClasses: ["ASTInterpreter"],
  46759. //>>excludeEnd("ide");
  46760. messageSends: ["context:", "new", "yourself", "ifNotNil:", "innerContext", "setupInterpreter:"]
  46761. }),
  46762. $globals.AIContext);
  46763. $core.addMethod(
  46764. $core.method({
  46765. selector: "initializeLocals",
  46766. protocol: 'initialization',
  46767. fn: function (){
  46768. var self=this;
  46769. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  46770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46771. return $core.withContext(function($ctx1) {
  46772. //>>excludeEnd("ctx");
  46773. self["@locals"]=$recv($Dictionary())._new();
  46774. $recv(self["@locals"])._at_put_("thisContext",self);
  46775. return self;
  46776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46777. }, function($ctx1) {$ctx1.fill(self,"initializeLocals",{},$globals.AIContext)});
  46778. //>>excludeEnd("ctx");
  46779. },
  46780. //>>excludeStart("ide", pragmas.excludeIdeData);
  46781. args: [],
  46782. source: "initializeLocals\x0a\x09locals := Dictionary new.\x0a\x09locals at: 'thisContext' put: self.",
  46783. referencedClasses: ["Dictionary"],
  46784. //>>excludeEnd("ide");
  46785. messageSends: ["new", "at:put:"]
  46786. }),
  46787. $globals.AIContext);
  46788. $core.addMethod(
  46789. $core.method({
  46790. selector: "innerContext",
  46791. protocol: 'accessing',
  46792. fn: function (){
  46793. var self=this;
  46794. var $1;
  46795. $1=self["@innerContext"];
  46796. return $1;
  46797. },
  46798. //>>excludeStart("ide", pragmas.excludeIdeData);
  46799. args: [],
  46800. source: "innerContext\x0a\x09^ innerContext",
  46801. referencedClasses: [],
  46802. //>>excludeEnd("ide");
  46803. messageSends: []
  46804. }),
  46805. $globals.AIContext);
  46806. $core.addMethod(
  46807. $core.method({
  46808. selector: "innerContext:",
  46809. protocol: 'accessing',
  46810. fn: function (anAIContext){
  46811. var self=this;
  46812. self["@innerContext"]=anAIContext;
  46813. return self;
  46814. },
  46815. //>>excludeStart("ide", pragmas.excludeIdeData);
  46816. args: ["anAIContext"],
  46817. source: "innerContext: anAIContext\x0a\x09innerContext := anAIContext",
  46818. referencedClasses: [],
  46819. //>>excludeEnd("ide");
  46820. messageSends: []
  46821. }),
  46822. $globals.AIContext);
  46823. $core.addMethod(
  46824. $core.method({
  46825. selector: "interpreter",
  46826. protocol: 'interpreting',
  46827. fn: function (){
  46828. var self=this;
  46829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46830. return $core.withContext(function($ctx1) {
  46831. //>>excludeEnd("ctx");
  46832. var $1,$2,$receiver;
  46833. $1=self["@interpreter"];
  46834. if(($receiver = $1) == null || $receiver.isNil){
  46835. self._initializeInterpreter();
  46836. } else {
  46837. $1;
  46838. };
  46839. $2=self["@interpreter"];
  46840. return $2;
  46841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46842. }, function($ctx1) {$ctx1.fill(self,"interpreter",{},$globals.AIContext)});
  46843. //>>excludeEnd("ctx");
  46844. },
  46845. //>>excludeStart("ide", pragmas.excludeIdeData);
  46846. args: [],
  46847. source: "interpreter\x0a\x09interpreter ifNil: [ self initializeInterpreter ].\x0a\x09^ interpreter",
  46848. referencedClasses: [],
  46849. //>>excludeEnd("ide");
  46850. messageSends: ["ifNil:", "initializeInterpreter"]
  46851. }),
  46852. $globals.AIContext);
  46853. $core.addMethod(
  46854. $core.method({
  46855. selector: "interpreter:",
  46856. protocol: 'interpreting',
  46857. fn: function (anInterpreter){
  46858. var self=this;
  46859. self["@interpreter"]=anInterpreter;
  46860. return self;
  46861. },
  46862. //>>excludeStart("ide", pragmas.excludeIdeData);
  46863. args: ["anInterpreter"],
  46864. source: "interpreter: anInterpreter\x0a\x09interpreter := anInterpreter",
  46865. referencedClasses: [],
  46866. //>>excludeEnd("ide");
  46867. messageSends: []
  46868. }),
  46869. $globals.AIContext);
  46870. $core.addMethod(
  46871. $core.method({
  46872. selector: "isTopContext",
  46873. protocol: 'testing',
  46874. fn: function (){
  46875. var self=this;
  46876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46877. return $core.withContext(function($ctx1) {
  46878. //>>excludeEnd("ctx");
  46879. var $1;
  46880. $1=$recv(self._innerContext())._isNil();
  46881. return $1;
  46882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46883. }, function($ctx1) {$ctx1.fill(self,"isTopContext",{},$globals.AIContext)});
  46884. //>>excludeEnd("ctx");
  46885. },
  46886. //>>excludeStart("ide", pragmas.excludeIdeData);
  46887. args: [],
  46888. source: "isTopContext\x0a\x09^ self innerContext isNil",
  46889. referencedClasses: [],
  46890. //>>excludeEnd("ide");
  46891. messageSends: ["isNil", "innerContext"]
  46892. }),
  46893. $globals.AIContext);
  46894. $core.addMethod(
  46895. $core.method({
  46896. selector: "localAt:",
  46897. protocol: 'accessing',
  46898. fn: function (aString){
  46899. var self=this;
  46900. var context;
  46901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46902. return $core.withContext(function($ctx1) {
  46903. //>>excludeEnd("ctx");
  46904. var $1;
  46905. context=self._lookupContextForLocal_(aString);
  46906. $1=$recv(context)._basicLocalAt_(aString);
  46907. return $1;
  46908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46909. }, function($ctx1) {$ctx1.fill(self,"localAt:",{aString:aString,context:context},$globals.AIContext)});
  46910. //>>excludeEnd("ctx");
  46911. },
  46912. //>>excludeStart("ide", pragmas.excludeIdeData);
  46913. args: ["aString"],
  46914. source: "localAt: aString\x0a\x09\x22Lookup the local value up to the method context\x22\x0a\x0a\x09| context |\x0a\x09\x0a\x09context := self lookupContextForLocal: aString.\x0a\x09^ context basicLocalAt: aString",
  46915. referencedClasses: [],
  46916. //>>excludeEnd("ide");
  46917. messageSends: ["lookupContextForLocal:", "basicLocalAt:"]
  46918. }),
  46919. $globals.AIContext);
  46920. $core.addMethod(
  46921. $core.method({
  46922. selector: "localAt:ifAbsent:",
  46923. protocol: 'accessing',
  46924. fn: function (aString,aBlock){
  46925. var self=this;
  46926. var context;
  46927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46928. return $core.withContext(function($ctx1) {
  46929. //>>excludeEnd("ctx");
  46930. var $1,$2;
  46931. var $early={};
  46932. try {
  46933. context=self._lookupContextForLocal_ifNone_(aString,(function(){
  46934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46935. return $core.withContext(function($ctx2) {
  46936. //>>excludeEnd("ctx");
  46937. $1=$recv(aBlock)._value();
  46938. throw $early=[$1];
  46939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46940. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  46941. //>>excludeEnd("ctx");
  46942. }));
  46943. $2=$recv(context)._basicLocalAt_(aString);
  46944. return $2;
  46945. }
  46946. catch(e) {if(e===$early)return e[0]; throw e}
  46947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46948. }, function($ctx1) {$ctx1.fill(self,"localAt:ifAbsent:",{aString:aString,aBlock:aBlock,context:context},$globals.AIContext)});
  46949. //>>excludeEnd("ctx");
  46950. },
  46951. //>>excludeStart("ide", pragmas.excludeIdeData);
  46952. args: ["aString", "aBlock"],
  46953. source: "localAt: aString ifAbsent: aBlock\x0a\x09\x22Lookup the local value up to the method context\x22\x0a\x0a\x09| context |\x0a\x09\x0a\x09context := self \x09\x0a\x09\x09lookupContextForLocal: aString \x0a\x09\x09ifNone: [ ^ aBlock value ].\x0a\x09\x0a\x09^ context basicLocalAt: aString",
  46954. referencedClasses: [],
  46955. //>>excludeEnd("ide");
  46956. messageSends: ["lookupContextForLocal:ifNone:", "value", "basicLocalAt:"]
  46957. }),
  46958. $globals.AIContext);
  46959. $core.addMethod(
  46960. $core.method({
  46961. selector: "localAt:put:",
  46962. protocol: 'accessing',
  46963. fn: function (aString,anObject){
  46964. var self=this;
  46965. var context;
  46966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46967. return $core.withContext(function($ctx1) {
  46968. //>>excludeEnd("ctx");
  46969. context=self._lookupContextForLocal_(aString);
  46970. $recv(context)._basicLocalAt_put_(aString,anObject);
  46971. return self;
  46972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46973. }, function($ctx1) {$ctx1.fill(self,"localAt:put:",{aString:aString,anObject:anObject,context:context},$globals.AIContext)});
  46974. //>>excludeEnd("ctx");
  46975. },
  46976. //>>excludeStart("ide", pragmas.excludeIdeData);
  46977. args: ["aString", "anObject"],
  46978. source: "localAt: aString put: anObject\x0a\x09| context |\x0a\x09\x0a\x09context := self lookupContextForLocal: aString.\x0a\x09context basicLocalAt: aString put: anObject",
  46979. referencedClasses: [],
  46980. //>>excludeEnd("ide");
  46981. messageSends: ["lookupContextForLocal:", "basicLocalAt:put:"]
  46982. }),
  46983. $globals.AIContext);
  46984. $core.addMethod(
  46985. $core.method({
  46986. selector: "locals",
  46987. protocol: 'accessing',
  46988. fn: function (){
  46989. var self=this;
  46990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46991. return $core.withContext(function($ctx1) {
  46992. //>>excludeEnd("ctx");
  46993. var $1,$2,$receiver;
  46994. $1=self["@locals"];
  46995. if(($receiver = $1) == null || $receiver.isNil){
  46996. self._initializeLocals();
  46997. } else {
  46998. $1;
  46999. };
  47000. $2=self["@locals"];
  47001. return $2;
  47002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47003. }, function($ctx1) {$ctx1.fill(self,"locals",{},$globals.AIContext)});
  47004. //>>excludeEnd("ctx");
  47005. },
  47006. //>>excludeStart("ide", pragmas.excludeIdeData);
  47007. args: [],
  47008. source: "locals\x0a\x09locals ifNil: [ self initializeLocals ].\x0a\x09\x0a\x09^ locals",
  47009. referencedClasses: [],
  47010. //>>excludeEnd("ide");
  47011. messageSends: ["ifNil:", "initializeLocals"]
  47012. }),
  47013. $globals.AIContext);
  47014. $core.addMethod(
  47015. $core.method({
  47016. selector: "lookupContextForLocal:",
  47017. protocol: 'private',
  47018. fn: function (aString){
  47019. var self=this;
  47020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47021. return $core.withContext(function($ctx1) {
  47022. //>>excludeEnd("ctx");
  47023. var $1;
  47024. $1=self._lookupContextForLocal_ifNone_(aString,(function(){
  47025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47026. return $core.withContext(function($ctx2) {
  47027. //>>excludeEnd("ctx");
  47028. return self._variableNotFound();
  47029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47030. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  47031. //>>excludeEnd("ctx");
  47032. }));
  47033. return $1;
  47034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47035. }, function($ctx1) {$ctx1.fill(self,"lookupContextForLocal:",{aString:aString},$globals.AIContext)});
  47036. //>>excludeEnd("ctx");
  47037. },
  47038. //>>excludeStart("ide", pragmas.excludeIdeData);
  47039. args: ["aString"],
  47040. source: "lookupContextForLocal: aString\x0a\x09\x22Lookup the context defining the local named `aString` \x0a\x09up to the method context\x22\x0a\x0a\x09^ self \x0a\x09\x09lookupContextForLocal: aString \x0a\x09\x09ifNone: [ self variableNotFound ]",
  47041. referencedClasses: [],
  47042. //>>excludeEnd("ide");
  47043. messageSends: ["lookupContextForLocal:ifNone:", "variableNotFound"]
  47044. }),
  47045. $globals.AIContext);
  47046. $core.addMethod(
  47047. $core.method({
  47048. selector: "lookupContextForLocal:ifNone:",
  47049. protocol: 'private',
  47050. fn: function (aString,aBlock){
  47051. var self=this;
  47052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47053. return $core.withContext(function($ctx1) {
  47054. //>>excludeEnd("ctx");
  47055. var $2,$1;
  47056. $1=$recv(self._locals())._at_ifPresent_ifAbsent_(aString,(function(){
  47057. return self;
  47058. }),(function(){
  47059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47060. return $core.withContext(function($ctx2) {
  47061. //>>excludeEnd("ctx");
  47062. $2=self._outerContext();
  47063. return $recv($2)._ifNil_ifNotNil_(aBlock,(function(context){
  47064. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47065. return $core.withContext(function($ctx3) {
  47066. //>>excludeEnd("ctx");
  47067. return $recv(context)._lookupContextForLocal_(aString);
  47068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47069. }, function($ctx3) {$ctx3.fillBlock({context:context},$ctx2,3)});
  47070. //>>excludeEnd("ctx");
  47071. }));
  47072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47073. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  47074. //>>excludeEnd("ctx");
  47075. }));
  47076. return $1;
  47077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47078. }, function($ctx1) {$ctx1.fill(self,"lookupContextForLocal:ifNone:",{aString:aString,aBlock:aBlock},$globals.AIContext)});
  47079. //>>excludeEnd("ctx");
  47080. },
  47081. //>>excludeStart("ide", pragmas.excludeIdeData);
  47082. args: ["aString", "aBlock"],
  47083. source: "lookupContextForLocal: aString ifNone: aBlock\x0a\x09\x22Lookup the context defining the local named `aString` \x0a\x09up to the method context\x22\x0a\x0a\x09^ self locals \x0a\x09\x09at: aString\x0a\x09\x09ifPresent: [ self ]\x0a\x09\x09ifAbsent: [ \x0a\x09\x09\x09self outerContext \x0a\x09\x09\x09\x09ifNil: aBlock\x0a\x09\x09\x09\x09ifNotNil: [ :context | \x0a\x09\x09\x09\x09\x09context lookupContextForLocal: aString ] ]",
  47084. referencedClasses: [],
  47085. //>>excludeEnd("ide");
  47086. messageSends: ["at:ifPresent:ifAbsent:", "locals", "ifNil:ifNotNil:", "outerContext", "lookupContextForLocal:"]
  47087. }),
  47088. $globals.AIContext);
  47089. $core.addMethod(
  47090. $core.method({
  47091. selector: "newInnerContext",
  47092. protocol: 'factory',
  47093. fn: function (){
  47094. var self=this;
  47095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47096. return $core.withContext(function($ctx1) {
  47097. //>>excludeEnd("ctx");
  47098. var $2,$3,$1;
  47099. $2=$recv(self._class())._new();
  47100. $recv($2)._outerContext_(self);
  47101. $3=$recv($2)._yourself();
  47102. $1=$3;
  47103. return $1;
  47104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47105. }, function($ctx1) {$ctx1.fill(self,"newInnerContext",{},$globals.AIContext)});
  47106. //>>excludeEnd("ctx");
  47107. },
  47108. //>>excludeStart("ide", pragmas.excludeIdeData);
  47109. args: [],
  47110. source: "newInnerContext\x0a\x09^ self class new\x0a\x09\x09outerContext: self;\x0a\x09\x09yourself",
  47111. referencedClasses: [],
  47112. //>>excludeEnd("ide");
  47113. messageSends: ["outerContext:", "new", "class", "yourself"]
  47114. }),
  47115. $globals.AIContext);
  47116. $core.addMethod(
  47117. $core.method({
  47118. selector: "outerContext",
  47119. protocol: 'accessing',
  47120. fn: function (){
  47121. var self=this;
  47122. var $1;
  47123. $1=self["@outerContext"];
  47124. return $1;
  47125. },
  47126. //>>excludeStart("ide", pragmas.excludeIdeData);
  47127. args: [],
  47128. source: "outerContext\x0a\x09^ outerContext",
  47129. referencedClasses: [],
  47130. //>>excludeEnd("ide");
  47131. messageSends: []
  47132. }),
  47133. $globals.AIContext);
  47134. $core.addMethod(
  47135. $core.method({
  47136. selector: "outerContext:",
  47137. protocol: 'accessing',
  47138. fn: function (anAIContext){
  47139. var self=this;
  47140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47141. return $core.withContext(function($ctx1) {
  47142. //>>excludeEnd("ctx");
  47143. var $1,$receiver;
  47144. self["@outerContext"]=anAIContext;
  47145. $1=self["@outerContext"];
  47146. if(($receiver = $1) == null || $receiver.isNil){
  47147. $1;
  47148. } else {
  47149. var context;
  47150. context=$receiver;
  47151. $recv(context)._innerContext_(self);
  47152. };
  47153. return self;
  47154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47155. }, function($ctx1) {$ctx1.fill(self,"outerContext:",{anAIContext:anAIContext},$globals.AIContext)});
  47156. //>>excludeEnd("ctx");
  47157. },
  47158. //>>excludeStart("ide", pragmas.excludeIdeData);
  47159. args: ["anAIContext"],
  47160. source: "outerContext: anAIContext\x0a\x09outerContext := anAIContext.\x0a\x09outerContext ifNotNil: [ :context | \x0a\x09\x09context innerContext: self ]",
  47161. referencedClasses: [],
  47162. //>>excludeEnd("ide");
  47163. messageSends: ["ifNotNil:", "innerContext:"]
  47164. }),
  47165. $globals.AIContext);
  47166. $core.addMethod(
  47167. $core.method({
  47168. selector: "receiver:",
  47169. protocol: 'interpreting',
  47170. fn: function (anObject){
  47171. var self=this;
  47172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47173. return $core.withContext(function($ctx1) {
  47174. //>>excludeEnd("ctx");
  47175. $recv(self._locals())._at_put_("self",anObject);
  47176. return self;
  47177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47178. }, function($ctx1) {$ctx1.fill(self,"receiver:",{anObject:anObject},$globals.AIContext)});
  47179. //>>excludeEnd("ctx");
  47180. },
  47181. //>>excludeStart("ide", pragmas.excludeIdeData);
  47182. args: ["anObject"],
  47183. source: "receiver: anObject\x0a\x09self locals at: 'self' put: anObject",
  47184. referencedClasses: [],
  47185. //>>excludeEnd("ide");
  47186. messageSends: ["at:put:", "locals"]
  47187. }),
  47188. $globals.AIContext);
  47189. $core.addMethod(
  47190. $core.method({
  47191. selector: "selector",
  47192. protocol: 'accessing',
  47193. fn: function (){
  47194. var self=this;
  47195. var $1;
  47196. $1=self["@selector"];
  47197. return $1;
  47198. },
  47199. //>>excludeStart("ide", pragmas.excludeIdeData);
  47200. args: [],
  47201. source: "selector\x0a\x09^ selector",
  47202. referencedClasses: [],
  47203. //>>excludeEnd("ide");
  47204. messageSends: []
  47205. }),
  47206. $globals.AIContext);
  47207. $core.addMethod(
  47208. $core.method({
  47209. selector: "selector:",
  47210. protocol: 'accessing',
  47211. fn: function (aString){
  47212. var self=this;
  47213. self["@selector"]=aString;
  47214. return self;
  47215. },
  47216. //>>excludeStart("ide", pragmas.excludeIdeData);
  47217. args: ["aString"],
  47218. source: "selector: aString\x0a\x09selector := aString",
  47219. referencedClasses: [],
  47220. //>>excludeEnd("ide");
  47221. messageSends: []
  47222. }),
  47223. $globals.AIContext);
  47224. $core.addMethod(
  47225. $core.method({
  47226. selector: "sendIndexAt:",
  47227. protocol: 'accessing',
  47228. fn: function (aString){
  47229. var self=this;
  47230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47231. return $core.withContext(function($ctx1) {
  47232. //>>excludeEnd("ctx");
  47233. var $1;
  47234. $1=$recv(self._sendIndexes())._at_ifAbsent_(aString,(function(){
  47235. return (0);
  47236. }));
  47237. return $1;
  47238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47239. }, function($ctx1) {$ctx1.fill(self,"sendIndexAt:",{aString:aString},$globals.AIContext)});
  47240. //>>excludeEnd("ctx");
  47241. },
  47242. //>>excludeStart("ide", pragmas.excludeIdeData);
  47243. args: ["aString"],
  47244. source: "sendIndexAt: aString\x0a\x09^ self sendIndexes at: aString ifAbsent: [ 0 ]",
  47245. referencedClasses: [],
  47246. //>>excludeEnd("ide");
  47247. messageSends: ["at:ifAbsent:", "sendIndexes"]
  47248. }),
  47249. $globals.AIContext);
  47250. $core.addMethod(
  47251. $core.method({
  47252. selector: "sendIndexes",
  47253. protocol: 'accessing',
  47254. fn: function (){
  47255. var self=this;
  47256. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  47257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47258. return $core.withContext(function($ctx1) {
  47259. //>>excludeEnd("ctx");
  47260. var $2,$1,$receiver;
  47261. $2=self["@sendIndexes"];
  47262. if(($receiver = $2) == null || $receiver.isNil){
  47263. $1=$recv($Dictionary())._new();
  47264. } else {
  47265. $1=$2;
  47266. };
  47267. return $1;
  47268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47269. }, function($ctx1) {$ctx1.fill(self,"sendIndexes",{},$globals.AIContext)});
  47270. //>>excludeEnd("ctx");
  47271. },
  47272. //>>excludeStart("ide", pragmas.excludeIdeData);
  47273. args: [],
  47274. source: "sendIndexes\x0a\x09^ sendIndexes ifNil: [ Dictionary new ]",
  47275. referencedClasses: ["Dictionary"],
  47276. //>>excludeEnd("ide");
  47277. messageSends: ["ifNil:", "new"]
  47278. }),
  47279. $globals.AIContext);
  47280. $core.addMethod(
  47281. $core.method({
  47282. selector: "sendIndexes:",
  47283. protocol: 'accessing',
  47284. fn: function (aDictionary){
  47285. var self=this;
  47286. self["@sendIndexes"]=aDictionary;
  47287. return self;
  47288. },
  47289. //>>excludeStart("ide", pragmas.excludeIdeData);
  47290. args: ["aDictionary"],
  47291. source: "sendIndexes: aDictionary\x0a\x09sendIndexes := aDictionary",
  47292. referencedClasses: [],
  47293. //>>excludeEnd("ide");
  47294. messageSends: []
  47295. }),
  47296. $globals.AIContext);
  47297. $core.addMethod(
  47298. $core.method({
  47299. selector: "setupInterpreter:",
  47300. protocol: 'interpreting',
  47301. fn: function (anInterpreter){
  47302. var self=this;
  47303. var currentNode;
  47304. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  47305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47306. return $core.withContext(function($ctx1) {
  47307. //>>excludeEnd("ctx");
  47308. var $1,$2,$3,$4,$5,$8,$7,$6,$receiver;
  47309. $1=$recv($ASTPCNodeVisitor())._new();
  47310. $recv($1)._selector_(self._evaluatedSelector());
  47311. $recv($1)._context_(self);
  47312. $2=$1;
  47313. $3=self._ast();
  47314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47315. $ctx1.sendIdx["ast"]=1;
  47316. //>>excludeEnd("ctx");
  47317. $recv($2)._visit_($3);
  47318. $4=$recv($1)._currentNode();
  47319. currentNode=$4;
  47320. $5=$recv(self._ast())._sequenceNode();
  47321. if(($receiver = $5) == null || $receiver.isNil){
  47322. $5;
  47323. } else {
  47324. var sequence;
  47325. sequence=$receiver;
  47326. $recv($recv(sequence)._temps())._do_((function(each){
  47327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47328. return $core.withContext(function($ctx2) {
  47329. //>>excludeEnd("ctx");
  47330. return self._defineLocal_(each);
  47331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47332. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  47333. //>>excludeEnd("ctx");
  47334. }));
  47335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47336. $ctx1.sendIdx["do:"]=1;
  47337. //>>excludeEnd("ctx");
  47338. };
  47339. $recv(anInterpreter)._node_(currentNode);
  47340. $8=self._innerContext();
  47341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47342. $ctx1.sendIdx["innerContext"]=1;
  47343. //>>excludeEnd("ctx");
  47344. $7=$recv($8)._arguments();
  47345. $6=$recv($7)._reversed();
  47346. $recv($6)._do_((function(each){
  47347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47348. return $core.withContext(function($ctx2) {
  47349. //>>excludeEnd("ctx");
  47350. return $recv(anInterpreter)._push_(each);
  47351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47352. $ctx2.sendIdx["push:"]=1;
  47353. //>>excludeEnd("ctx");
  47354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47355. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  47356. //>>excludeEnd("ctx");
  47357. }));
  47358. $recv(anInterpreter)._push_($recv(self._innerContext())._receiver());
  47359. return self;
  47360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47361. }, function($ctx1) {$ctx1.fill(self,"setupInterpreter:",{anInterpreter:anInterpreter,currentNode:currentNode},$globals.AIContext)});
  47362. //>>excludeEnd("ctx");
  47363. },
  47364. //>>excludeStart("ide", pragmas.excludeIdeData);
  47365. args: ["anInterpreter"],
  47366. source: "setupInterpreter: anInterpreter\x0a\x09| currentNode |\x0a\x09\x0a\x09\x22Retrieve the current node\x22\x0a\x09currentNode := ASTPCNodeVisitor new\x0a\x09\x09\x09selector: self evaluatedSelector;\x0a\x09\x09\x09context: self;\x0a\x09\x09\x09visit: self ast;\x0a\x09\x09\x09currentNode.\x0a\x09\x0a\x09\x22Define locals for the context\x22\x0a\x09self ast sequenceNode ifNotNil: [ :sequence |\x0a\x09\x09sequence temps do: [ :each |\x0a\x09\x09\x09self defineLocal: each ] ].\x0a\x09\x0a\x09anInterpreter node: currentNode.\x0a\x0a\x09\x22Push the send args and receiver to the interpreter stack\x22\x09\x0a\x09self innerContext arguments reversed do: [ :each | \x0a\x09\x09anInterpreter push: each ].\x0a\x09\x09\x0a\x09anInterpreter push: (self innerContext receiver)",
  47367. referencedClasses: ["ASTPCNodeVisitor"],
  47368. //>>excludeEnd("ide");
  47369. messageSends: ["selector:", "new", "evaluatedSelector", "context:", "visit:", "ast", "currentNode", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "node:", "reversed", "arguments", "innerContext", "push:", "receiver"]
  47370. }),
  47371. $globals.AIContext);
  47372. $core.addMethod(
  47373. $core.method({
  47374. selector: "supercall",
  47375. protocol: 'interpreting',
  47376. fn: function (){
  47377. var self=this;
  47378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47379. return $core.withContext(function($ctx1) {
  47380. //>>excludeEnd("ctx");
  47381. var $2,$1,$receiver;
  47382. $2=self["@supercall"];
  47383. if(($receiver = $2) == null || $receiver.isNil){
  47384. $1=false;
  47385. } else {
  47386. $1=$2;
  47387. };
  47388. return $1;
  47389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47390. }, function($ctx1) {$ctx1.fill(self,"supercall",{},$globals.AIContext)});
  47391. //>>excludeEnd("ctx");
  47392. },
  47393. //>>excludeStart("ide", pragmas.excludeIdeData);
  47394. args: [],
  47395. source: "supercall\x0a\x09^ supercall ifNil: [ false ]",
  47396. referencedClasses: [],
  47397. //>>excludeEnd("ide");
  47398. messageSends: ["ifNil:"]
  47399. }),
  47400. $globals.AIContext);
  47401. $core.addMethod(
  47402. $core.method({
  47403. selector: "supercall:",
  47404. protocol: 'interpreting',
  47405. fn: function (aBoolean){
  47406. var self=this;
  47407. self["@supercall"]=aBoolean;
  47408. return self;
  47409. },
  47410. //>>excludeStart("ide", pragmas.excludeIdeData);
  47411. args: ["aBoolean"],
  47412. source: "supercall: aBoolean\x0a\x09supercall := aBoolean",
  47413. referencedClasses: [],
  47414. //>>excludeEnd("ide");
  47415. messageSends: []
  47416. }),
  47417. $globals.AIContext);
  47418. $core.addMethod(
  47419. $core.method({
  47420. selector: "variableNotFound",
  47421. protocol: 'error handling',
  47422. fn: function (){
  47423. var self=this;
  47424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47425. return $core.withContext(function($ctx1) {
  47426. //>>excludeEnd("ctx");
  47427. self._error_("Variable missing");
  47428. return self;
  47429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47430. }, function($ctx1) {$ctx1.fill(self,"variableNotFound",{},$globals.AIContext)});
  47431. //>>excludeEnd("ctx");
  47432. },
  47433. //>>excludeStart("ide", pragmas.excludeIdeData);
  47434. args: [],
  47435. source: "variableNotFound\x0a\x09\x22Error thrown whenever a variable lookup fails\x22\x0a\x09\x0a\x09self error: 'Variable missing'",
  47436. referencedClasses: [],
  47437. //>>excludeEnd("ide");
  47438. messageSends: ["error:"]
  47439. }),
  47440. $globals.AIContext);
  47441. $core.addMethod(
  47442. $core.method({
  47443. selector: "fromMethodContext:",
  47444. protocol: 'instance creation',
  47445. fn: function (aMethodContext){
  47446. var self=this;
  47447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47448. return $core.withContext(function($ctx1) {
  47449. //>>excludeEnd("ctx");
  47450. var $2,$3,$1;
  47451. $2=self._new();
  47452. $recv($2)._initializeFromMethodContext_(aMethodContext);
  47453. $3=$recv($2)._yourself();
  47454. $1=$3;
  47455. return $1;
  47456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47457. }, function($ctx1) {$ctx1.fill(self,"fromMethodContext:",{aMethodContext:aMethodContext},$globals.AIContext.klass)});
  47458. //>>excludeEnd("ctx");
  47459. },
  47460. //>>excludeStart("ide", pragmas.excludeIdeData);
  47461. args: ["aMethodContext"],
  47462. source: "fromMethodContext: aMethodContext\x0a\x09^ self new\x0a\x09\x09initializeFromMethodContext: aMethodContext;\x0a\x09\x09yourself",
  47463. referencedClasses: [],
  47464. //>>excludeEnd("ide");
  47465. messageSends: ["initializeFromMethodContext:", "new", "yourself"]
  47466. }),
  47467. $globals.AIContext.klass);
  47468. $core.addClass('AISemanticAnalyzer', $globals.SemanticAnalyzer, ['context'], 'Compiler-Interpreter');
  47469. //>>excludeStart("ide", pragmas.excludeIdeData);
  47470. $globals.AISemanticAnalyzer.comment="I perform the same semantic analysis than `SemanticAnalyzer`, with the difference that provided an `AIContext` context, variables are bound with the context variables.";
  47471. //>>excludeEnd("ide");
  47472. $core.addMethod(
  47473. $core.method({
  47474. selector: "context",
  47475. protocol: 'accessing',
  47476. fn: function (){
  47477. var self=this;
  47478. var $1;
  47479. $1=self["@context"];
  47480. return $1;
  47481. },
  47482. //>>excludeStart("ide", pragmas.excludeIdeData);
  47483. args: [],
  47484. source: "context\x0a\x09^ context",
  47485. referencedClasses: [],
  47486. //>>excludeEnd("ide");
  47487. messageSends: []
  47488. }),
  47489. $globals.AISemanticAnalyzer);
  47490. $core.addMethod(
  47491. $core.method({
  47492. selector: "context:",
  47493. protocol: 'accessing',
  47494. fn: function (anAIContext){
  47495. var self=this;
  47496. self["@context"]=anAIContext;
  47497. return self;
  47498. },
  47499. //>>excludeStart("ide", pragmas.excludeIdeData);
  47500. args: ["anAIContext"],
  47501. source: "context: anAIContext\x0a\x09context := anAIContext",
  47502. referencedClasses: [],
  47503. //>>excludeEnd("ide");
  47504. messageSends: []
  47505. }),
  47506. $globals.AISemanticAnalyzer);
  47507. $core.addMethod(
  47508. $core.method({
  47509. selector: "visitVariableNode:",
  47510. protocol: 'visiting',
  47511. fn: function (aNode){
  47512. var self=this;
  47513. function $ASTContextVar(){return $globals.ASTContextVar||(typeof ASTContextVar=="undefined"?nil:ASTContextVar)}
  47514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47515. return $core.withContext(function($ctx1) {
  47516. //>>excludeEnd("ctx");
  47517. var $1;
  47518. var $early={};
  47519. try {
  47520. $recv(self._context())._localAt_ifAbsent_($recv(aNode)._value(),(function(){
  47521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47522. return $core.withContext(function($ctx2) {
  47523. //>>excludeEnd("ctx");
  47524. $1=(
  47525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47526. $ctx2.supercall = true,
  47527. //>>excludeEnd("ctx");
  47528. $globals.AISemanticAnalyzer.superclass.fn.prototype._visitVariableNode_.apply($recv(self), [aNode]));
  47529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47530. $ctx2.supercall = false;
  47531. //>>excludeEnd("ctx");;
  47532. throw $early=[$1];
  47533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47534. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  47535. //>>excludeEnd("ctx");
  47536. }));
  47537. $recv(aNode)._binding_($recv($ASTContextVar())._new());
  47538. return self;
  47539. }
  47540. catch(e) {if(e===$early)return e[0]; throw e}
  47541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47542. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.AISemanticAnalyzer)});
  47543. //>>excludeEnd("ctx");
  47544. },
  47545. //>>excludeStart("ide", pragmas.excludeIdeData);
  47546. args: ["aNode"],
  47547. source: "visitVariableNode: aNode\x0a\x09self context \x0a\x09\x09localAt: aNode value \x0a\x09\x09ifAbsent: [ ^ super visitVariableNode: aNode ].\x0a\x0a\x09aNode binding: ASTContextVar new",
  47548. referencedClasses: ["ASTContextVar"],
  47549. //>>excludeEnd("ide");
  47550. messageSends: ["localAt:ifAbsent:", "context", "value", "visitVariableNode:", "binding:", "new"]
  47551. }),
  47552. $globals.AISemanticAnalyzer);
  47553. $core.addClass('ASTContextVar', $globals.ScopeVar, ['context'], 'Compiler-Interpreter');
  47554. //>>excludeStart("ide", pragmas.excludeIdeData);
  47555. $globals.ASTContextVar.comment="I am a variable defined in a `context`.";
  47556. //>>excludeEnd("ide");
  47557. $core.addMethod(
  47558. $core.method({
  47559. selector: "context",
  47560. protocol: 'accessing',
  47561. fn: function (){
  47562. var self=this;
  47563. var $1;
  47564. $1=self["@context"];
  47565. return $1;
  47566. },
  47567. //>>excludeStart("ide", pragmas.excludeIdeData);
  47568. args: [],
  47569. source: "context\x0a\x09^ context",
  47570. referencedClasses: [],
  47571. //>>excludeEnd("ide");
  47572. messageSends: []
  47573. }),
  47574. $globals.ASTContextVar);
  47575. $core.addMethod(
  47576. $core.method({
  47577. selector: "context:",
  47578. protocol: 'accessing',
  47579. fn: function (anObject){
  47580. var self=this;
  47581. self["@context"]=anObject;
  47582. return self;
  47583. },
  47584. //>>excludeStart("ide", pragmas.excludeIdeData);
  47585. args: ["anObject"],
  47586. source: "context: anObject\x0a\x09context := anObject",
  47587. referencedClasses: [],
  47588. //>>excludeEnd("ide");
  47589. messageSends: []
  47590. }),
  47591. $globals.ASTContextVar);
  47592. $core.addClass('ASTDebugger', $globals.Object, ['interpreter', 'context', 'result'], 'Compiler-Interpreter');
  47593. //>>excludeStart("ide", pragmas.excludeIdeData);
  47594. $globals.ASTDebugger.comment="I am a stepping debugger interface for Amber code.\x0aI internally use an instance of `ASTInterpreter` to actually step through node and interpret them.\x0a\x0aMy instances are created from an `AIContext` with `ASTDebugger class >> context:`.\x0aThey hold an `AIContext` instance internally, recursive copy of the `MethodContext`.\x0a\x0a## API\x0a\x0aUse the methods of the `'stepping'` protocol to do stepping.";
  47595. //>>excludeEnd("ide");
  47596. $core.addMethod(
  47597. $core.method({
  47598. selector: "atEnd",
  47599. protocol: 'testing',
  47600. fn: function (){
  47601. var self=this;
  47602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47603. return $core.withContext(function($ctx1) {
  47604. //>>excludeEnd("ctx");
  47605. var $1,$2,$receiver;
  47606. $1=self._context();
  47607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47608. $ctx1.sendIdx["context"]=1;
  47609. //>>excludeEnd("ctx");
  47610. if(($receiver = $1) == null || $receiver.isNil){
  47611. return true;
  47612. } else {
  47613. $1;
  47614. };
  47615. $2=$recv($recv(self._interpreter())._atEnd())._and_((function(){
  47616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47617. return $core.withContext(function($ctx2) {
  47618. //>>excludeEnd("ctx");
  47619. return $recv(self._context())._isTopContext();
  47620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47621. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  47622. //>>excludeEnd("ctx");
  47623. }));
  47624. return $2;
  47625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47626. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.ASTDebugger)});
  47627. //>>excludeEnd("ctx");
  47628. },
  47629. //>>excludeStart("ide", pragmas.excludeIdeData);
  47630. args: [],
  47631. source: "atEnd\x09\x0a\x09self context ifNil: [ ^ true ].\x0a\x09\x0a\x09^ self interpreter atEnd and: [ \x0a\x09\x09self context isTopContext ]",
  47632. referencedClasses: [],
  47633. //>>excludeEnd("ide");
  47634. messageSends: ["ifNil:", "context", "and:", "atEnd", "interpreter", "isTopContext"]
  47635. }),
  47636. $globals.ASTDebugger);
  47637. $core.addMethod(
  47638. $core.method({
  47639. selector: "context",
  47640. protocol: 'accessing',
  47641. fn: function (){
  47642. var self=this;
  47643. var $1;
  47644. $1=self["@context"];
  47645. return $1;
  47646. },
  47647. //>>excludeStart("ide", pragmas.excludeIdeData);
  47648. args: [],
  47649. source: "context\x0a\x09^ context",
  47650. referencedClasses: [],
  47651. //>>excludeEnd("ide");
  47652. messageSends: []
  47653. }),
  47654. $globals.ASTDebugger);
  47655. $core.addMethod(
  47656. $core.method({
  47657. selector: "context:",
  47658. protocol: 'accessing',
  47659. fn: function (aContext){
  47660. var self=this;
  47661. self["@context"]=aContext;
  47662. return self;
  47663. },
  47664. //>>excludeStart("ide", pragmas.excludeIdeData);
  47665. args: ["aContext"],
  47666. source: "context: aContext\x0a\x09context := aContext",
  47667. referencedClasses: [],
  47668. //>>excludeEnd("ide");
  47669. messageSends: []
  47670. }),
  47671. $globals.ASTDebugger);
  47672. $core.addMethod(
  47673. $core.method({
  47674. selector: "flushInnerContexts",
  47675. protocol: 'actions',
  47676. fn: function (){
  47677. var self=this;
  47678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47679. return $core.withContext(function($ctx1) {
  47680. //>>excludeEnd("ctx");
  47681. var $1,$receiver;
  47682. $1=self._context();
  47683. if(($receiver = $1) == null || $receiver.isNil){
  47684. $1;
  47685. } else {
  47686. var cxt;
  47687. cxt=$receiver;
  47688. $recv(cxt)._innerContext_(nil);
  47689. };
  47690. return self;
  47691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47692. }, function($ctx1) {$ctx1.fill(self,"flushInnerContexts",{},$globals.ASTDebugger)});
  47693. //>>excludeEnd("ctx");
  47694. },
  47695. //>>excludeStart("ide", pragmas.excludeIdeData);
  47696. args: [],
  47697. source: "flushInnerContexts\x0a\x09\x22When stepping, the inner contexts are not relevent anymore,\x0a\x09and can be flushed\x22\x0a\x09\x0a\x09self context ifNotNil: [ :cxt | \x0a\x09\x09cxt innerContext: nil ]",
  47698. referencedClasses: [],
  47699. //>>excludeEnd("ide");
  47700. messageSends: ["ifNotNil:", "context", "innerContext:"]
  47701. }),
  47702. $globals.ASTDebugger);
  47703. $core.addMethod(
  47704. $core.method({
  47705. selector: "interpreter",
  47706. protocol: 'accessing',
  47707. fn: function (){
  47708. var self=this;
  47709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47710. return $core.withContext(function($ctx1) {
  47711. //>>excludeEnd("ctx");
  47712. var $2,$1,$receiver;
  47713. $2=self._context();
  47714. if(($receiver = $2) == null || $receiver.isNil){
  47715. $1=$2;
  47716. } else {
  47717. var ctx;
  47718. ctx=$receiver;
  47719. $1=$recv(ctx)._interpreter();
  47720. };
  47721. return $1;
  47722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47723. }, function($ctx1) {$ctx1.fill(self,"interpreter",{},$globals.ASTDebugger)});
  47724. //>>excludeEnd("ctx");
  47725. },
  47726. //>>excludeStart("ide", pragmas.excludeIdeData);
  47727. args: [],
  47728. source: "interpreter\x0a\x09^ self context ifNotNil: [ :ctx | \x0a\x09\x09ctx interpreter ]",
  47729. referencedClasses: [],
  47730. //>>excludeEnd("ide");
  47731. messageSends: ["ifNotNil:", "context", "interpreter"]
  47732. }),
  47733. $globals.ASTDebugger);
  47734. $core.addMethod(
  47735. $core.method({
  47736. selector: "method",
  47737. protocol: 'accessing',
  47738. fn: function (){
  47739. var self=this;
  47740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47741. return $core.withContext(function($ctx1) {
  47742. //>>excludeEnd("ctx");
  47743. var $1;
  47744. $1=$recv(self._context())._method();
  47745. return $1;
  47746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47747. }, function($ctx1) {$ctx1.fill(self,"method",{},$globals.ASTDebugger)});
  47748. //>>excludeEnd("ctx");
  47749. },
  47750. //>>excludeStart("ide", pragmas.excludeIdeData);
  47751. args: [],
  47752. source: "method\x0a\x09^ self context method",
  47753. referencedClasses: [],
  47754. //>>excludeEnd("ide");
  47755. messageSends: ["method", "context"]
  47756. }),
  47757. $globals.ASTDebugger);
  47758. $core.addMethod(
  47759. $core.method({
  47760. selector: "node",
  47761. protocol: 'accessing',
  47762. fn: function (){
  47763. var self=this;
  47764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47765. return $core.withContext(function($ctx1) {
  47766. //>>excludeEnd("ctx");
  47767. var $2,$1,$receiver;
  47768. $2=self._interpreter();
  47769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47770. $ctx1.sendIdx["interpreter"]=1;
  47771. //>>excludeEnd("ctx");
  47772. if(($receiver = $2) == null || $receiver.isNil){
  47773. $1=$2;
  47774. } else {
  47775. $1=$recv(self._interpreter())._node();
  47776. };
  47777. return $1;
  47778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47779. }, function($ctx1) {$ctx1.fill(self,"node",{},$globals.ASTDebugger)});
  47780. //>>excludeEnd("ctx");
  47781. },
  47782. //>>excludeStart("ide", pragmas.excludeIdeData);
  47783. args: [],
  47784. source: "node\x0a\x09^ self interpreter ifNotNil: [\x0a\x09\x09self interpreter node ]",
  47785. referencedClasses: [],
  47786. //>>excludeEnd("ide");
  47787. messageSends: ["ifNotNil:", "interpreter", "node"]
  47788. }),
  47789. $globals.ASTDebugger);
  47790. $core.addMethod(
  47791. $core.method({
  47792. selector: "onStep",
  47793. protocol: 'private',
  47794. fn: function (){
  47795. var self=this;
  47796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47797. return $core.withContext(function($ctx1) {
  47798. //>>excludeEnd("ctx");
  47799. var $1,$3,$2,$4,$6,$5,$receiver;
  47800. $1=self._interpreter();
  47801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47802. $ctx1.sendIdx["interpreter"]=1;
  47803. //>>excludeEnd("ctx");
  47804. self["@result"]=$recv($1)._result();
  47805. $3=self._interpreter();
  47806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47807. $ctx1.sendIdx["interpreter"]=2;
  47808. //>>excludeEnd("ctx");
  47809. $2=$recv($3)._atEnd();
  47810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47811. $ctx1.sendIdx["atEnd"]=1;
  47812. //>>excludeEnd("ctx");
  47813. if($core.assert($2)){
  47814. $4=$recv(self._context())._outerContext();
  47815. if(($receiver = $4) == null || $receiver.isNil){
  47816. $4;
  47817. } else {
  47818. var outerContext;
  47819. outerContext=$receiver;
  47820. self._context_(outerContext);
  47821. };
  47822. $6=self._interpreter();
  47823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47824. $ctx1.sendIdx["interpreter"]=3;
  47825. //>>excludeEnd("ctx");
  47826. $5=$recv($6)._atEnd();
  47827. if(!$core.assert($5)){
  47828. $recv(self._interpreter())._skip();
  47829. };
  47830. };
  47831. self._flushInnerContexts();
  47832. return self;
  47833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47834. }, function($ctx1) {$ctx1.fill(self,"onStep",{},$globals.ASTDebugger)});
  47835. //>>excludeEnd("ctx");
  47836. },
  47837. //>>excludeStart("ide", pragmas.excludeIdeData);
  47838. args: [],
  47839. source: "onStep\x0a\x09\x22After each step, check if the interpreter is at the end,\x0a\x09and if it is move to its outer context if any, skipping its \x0a\x09current node (which was just evaluated by the current \x0a\x09interpreter).\x0a\x09\x0a\x09After each step we also flush inner contexts.\x22\x0a\x09\x0a\x09result := self interpreter result.\x0a\x09\x0a\x09self interpreter atEnd ifTrue: [\x0a\x09\x09self context outerContext ifNotNil: [ :outerContext | \x0a\x09\x09\x09self context: outerContext ].\x0a\x09\x09self interpreter atEnd ifFalse: [ self interpreter skip ] ].\x0a\x09\x09\x0a\x09self flushInnerContexts",
  47840. referencedClasses: [],
  47841. //>>excludeEnd("ide");
  47842. messageSends: ["result", "interpreter", "ifTrue:", "atEnd", "ifNotNil:", "outerContext", "context", "context:", "ifFalse:", "skip", "flushInnerContexts"]
  47843. }),
  47844. $globals.ASTDebugger);
  47845. $core.addMethod(
  47846. $core.method({
  47847. selector: "proceed",
  47848. protocol: 'stepping',
  47849. fn: function (){
  47850. var self=this;
  47851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47852. return $core.withContext(function($ctx1) {
  47853. //>>excludeEnd("ctx");
  47854. $recv((function(){
  47855. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47856. return $core.withContext(function($ctx2) {
  47857. //>>excludeEnd("ctx");
  47858. return self._atEnd();
  47859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47860. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  47861. //>>excludeEnd("ctx");
  47862. }))._whileFalse_((function(){
  47863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47864. return $core.withContext(function($ctx2) {
  47865. //>>excludeEnd("ctx");
  47866. return self._stepOver();
  47867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47868. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  47869. //>>excludeEnd("ctx");
  47870. }));
  47871. return self;
  47872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47873. }, function($ctx1) {$ctx1.fill(self,"proceed",{},$globals.ASTDebugger)});
  47874. //>>excludeEnd("ctx");
  47875. },
  47876. //>>excludeStart("ide", pragmas.excludeIdeData);
  47877. args: [],
  47878. source: "proceed\x0a\x09[ self atEnd ] whileFalse: [ self stepOver ]",
  47879. referencedClasses: [],
  47880. //>>excludeEnd("ide");
  47881. messageSends: ["whileFalse:", "atEnd", "stepOver"]
  47882. }),
  47883. $globals.ASTDebugger);
  47884. $core.addMethod(
  47885. $core.method({
  47886. selector: "restart",
  47887. protocol: 'stepping',
  47888. fn: function (){
  47889. var self=this;
  47890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47891. return $core.withContext(function($ctx1) {
  47892. //>>excludeEnd("ctx");
  47893. $recv(self._interpreter())._restart();
  47894. self._flushInnerContexts();
  47895. return self;
  47896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47897. }, function($ctx1) {$ctx1.fill(self,"restart",{},$globals.ASTDebugger)});
  47898. //>>excludeEnd("ctx");
  47899. },
  47900. //>>excludeStart("ide", pragmas.excludeIdeData);
  47901. args: [],
  47902. source: "restart\x0a\x09self interpreter restart.\x0a\x09self flushInnerContexts",
  47903. referencedClasses: [],
  47904. //>>excludeEnd("ide");
  47905. messageSends: ["restart", "interpreter", "flushInnerContexts"]
  47906. }),
  47907. $globals.ASTDebugger);
  47908. $core.addMethod(
  47909. $core.method({
  47910. selector: "result",
  47911. protocol: 'accessing',
  47912. fn: function (){
  47913. var self=this;
  47914. var $1;
  47915. $1=self["@result"];
  47916. return $1;
  47917. },
  47918. //>>excludeStart("ide", pragmas.excludeIdeData);
  47919. args: [],
  47920. source: "result\x0a\x09^ result",
  47921. referencedClasses: [],
  47922. //>>excludeEnd("ide");
  47923. messageSends: []
  47924. }),
  47925. $globals.ASTDebugger);
  47926. $core.addMethod(
  47927. $core.method({
  47928. selector: "stepInto",
  47929. protocol: 'stepping',
  47930. fn: function (){
  47931. var self=this;
  47932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47933. return $core.withContext(function($ctx1) {
  47934. //>>excludeEnd("ctx");
  47935. self._shouldBeImplemented();
  47936. return self;
  47937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47938. }, function($ctx1) {$ctx1.fill(self,"stepInto",{},$globals.ASTDebugger)});
  47939. //>>excludeEnd("ctx");
  47940. },
  47941. //>>excludeStart("ide", pragmas.excludeIdeData);
  47942. args: [],
  47943. source: "stepInto\x0a\x09self shouldBeImplemented",
  47944. referencedClasses: [],
  47945. //>>excludeEnd("ide");
  47946. messageSends: ["shouldBeImplemented"]
  47947. }),
  47948. $globals.ASTDebugger);
  47949. $core.addMethod(
  47950. $core.method({
  47951. selector: "stepOver",
  47952. protocol: 'stepping',
  47953. fn: function (){
  47954. var self=this;
  47955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47956. return $core.withContext(function($ctx1) {
  47957. //>>excludeEnd("ctx");
  47958. var $1,$2;
  47959. $1=$recv(self._context())._isTopContext();
  47960. if($core.assert($1)){
  47961. $recv(self._interpreter())._stepOver();
  47962. } else {
  47963. $2=self._interpreter();
  47964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47965. $ctx1.sendIdx["interpreter"]=1;
  47966. //>>excludeEnd("ctx");
  47967. $recv($2)._skip();
  47968. };
  47969. self._onStep();
  47970. return self;
  47971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47972. }, function($ctx1) {$ctx1.fill(self,"stepOver",{},$globals.ASTDebugger)});
  47973. //>>excludeEnd("ctx");
  47974. },
  47975. //>>excludeStart("ide", pragmas.excludeIdeData);
  47976. args: [],
  47977. source: "stepOver\x0a\x09self context isTopContext \x0a\x09\x09ifFalse: [ self interpreter skip ]\x0a\x09\x09ifTrue: [ self interpreter stepOver ].\x0a\x09self onStep",
  47978. referencedClasses: [],
  47979. //>>excludeEnd("ide");
  47980. messageSends: ["ifFalse:ifTrue:", "isTopContext", "context", "skip", "interpreter", "stepOver", "onStep"]
  47981. }),
  47982. $globals.ASTDebugger);
  47983. $core.addMethod(
  47984. $core.method({
  47985. selector: "context:",
  47986. protocol: 'instance creation',
  47987. fn: function (aContext){
  47988. var self=this;
  47989. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47990. return $core.withContext(function($ctx1) {
  47991. //>>excludeEnd("ctx");
  47992. var $2,$3,$1;
  47993. $2=self._new();
  47994. $recv($2)._context_(aContext);
  47995. $3=$recv($2)._yourself();
  47996. $1=$3;
  47997. return $1;
  47998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  47999. }, function($ctx1) {$ctx1.fill(self,"context:",{aContext:aContext},$globals.ASTDebugger.klass)});
  48000. //>>excludeEnd("ctx");
  48001. },
  48002. //>>excludeStart("ide", pragmas.excludeIdeData);
  48003. args: ["aContext"],
  48004. source: "context: aContext\x0a\x09^ self new\x0a\x09\x09context: aContext;\x0a\x09\x09yourself",
  48005. referencedClasses: [],
  48006. //>>excludeEnd("ide");
  48007. messageSends: ["context:", "new", "yourself"]
  48008. }),
  48009. $globals.ASTDebugger.klass);
  48010. $core.addClass('ASTInterpreter', $globals.NodeVisitor, ['node', 'context', 'stack', 'returnValue', 'returned', 'forceAtEnd'], 'Compiler-Interpreter');
  48011. //>>excludeStart("ide", pragmas.excludeIdeData);
  48012. $globals.ASTInterpreter.comment="I visit an AST, interpreting (evaluating) nodes one after the other, using a small stack machine.\x0a\x0a## API\x0a\x0aWhile my instances should be used from within an `ASTDebugger`, which provides a more high level interface,\x0ayou can use methods from the `interpreting` protocol:\x0a\x0a- `#step` evaluates the current `node` only\x0a- `#stepOver` evaluates the AST from the current `node` up to the next stepping node (most likely the next send node)\x0a- `#proceed` evaluates eagerly the AST\x0a- `#restart` select the first node of the AST\x0a- `#skip` skips the current node, moving to the next one if any";
  48013. //>>excludeEnd("ide");
  48014. $core.addMethod(
  48015. $core.method({
  48016. selector: "assign:to:",
  48017. protocol: 'private',
  48018. fn: function (aNode,anObject){
  48019. var self=this;
  48020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48021. return $core.withContext(function($ctx1) {
  48022. //>>excludeEnd("ctx");
  48023. var $1,$3,$2,$4;
  48024. $1=$recv($recv(aNode)._binding())._isInstanceVar();
  48025. if($core.assert($1)){
  48026. $3=self._context();
  48027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48028. $ctx1.sendIdx["context"]=1;
  48029. //>>excludeEnd("ctx");
  48030. $2=$recv($3)._receiver();
  48031. $4=$recv(aNode)._value();
  48032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48033. $ctx1.sendIdx["value"]=1;
  48034. //>>excludeEnd("ctx");
  48035. $recv($2)._instVarAt_put_($4,anObject);
  48036. } else {
  48037. $recv(self._context())._localAt_put_($recv(aNode)._value(),anObject);
  48038. };
  48039. return self;
  48040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48041. }, function($ctx1) {$ctx1.fill(self,"assign:to:",{aNode:aNode,anObject:anObject},$globals.ASTInterpreter)});
  48042. //>>excludeEnd("ctx");
  48043. },
  48044. //>>excludeStart("ide", pragmas.excludeIdeData);
  48045. args: ["aNode", "anObject"],
  48046. source: "assign: aNode to: anObject\x0a\x09aNode binding isInstanceVar\x0a\x09\x09ifTrue: [ self context receiver instVarAt: aNode value put: anObject ]\x0a\x09\x09ifFalse: [ self context localAt: aNode value put: anObject ]",
  48047. referencedClasses: [],
  48048. //>>excludeEnd("ide");
  48049. messageSends: ["ifTrue:ifFalse:", "isInstanceVar", "binding", "instVarAt:put:", "receiver", "context", "value", "localAt:put:"]
  48050. }),
  48051. $globals.ASTInterpreter);
  48052. $core.addMethod(
  48053. $core.method({
  48054. selector: "atEnd",
  48055. protocol: 'testing',
  48056. fn: function (){
  48057. var self=this;
  48058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48059. return $core.withContext(function($ctx1) {
  48060. //>>excludeEnd("ctx");
  48061. var $1,$2;
  48062. $1=self["@forceAtEnd"];
  48063. if($core.assert($1)){
  48064. return true;
  48065. };
  48066. $2=$recv(self._hasReturned())._or_((function(){
  48067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48068. return $core.withContext(function($ctx2) {
  48069. //>>excludeEnd("ctx");
  48070. return $recv(self._node())._isNil();
  48071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48072. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  48073. //>>excludeEnd("ctx");
  48074. }));
  48075. return $2;
  48076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48077. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.ASTInterpreter)});
  48078. //>>excludeEnd("ctx");
  48079. },
  48080. //>>excludeStart("ide", pragmas.excludeIdeData);
  48081. args: [],
  48082. source: "atEnd\x0a\x09forceAtEnd ifTrue: [ ^ true ].\x0a\x09\x0a\x09^ self hasReturned or: [ self node isNil ]",
  48083. referencedClasses: [],
  48084. //>>excludeEnd("ide");
  48085. messageSends: ["ifTrue:", "or:", "hasReturned", "isNil", "node"]
  48086. }),
  48087. $globals.ASTInterpreter);
  48088. $core.addMethod(
  48089. $core.method({
  48090. selector: "context",
  48091. protocol: 'accessing',
  48092. fn: function (){
  48093. var self=this;
  48094. var $1;
  48095. $1=self["@context"];
  48096. return $1;
  48097. },
  48098. //>>excludeStart("ide", pragmas.excludeIdeData);
  48099. args: [],
  48100. source: "context\x0a\x09^ context",
  48101. referencedClasses: [],
  48102. //>>excludeEnd("ide");
  48103. messageSends: []
  48104. }),
  48105. $globals.ASTInterpreter);
  48106. $core.addMethod(
  48107. $core.method({
  48108. selector: "context:",
  48109. protocol: 'accessing',
  48110. fn: function (aContext){
  48111. var self=this;
  48112. self["@context"]=aContext;
  48113. return self;
  48114. },
  48115. //>>excludeStart("ide", pragmas.excludeIdeData);
  48116. args: ["aContext"],
  48117. source: "context: aContext\x0a\x09context := aContext",
  48118. referencedClasses: [],
  48119. //>>excludeEnd("ide");
  48120. messageSends: []
  48121. }),
  48122. $globals.ASTInterpreter);
  48123. $core.addMethod(
  48124. $core.method({
  48125. selector: "eval:",
  48126. protocol: 'private',
  48127. fn: function (aString){
  48128. var self=this;
  48129. var source,function_;
  48130. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  48131. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  48132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48133. return $core.withContext(function($ctx1) {
  48134. //>>excludeEnd("ctx");
  48135. var $3,$2,$1,$4,$5;
  48136. source=$recv($String())._streamContents_((function(str){
  48137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48138. return $core.withContext(function($ctx2) {
  48139. //>>excludeEnd("ctx");
  48140. $recv(str)._nextPutAll_("0,(function(");
  48141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48142. $ctx2.sendIdx["nextPutAll:"]=1;
  48143. //>>excludeEnd("ctx");
  48144. $3=self._context();
  48145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48146. $ctx2.sendIdx["context"]=1;
  48147. //>>excludeEnd("ctx");
  48148. $2=$recv($3)._locals();
  48149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48150. $ctx2.sendIdx["locals"]=1;
  48151. //>>excludeEnd("ctx");
  48152. $1=$recv($2)._keys();
  48153. $recv($1)._do_separatedBy_((function(each){
  48154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48155. return $core.withContext(function($ctx3) {
  48156. //>>excludeEnd("ctx");
  48157. return $recv(str)._nextPutAll_(each);
  48158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48159. $ctx3.sendIdx["nextPutAll:"]=2;
  48160. //>>excludeEnd("ctx");
  48161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48162. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,2)});
  48163. //>>excludeEnd("ctx");
  48164. }),(function(){
  48165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48166. return $core.withContext(function($ctx3) {
  48167. //>>excludeEnd("ctx");
  48168. return $recv(str)._nextPutAll_(",");
  48169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48170. $ctx3.sendIdx["nextPutAll:"]=3;
  48171. //>>excludeEnd("ctx");
  48172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48173. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  48174. //>>excludeEnd("ctx");
  48175. }));
  48176. $recv(str)._nextPutAll_("){ return (function() {");
  48177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48178. $ctx2.sendIdx["nextPutAll:"]=4;
  48179. //>>excludeEnd("ctx");
  48180. $recv(str)._nextPutAll_(aString);
  48181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48182. $ctx2.sendIdx["nextPutAll:"]=5;
  48183. //>>excludeEnd("ctx");
  48184. $4=$recv(str)._nextPutAll_("})()})");
  48185. return $4;
  48186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48187. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  48188. //>>excludeEnd("ctx");
  48189. }));
  48190. function_=$recv($recv($Compiler())._new())._eval_(source);
  48191. $5=$recv(function_)._valueWithPossibleArguments_($recv($recv(self._context())._locals())._values());
  48192. return $5;
  48193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48194. }, function($ctx1) {$ctx1.fill(self,"eval:",{aString:aString,source:source,function_:function_},$globals.ASTInterpreter)});
  48195. //>>excludeEnd("ctx");
  48196. },
  48197. //>>excludeStart("ide", pragmas.excludeIdeData);
  48198. args: ["aString"],
  48199. source: "eval: aString\x0a\x09\x22Evaluate aString as JS source inside an JS function.\x0a\x09aString is not sandboxed.\x22\x0a\x09\x0a\x09| source function |\x0a\x09\x0a\x09source := String streamContents: [ :str |\x0a\x09\x09str nextPutAll: '0,(function('.\x0a\x09\x09self context locals keys\x0a\x09\x09\x09do: [ :each | str nextPutAll: each ]\x0a\x09\x09\x09separatedBy: [ str nextPutAll: ',' ].\x0a\x09\x09str\x0a\x09\x09\x09nextPutAll: '){ return (function() {';\x0a\x09\x09\x09nextPutAll: aString;\x0a\x09\x09\x09nextPutAll: '})()})' ].\x0a\x09\x09\x09\x0a\x09function := Compiler new eval: source.\x0a\x09\x0a\x09^ function valueWithPossibleArguments: self context locals values",
  48200. referencedClasses: ["String", "Compiler"],
  48201. //>>excludeEnd("ide");
  48202. messageSends: ["streamContents:", "nextPutAll:", "do:separatedBy:", "keys", "locals", "context", "eval:", "new", "valueWithPossibleArguments:", "values"]
  48203. }),
  48204. $globals.ASTInterpreter);
  48205. $core.addMethod(
  48206. $core.method({
  48207. selector: "hasReturned",
  48208. protocol: 'testing',
  48209. fn: function (){
  48210. var self=this;
  48211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48212. return $core.withContext(function($ctx1) {
  48213. //>>excludeEnd("ctx");
  48214. var $2,$1,$receiver;
  48215. $2=self["@returned"];
  48216. if(($receiver = $2) == null || $receiver.isNil){
  48217. $1=false;
  48218. } else {
  48219. $1=$2;
  48220. };
  48221. return $1;
  48222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48223. }, function($ctx1) {$ctx1.fill(self,"hasReturned",{},$globals.ASTInterpreter)});
  48224. //>>excludeEnd("ctx");
  48225. },
  48226. //>>excludeStart("ide", pragmas.excludeIdeData);
  48227. args: [],
  48228. source: "hasReturned\x0a\x09^ returned ifNil: [ false ]",
  48229. referencedClasses: [],
  48230. //>>excludeEnd("ide");
  48231. messageSends: ["ifNil:"]
  48232. }),
  48233. $globals.ASTInterpreter);
  48234. $core.addMethod(
  48235. $core.method({
  48236. selector: "initialize",
  48237. protocol: 'initialization',
  48238. fn: function (){
  48239. var self=this;
  48240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48241. return $core.withContext(function($ctx1) {
  48242. //>>excludeEnd("ctx");
  48243. (
  48244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48245. $ctx1.supercall = true,
  48246. //>>excludeEnd("ctx");
  48247. $globals.ASTInterpreter.superclass.fn.prototype._initialize.apply($recv(self), []));
  48248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48249. $ctx1.supercall = false;
  48250. //>>excludeEnd("ctx");;
  48251. self["@forceAtEnd"]=false;
  48252. return self;
  48253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48254. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.ASTInterpreter)});
  48255. //>>excludeEnd("ctx");
  48256. },
  48257. //>>excludeStart("ide", pragmas.excludeIdeData);
  48258. args: [],
  48259. source: "initialize\x0a\x09super initialize.\x0a\x0a\x09forceAtEnd := false",
  48260. referencedClasses: [],
  48261. //>>excludeEnd("ide");
  48262. messageSends: ["initialize"]
  48263. }),
  48264. $globals.ASTInterpreter);
  48265. $core.addMethod(
  48266. $core.method({
  48267. selector: "interpret",
  48268. protocol: 'interpreting',
  48269. fn: function (){
  48270. var self=this;
  48271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48272. return $core.withContext(function($ctx1) {
  48273. //>>excludeEnd("ctx");
  48274. self._visit_(self._node());
  48275. return self;
  48276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48277. }, function($ctx1) {$ctx1.fill(self,"interpret",{},$globals.ASTInterpreter)});
  48278. //>>excludeEnd("ctx");
  48279. },
  48280. //>>excludeStart("ide", pragmas.excludeIdeData);
  48281. args: [],
  48282. source: "interpret\x0a\x09\x22Interpret the next node to be evaluated\x22\x0a\x09\x0a\x09self visit: self node",
  48283. referencedClasses: [],
  48284. //>>excludeEnd("ide");
  48285. messageSends: ["visit:", "node"]
  48286. }),
  48287. $globals.ASTInterpreter);
  48288. $core.addMethod(
  48289. $core.method({
  48290. selector: "interpret:",
  48291. protocol: 'interpreting',
  48292. fn: function (aNode){
  48293. var self=this;
  48294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48295. return $core.withContext(function($ctx1) {
  48296. //>>excludeEnd("ctx");
  48297. self._node_(aNode);
  48298. self._interpret();
  48299. return self;
  48300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48301. }, function($ctx1) {$ctx1.fill(self,"interpret:",{aNode:aNode},$globals.ASTInterpreter)});
  48302. //>>excludeEnd("ctx");
  48303. },
  48304. //>>excludeStart("ide", pragmas.excludeIdeData);
  48305. args: ["aNode"],
  48306. source: "interpret: aNode\x0a\x09self node: aNode.\x0a\x09self interpret",
  48307. referencedClasses: [],
  48308. //>>excludeEnd("ide");
  48309. messageSends: ["node:", "interpret"]
  48310. }),
  48311. $globals.ASTInterpreter);
  48312. $core.addMethod(
  48313. $core.method({
  48314. selector: "messageFromSendNode:arguments:",
  48315. protocol: 'private',
  48316. fn: function (aSendNode,aCollection){
  48317. var self=this;
  48318. function $Message(){return $globals.Message||(typeof Message=="undefined"?nil:Message)}
  48319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48320. return $core.withContext(function($ctx1) {
  48321. //>>excludeEnd("ctx");
  48322. var $2,$3,$1;
  48323. $2=$recv($Message())._new();
  48324. $recv($2)._selector_($recv(aSendNode)._selector());
  48325. $recv($2)._arguments_(aCollection);
  48326. $3=$recv($2)._yourself();
  48327. $1=$3;
  48328. return $1;
  48329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48330. }, function($ctx1) {$ctx1.fill(self,"messageFromSendNode:arguments:",{aSendNode:aSendNode,aCollection:aCollection},$globals.ASTInterpreter)});
  48331. //>>excludeEnd("ctx");
  48332. },
  48333. //>>excludeStart("ide", pragmas.excludeIdeData);
  48334. args: ["aSendNode", "aCollection"],
  48335. source: "messageFromSendNode: aSendNode arguments: aCollection\x0a\x09^ Message new\x0a\x09\x09selector: aSendNode selector;\x0a\x09\x09arguments: aCollection;\x0a\x09\x09yourself",
  48336. referencedClasses: ["Message"],
  48337. //>>excludeEnd("ide");
  48338. messageSends: ["selector:", "new", "selector", "arguments:", "yourself"]
  48339. }),
  48340. $globals.ASTInterpreter);
  48341. $core.addMethod(
  48342. $core.method({
  48343. selector: "messageNotUnderstood:receiver:",
  48344. protocol: 'private',
  48345. fn: function (aMessage,anObject){
  48346. var self=this;
  48347. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  48348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48349. return $core.withContext(function($ctx1) {
  48350. //>>excludeEnd("ctx");
  48351. var $1,$2;
  48352. $1=$recv($MessageNotUnderstood())._new();
  48353. $recv($1)._meesage_(aMessage);
  48354. $recv($1)._receiver_(anObject);
  48355. $2=$recv($1)._signal();
  48356. return self;
  48357. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48358. }, function($ctx1) {$ctx1.fill(self,"messageNotUnderstood:receiver:",{aMessage:aMessage,anObject:anObject},$globals.ASTInterpreter)});
  48359. //>>excludeEnd("ctx");
  48360. },
  48361. //>>excludeStart("ide", pragmas.excludeIdeData);
  48362. args: ["aMessage", "anObject"],
  48363. source: "messageNotUnderstood: aMessage receiver: anObject\x0a\x09MessageNotUnderstood new\x0a\x09\x09meesage: aMessage;\x0a\x09\x09receiver: anObject;\x0a\x09\x09signal",
  48364. referencedClasses: ["MessageNotUnderstood"],
  48365. //>>excludeEnd("ide");
  48366. messageSends: ["meesage:", "new", "receiver:", "signal"]
  48367. }),
  48368. $globals.ASTInterpreter);
  48369. $core.addMethod(
  48370. $core.method({
  48371. selector: "next",
  48372. protocol: 'interpreting',
  48373. fn: function (){
  48374. var self=this;
  48375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48376. return $core.withContext(function($ctx1) {
  48377. //>>excludeEnd("ctx");
  48378. self._node_($recv(self._node())._nextNode());
  48379. return self;
  48380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48381. }, function($ctx1) {$ctx1.fill(self,"next",{},$globals.ASTInterpreter)});
  48382. //>>excludeEnd("ctx");
  48383. },
  48384. //>>excludeStart("ide", pragmas.excludeIdeData);
  48385. args: [],
  48386. source: "next\x0a\x09self node: self node nextNode",
  48387. referencedClasses: [],
  48388. //>>excludeEnd("ide");
  48389. messageSends: ["node:", "nextNode", "node"]
  48390. }),
  48391. $globals.ASTInterpreter);
  48392. $core.addMethod(
  48393. $core.method({
  48394. selector: "node",
  48395. protocol: 'accessing',
  48396. fn: function (){
  48397. var self=this;
  48398. var $1;
  48399. $1=self["@node"];
  48400. return $1;
  48401. },
  48402. //>>excludeStart("ide", pragmas.excludeIdeData);
  48403. args: [],
  48404. source: "node\x0a\x09\x22Answer the next node, ie the node to be evaluated in the next step\x22\x0a\x09\x0a\x09^ node",
  48405. referencedClasses: [],
  48406. //>>excludeEnd("ide");
  48407. messageSends: []
  48408. }),
  48409. $globals.ASTInterpreter);
  48410. $core.addMethod(
  48411. $core.method({
  48412. selector: "node:",
  48413. protocol: 'accessing',
  48414. fn: function (aNode){
  48415. var self=this;
  48416. self["@node"]=aNode;
  48417. return self;
  48418. },
  48419. //>>excludeStart("ide", pragmas.excludeIdeData);
  48420. args: ["aNode"],
  48421. source: "node: aNode\x0a\x09node := aNode",
  48422. referencedClasses: [],
  48423. //>>excludeEnd("ide");
  48424. messageSends: []
  48425. }),
  48426. $globals.ASTInterpreter);
  48427. $core.addMethod(
  48428. $core.method({
  48429. selector: "peek",
  48430. protocol: 'stack',
  48431. fn: function (){
  48432. var self=this;
  48433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48434. return $core.withContext(function($ctx1) {
  48435. //>>excludeEnd("ctx");
  48436. var $1,$2;
  48437. var $early={};
  48438. try {
  48439. $1=self._stack();
  48440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48441. $ctx1.sendIdx["stack"]=1;
  48442. //>>excludeEnd("ctx");
  48443. $recv($1)._ifEmpty_((function(){
  48444. throw $early=[nil];
  48445. }));
  48446. $2=$recv(self._stack())._last();
  48447. return $2;
  48448. }
  48449. catch(e) {if(e===$early)return e[0]; throw e}
  48450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48451. }, function($ctx1) {$ctx1.fill(self,"peek",{},$globals.ASTInterpreter)});
  48452. //>>excludeEnd("ctx");
  48453. },
  48454. //>>excludeStart("ide", pragmas.excludeIdeData);
  48455. args: [],
  48456. source: "peek\x0a\x09\x22Peek the top object of the context stack\x22\x0a\x09\x0a\x09self stack ifEmpty: [ ^ nil ].\x0a\x09\x0a\x09^ self stack last",
  48457. referencedClasses: [],
  48458. //>>excludeEnd("ide");
  48459. messageSends: ["ifEmpty:", "stack", "last"]
  48460. }),
  48461. $globals.ASTInterpreter);
  48462. $core.addMethod(
  48463. $core.method({
  48464. selector: "pop",
  48465. protocol: 'stack',
  48466. fn: function (){
  48467. var self=this;
  48468. var peekedValue;
  48469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48470. return $core.withContext(function($ctx1) {
  48471. //>>excludeEnd("ctx");
  48472. var $1;
  48473. peekedValue=self._peek();
  48474. $recv(self._stack())._removeLast();
  48475. $1=peekedValue;
  48476. return $1;
  48477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48478. }, function($ctx1) {$ctx1.fill(self,"pop",{peekedValue:peekedValue},$globals.ASTInterpreter)});
  48479. //>>excludeEnd("ctx");
  48480. },
  48481. //>>excludeStart("ide", pragmas.excludeIdeData);
  48482. args: [],
  48483. source: "pop\x0a\x09\x22Pop an object from the context stack\x22\x0a\x09\x0a\x09| peekedValue |\x0a\x09\x0a\x09peekedValue := self peek.\x0a\x09self stack removeLast.\x0a\x09^ peekedValue",
  48484. referencedClasses: [],
  48485. //>>excludeEnd("ide");
  48486. messageSends: ["peek", "removeLast", "stack"]
  48487. }),
  48488. $globals.ASTInterpreter);
  48489. $core.addMethod(
  48490. $core.method({
  48491. selector: "proceed",
  48492. protocol: 'interpreting',
  48493. fn: function (){
  48494. var self=this;
  48495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48496. return $core.withContext(function($ctx1) {
  48497. //>>excludeEnd("ctx");
  48498. $recv((function(){
  48499. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48500. return $core.withContext(function($ctx2) {
  48501. //>>excludeEnd("ctx");
  48502. return self._atEnd();
  48503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48504. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  48505. //>>excludeEnd("ctx");
  48506. }))._whileFalse_((function(){
  48507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48508. return $core.withContext(function($ctx2) {
  48509. //>>excludeEnd("ctx");
  48510. return self._step();
  48511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48512. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  48513. //>>excludeEnd("ctx");
  48514. }));
  48515. return self;
  48516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48517. }, function($ctx1) {$ctx1.fill(self,"proceed",{},$globals.ASTInterpreter)});
  48518. //>>excludeEnd("ctx");
  48519. },
  48520. //>>excludeStart("ide", pragmas.excludeIdeData);
  48521. args: [],
  48522. source: "proceed\x0a\x09\x22Eagerly evaluate the ast\x22\x0a\x09\x0a\x09[ self atEnd ] \x0a\x09\x09whileFalse: [ self step ]",
  48523. referencedClasses: [],
  48524. //>>excludeEnd("ide");
  48525. messageSends: ["whileFalse:", "atEnd", "step"]
  48526. }),
  48527. $globals.ASTInterpreter);
  48528. $core.addMethod(
  48529. $core.method({
  48530. selector: "push:",
  48531. protocol: 'stack',
  48532. fn: function (anObject){
  48533. var self=this;
  48534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48535. return $core.withContext(function($ctx1) {
  48536. //>>excludeEnd("ctx");
  48537. var $1;
  48538. $1=$recv(self._stack())._add_(anObject);
  48539. return $1;
  48540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48541. }, function($ctx1) {$ctx1.fill(self,"push:",{anObject:anObject},$globals.ASTInterpreter)});
  48542. //>>excludeEnd("ctx");
  48543. },
  48544. //>>excludeStart("ide", pragmas.excludeIdeData);
  48545. args: ["anObject"],
  48546. source: "push: anObject\x0a\x09\x22Push an object to the context stack\x22\x0a\x09\x0a\x09^ self stack add: anObject",
  48547. referencedClasses: [],
  48548. //>>excludeEnd("ide");
  48549. messageSends: ["add:", "stack"]
  48550. }),
  48551. $globals.ASTInterpreter);
  48552. $core.addMethod(
  48553. $core.method({
  48554. selector: "restart",
  48555. protocol: 'interpreting',
  48556. fn: function (){
  48557. var self=this;
  48558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48559. return $core.withContext(function($ctx1) {
  48560. //>>excludeEnd("ctx");
  48561. self._node_($recv($recv(self._context())._ast())._nextChild());
  48562. return self;
  48563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48564. }, function($ctx1) {$ctx1.fill(self,"restart",{},$globals.ASTInterpreter)});
  48565. //>>excludeEnd("ctx");
  48566. },
  48567. //>>excludeStart("ide", pragmas.excludeIdeData);
  48568. args: [],
  48569. source: "restart\x0a\x09self node: self context ast nextChild",
  48570. referencedClasses: [],
  48571. //>>excludeEnd("ide");
  48572. messageSends: ["node:", "nextChild", "ast", "context"]
  48573. }),
  48574. $globals.ASTInterpreter);
  48575. $core.addMethod(
  48576. $core.method({
  48577. selector: "result",
  48578. protocol: 'accessing',
  48579. fn: function (){
  48580. var self=this;
  48581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48582. return $core.withContext(function($ctx1) {
  48583. //>>excludeEnd("ctx");
  48584. var $2,$1;
  48585. $2=self._hasReturned();
  48586. if($core.assert($2)){
  48587. $1=self._returnValue();
  48588. } else {
  48589. $1=$recv(self._context())._receiver();
  48590. };
  48591. return $1;
  48592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48593. }, function($ctx1) {$ctx1.fill(self,"result",{},$globals.ASTInterpreter)});
  48594. //>>excludeEnd("ctx");
  48595. },
  48596. //>>excludeStart("ide", pragmas.excludeIdeData);
  48597. args: [],
  48598. source: "result\x0a\x09^ self hasReturned \x0a\x09\x09ifTrue: [ self returnValue ] \x0a\x09\x09ifFalse: [ self context receiver ]",
  48599. referencedClasses: [],
  48600. //>>excludeEnd("ide");
  48601. messageSends: ["ifTrue:ifFalse:", "hasReturned", "returnValue", "receiver", "context"]
  48602. }),
  48603. $globals.ASTInterpreter);
  48604. $core.addMethod(
  48605. $core.method({
  48606. selector: "returnValue",
  48607. protocol: 'accessing',
  48608. fn: function (){
  48609. var self=this;
  48610. var $1;
  48611. $1=self["@returnValue"];
  48612. return $1;
  48613. },
  48614. //>>excludeStart("ide", pragmas.excludeIdeData);
  48615. args: [],
  48616. source: "returnValue\x0a\x09^ returnValue",
  48617. referencedClasses: [],
  48618. //>>excludeEnd("ide");
  48619. messageSends: []
  48620. }),
  48621. $globals.ASTInterpreter);
  48622. $core.addMethod(
  48623. $core.method({
  48624. selector: "returnValue:",
  48625. protocol: 'accessing',
  48626. fn: function (anObject){
  48627. var self=this;
  48628. self["@returnValue"]=anObject;
  48629. return self;
  48630. },
  48631. //>>excludeStart("ide", pragmas.excludeIdeData);
  48632. args: ["anObject"],
  48633. source: "returnValue: anObject\x0a\x09returnValue := anObject",
  48634. referencedClasses: [],
  48635. //>>excludeEnd("ide");
  48636. messageSends: []
  48637. }),
  48638. $globals.ASTInterpreter);
  48639. $core.addMethod(
  48640. $core.method({
  48641. selector: "sendMessage:to:superSend:",
  48642. protocol: 'private',
  48643. fn: function (aMessage,anObject,aBoolean){
  48644. var self=this;
  48645. var method;
  48646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48647. return $core.withContext(function($ctx1) {
  48648. //>>excludeEnd("ctx");
  48649. var $1,$3,$2,$4,$5,$6,$receiver;
  48650. var $early={};
  48651. try {
  48652. if(!$core.assert(aBoolean)){
  48653. $1=$recv(aMessage)._sendTo_(anObject);
  48654. return $1;
  48655. };
  48656. $3=$recv(anObject)._class();
  48657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48658. $ctx1.sendIdx["class"]=1;
  48659. //>>excludeEnd("ctx");
  48660. $2=$recv($3)._superclass();
  48661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48662. $ctx1.sendIdx["superclass"]=1;
  48663. //>>excludeEnd("ctx");
  48664. if(($receiver = $2) == null || $receiver.isNil){
  48665. $4=self._messageNotUnderstood_receiver_(aMessage,anObject);
  48666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48667. $ctx1.sendIdx["messageNotUnderstood:receiver:"]=1;
  48668. //>>excludeEnd("ctx");
  48669. return $4;
  48670. } else {
  48671. $2;
  48672. };
  48673. method=$recv($recv($recv($recv(anObject)._class())._superclass())._methodDictionary())._at_ifAbsent_($recv(aMessage)._selector(),(function(){
  48674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48675. return $core.withContext(function($ctx2) {
  48676. //>>excludeEnd("ctx");
  48677. $5=self._messageNotUnderstood_receiver_(aMessage,anObject);
  48678. throw $early=[$5];
  48679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48680. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  48681. //>>excludeEnd("ctx");
  48682. }));
  48683. $6=$recv(method)._sendTo_arguments_(anObject,$recv(aMessage)._arguments());
  48684. return $6;
  48685. }
  48686. catch(e) {if(e===$early)return e[0]; throw e}
  48687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48688. }, function($ctx1) {$ctx1.fill(self,"sendMessage:to:superSend:",{aMessage:aMessage,anObject:anObject,aBoolean:aBoolean,method:method},$globals.ASTInterpreter)});
  48689. //>>excludeEnd("ctx");
  48690. },
  48691. //>>excludeStart("ide", pragmas.excludeIdeData);
  48692. args: ["aMessage", "anObject", "aBoolean"],
  48693. source: "sendMessage: aMessage to: anObject superSend: aBoolean\x0a\x09| method |\x0a\x09\x0a\x09aBoolean ifFalse: [ ^ aMessage sendTo: anObject ].\x0a\x09anObject class superclass ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x0a\x09method := anObject class superclass methodDictionary\x0a\x09\x09at: aMessage selector\x0a\x09\x09ifAbsent: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x09\x0a\x09^ method sendTo: anObject arguments: aMessage arguments",
  48694. referencedClasses: [],
  48695. //>>excludeEnd("ide");
  48696. messageSends: ["ifFalse:", "sendTo:", "ifNil:", "superclass", "class", "messageNotUnderstood:receiver:", "at:ifAbsent:", "methodDictionary", "selector", "sendTo:arguments:", "arguments"]
  48697. }),
  48698. $globals.ASTInterpreter);
  48699. $core.addMethod(
  48700. $core.method({
  48701. selector: "setNonLocalReturnFromContext:",
  48702. protocol: 'interpreting',
  48703. fn: function (aContext){
  48704. var self=this;
  48705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48706. return $core.withContext(function($ctx1) {
  48707. //>>excludeEnd("ctx");
  48708. var $2,$1;
  48709. $2=$recv(aContext)._interpreter();
  48710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48711. $ctx1.sendIdx["interpreter"]=1;
  48712. //>>excludeEnd("ctx");
  48713. $1=$recv($2)._hasReturned();
  48714. if($core.assert($1)){
  48715. self["@returned"]=true;
  48716. self["@returned"];
  48717. self._returnValue_($recv($recv(aContext)._interpreter())._returnValue());
  48718. };
  48719. return self;
  48720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48721. }, function($ctx1) {$ctx1.fill(self,"setNonLocalReturnFromContext:",{aContext:aContext},$globals.ASTInterpreter)});
  48722. //>>excludeEnd("ctx");
  48723. },
  48724. //>>excludeStart("ide", pragmas.excludeIdeData);
  48725. args: ["aContext"],
  48726. source: "setNonLocalReturnFromContext: aContext\x0a\x09aContext interpreter hasReturned ifTrue: [\x0a\x09\x09returned := true.\x0a\x09\x09self returnValue: aContext interpreter returnValue ]",
  48727. referencedClasses: [],
  48728. //>>excludeEnd("ide");
  48729. messageSends: ["ifTrue:", "hasReturned", "interpreter", "returnValue:", "returnValue"]
  48730. }),
  48731. $globals.ASTInterpreter);
  48732. $core.addMethod(
  48733. $core.method({
  48734. selector: "skip",
  48735. protocol: 'interpreting',
  48736. fn: function (){
  48737. var self=this;
  48738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48739. return $core.withContext(function($ctx1) {
  48740. //>>excludeEnd("ctx");
  48741. self._next();
  48742. return self;
  48743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48744. }, function($ctx1) {$ctx1.fill(self,"skip",{},$globals.ASTInterpreter)});
  48745. //>>excludeEnd("ctx");
  48746. },
  48747. //>>excludeStart("ide", pragmas.excludeIdeData);
  48748. args: [],
  48749. source: "skip\x0a\x09self next",
  48750. referencedClasses: [],
  48751. //>>excludeEnd("ide");
  48752. messageSends: ["next"]
  48753. }),
  48754. $globals.ASTInterpreter);
  48755. $core.addMethod(
  48756. $core.method({
  48757. selector: "stack",
  48758. protocol: 'accessing',
  48759. fn: function (){
  48760. var self=this;
  48761. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  48762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48763. return $core.withContext(function($ctx1) {
  48764. //>>excludeEnd("ctx");
  48765. var $2,$1,$receiver;
  48766. $2=self["@stack"];
  48767. if(($receiver = $2) == null || $receiver.isNil){
  48768. self["@stack"]=$recv($OrderedCollection())._new();
  48769. $1=self["@stack"];
  48770. } else {
  48771. $1=$2;
  48772. };
  48773. return $1;
  48774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48775. }, function($ctx1) {$ctx1.fill(self,"stack",{},$globals.ASTInterpreter)});
  48776. //>>excludeEnd("ctx");
  48777. },
  48778. //>>excludeStart("ide", pragmas.excludeIdeData);
  48779. args: [],
  48780. source: "stack\x0a\x09^ stack ifNil: [ stack := OrderedCollection new ]",
  48781. referencedClasses: ["OrderedCollection"],
  48782. //>>excludeEnd("ide");
  48783. messageSends: ["ifNil:", "new"]
  48784. }),
  48785. $globals.ASTInterpreter);
  48786. $core.addMethod(
  48787. $core.method({
  48788. selector: "step",
  48789. protocol: 'interpreting',
  48790. fn: function (){
  48791. var self=this;
  48792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48793. return $core.withContext(function($ctx1) {
  48794. //>>excludeEnd("ctx");
  48795. var $1;
  48796. self._interpret();
  48797. $1=self._next();
  48798. return self;
  48799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48800. }, function($ctx1) {$ctx1.fill(self,"step",{},$globals.ASTInterpreter)});
  48801. //>>excludeEnd("ctx");
  48802. },
  48803. //>>excludeStart("ide", pragmas.excludeIdeData);
  48804. args: [],
  48805. source: "step\x0a\x09self \x0a\x09\x09interpret; \x0a\x09\x09next",
  48806. referencedClasses: [],
  48807. //>>excludeEnd("ide");
  48808. messageSends: ["interpret", "next"]
  48809. }),
  48810. $globals.ASTInterpreter);
  48811. $core.addMethod(
  48812. $core.method({
  48813. selector: "stepOver",
  48814. protocol: 'interpreting',
  48815. fn: function (){
  48816. var self=this;
  48817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48818. return $core.withContext(function($ctx1) {
  48819. //>>excludeEnd("ctx");
  48820. var $2,$1;
  48821. self._step();
  48822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48823. $ctx1.sendIdx["step"]=1;
  48824. //>>excludeEnd("ctx");
  48825. $recv((function(){
  48826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48827. return $core.withContext(function($ctx2) {
  48828. //>>excludeEnd("ctx");
  48829. $2=self._node();
  48830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48831. $ctx2.sendIdx["node"]=1;
  48832. //>>excludeEnd("ctx");
  48833. $1=$recv($2)._isNil();
  48834. return $recv($1)._or_((function(){
  48835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48836. return $core.withContext(function($ctx3) {
  48837. //>>excludeEnd("ctx");
  48838. return $recv(self._node())._isSteppingNode();
  48839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48840. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  48841. //>>excludeEnd("ctx");
  48842. }));
  48843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48844. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  48845. //>>excludeEnd("ctx");
  48846. }))._whileFalse_((function(){
  48847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48848. return $core.withContext(function($ctx2) {
  48849. //>>excludeEnd("ctx");
  48850. return self._step();
  48851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48852. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  48853. //>>excludeEnd("ctx");
  48854. }));
  48855. return self;
  48856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48857. }, function($ctx1) {$ctx1.fill(self,"stepOver",{},$globals.ASTInterpreter)});
  48858. //>>excludeEnd("ctx");
  48859. },
  48860. //>>excludeStart("ide", pragmas.excludeIdeData);
  48861. args: [],
  48862. source: "stepOver\x0a\x09self step.\x0a\x09\x0a\x09[ self node isNil or: [ self node isSteppingNode ] ] whileFalse: [ \x0a\x09\x09self step ]",
  48863. referencedClasses: [],
  48864. //>>excludeEnd("ide");
  48865. messageSends: ["step", "whileFalse:", "or:", "isNil", "node", "isSteppingNode"]
  48866. }),
  48867. $globals.ASTInterpreter);
  48868. $core.addMethod(
  48869. $core.method({
  48870. selector: "visit:",
  48871. protocol: 'visiting',
  48872. fn: function (aNode){
  48873. var self=this;
  48874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48875. return $core.withContext(function($ctx1) {
  48876. //>>excludeEnd("ctx");
  48877. var $1;
  48878. $1=self._hasReturned();
  48879. if(!$core.assert($1)){
  48880. (
  48881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48882. $ctx1.supercall = true,
  48883. //>>excludeEnd("ctx");
  48884. $globals.ASTInterpreter.superclass.fn.prototype._visit_.apply($recv(self), [aNode]));
  48885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48886. $ctx1.supercall = false;
  48887. //>>excludeEnd("ctx");;
  48888. };
  48889. return self;
  48890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48891. }, function($ctx1) {$ctx1.fill(self,"visit:",{aNode:aNode},$globals.ASTInterpreter)});
  48892. //>>excludeEnd("ctx");
  48893. },
  48894. //>>excludeStart("ide", pragmas.excludeIdeData);
  48895. args: ["aNode"],
  48896. source: "visit: aNode\x0a\x09self hasReturned ifFalse: [ super visit: aNode ]",
  48897. referencedClasses: [],
  48898. //>>excludeEnd("ide");
  48899. messageSends: ["ifFalse:", "hasReturned", "visit:"]
  48900. }),
  48901. $globals.ASTInterpreter);
  48902. $core.addMethod(
  48903. $core.method({
  48904. selector: "visitAssignmentNode:",
  48905. protocol: 'visiting',
  48906. fn: function (aNode){
  48907. var self=this;
  48908. var poppedValue;
  48909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48910. return $core.withContext(function($ctx1) {
  48911. //>>excludeEnd("ctx");
  48912. poppedValue=self._pop();
  48913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48914. $ctx1.sendIdx["pop"]=1;
  48915. //>>excludeEnd("ctx");
  48916. self._pop();
  48917. self._push_(poppedValue);
  48918. self._assign_to_($recv(aNode)._left(),poppedValue);
  48919. return self;
  48920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48921. }, function($ctx1) {$ctx1.fill(self,"visitAssignmentNode:",{aNode:aNode,poppedValue:poppedValue},$globals.ASTInterpreter)});
  48922. //>>excludeEnd("ctx");
  48923. },
  48924. //>>excludeStart("ide", pragmas.excludeIdeData);
  48925. args: ["aNode"],
  48926. source: "visitAssignmentNode: aNode\x0a\x09| poppedValue |\x0a\x09\x0a\x09poppedValue := self pop.\x0a\x09\x0a\x09\x22Pop the left side of the assignment.\x0a\x09It already has been visited, and we don't need its value.\x22\x0a\x09self pop.\x0a\x09\x0a\x09self push: poppedValue.\x0a\x09self assign: aNode left to: poppedValue",
  48927. referencedClasses: [],
  48928. //>>excludeEnd("ide");
  48929. messageSends: ["pop", "push:", "assign:to:", "left"]
  48930. }),
  48931. $globals.ASTInterpreter);
  48932. $core.addMethod(
  48933. $core.method({
  48934. selector: "visitBlockNode:",
  48935. protocol: 'visiting',
  48936. fn: function (aNode){
  48937. var self=this;
  48938. var block;
  48939. function $AIBlockClosure(){return $globals.AIBlockClosure||(typeof AIBlockClosure=="undefined"?nil:AIBlockClosure)}
  48940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48941. return $core.withContext(function($ctx1) {
  48942. //>>excludeEnd("ctx");
  48943. block=$recv($AIBlockClosure())._forContext_node_(self._context(),aNode);
  48944. self._push_(block);
  48945. return self;
  48946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48947. }, function($ctx1) {$ctx1.fill(self,"visitBlockNode:",{aNode:aNode,block:block},$globals.ASTInterpreter)});
  48948. //>>excludeEnd("ctx");
  48949. },
  48950. //>>excludeStart("ide", pragmas.excludeIdeData);
  48951. args: ["aNode"],
  48952. source: "visitBlockNode: aNode\x0a\x09\x22Do not evaluate the block node.\x0a\x09Instead, put all instructions into a block that we push to the stack for later evaluation\x22\x0a\x09\x0a\x09| block |\x0a\x09\x0a\x09block := AIBlockClosure forContext: self context node: aNode.\x0a\x09\x0a\x09self push: block",
  48953. referencedClasses: ["AIBlockClosure"],
  48954. //>>excludeEnd("ide");
  48955. messageSends: ["forContext:node:", "context", "push:"]
  48956. }),
  48957. $globals.ASTInterpreter);
  48958. $core.addMethod(
  48959. $core.method({
  48960. selector: "visitBlockSequenceNode:",
  48961. protocol: 'visiting',
  48962. fn: function (aNode){
  48963. var self=this;
  48964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48965. return $core.withContext(function($ctx1) {
  48966. //>>excludeEnd("ctx");
  48967. (
  48968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48969. $ctx1.supercall = true,
  48970. //>>excludeEnd("ctx");
  48971. $globals.ASTInterpreter.superclass.fn.prototype._visitBlockSequenceNode_.apply($recv(self), [aNode]));
  48972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48973. $ctx1.supercall = false;
  48974. //>>excludeEnd("ctx");;
  48975. self["@forceAtEnd"]=true;
  48976. return self;
  48977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48978. }, function($ctx1) {$ctx1.fill(self,"visitBlockSequenceNode:",{aNode:aNode},$globals.ASTInterpreter)});
  48979. //>>excludeEnd("ctx");
  48980. },
  48981. //>>excludeStart("ide", pragmas.excludeIdeData);
  48982. args: ["aNode"],
  48983. source: "visitBlockSequenceNode: aNode\x0a\x09\x22If the receiver is actually visiting a BlockSequenceNode,\x0a\x09it means the the context is a block context. Evaluation should \x0a\x09stop right after evaluating the block sequence and the outer\x0a\x09context's interpreter should take over. \x0a\x09Therefore we force #atEnd.\x22\x0a\x09\x0a\x09super visitBlockSequenceNode: aNode.\x0a\x09forceAtEnd := true",
  48984. referencedClasses: [],
  48985. //>>excludeEnd("ide");
  48986. messageSends: ["visitBlockSequenceNode:"]
  48987. }),
  48988. $globals.ASTInterpreter);
  48989. $core.addMethod(
  48990. $core.method({
  48991. selector: "visitDynamicArrayNode:",
  48992. protocol: 'visiting',
  48993. fn: function (aNode){
  48994. var self=this;
  48995. var array;
  48996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48997. return $core.withContext(function($ctx1) {
  48998. //>>excludeEnd("ctx");
  48999. array=[];
  49000. $recv($recv(aNode)._nodes())._do_((function(each){
  49001. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49002. return $core.withContext(function($ctx2) {
  49003. //>>excludeEnd("ctx");
  49004. return $recv(array)._addFirst_(self._pop());
  49005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49006. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49007. //>>excludeEnd("ctx");
  49008. }));
  49009. self._push_(array);
  49010. return self;
  49011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49012. }, function($ctx1) {$ctx1.fill(self,"visitDynamicArrayNode:",{aNode:aNode,array:array},$globals.ASTInterpreter)});
  49013. //>>excludeEnd("ctx");
  49014. },
  49015. //>>excludeStart("ide", pragmas.excludeIdeData);
  49016. args: ["aNode"],
  49017. source: "visitDynamicArrayNode: aNode\x0a\x09| array |\x0a\x09\x0a\x09array := #().\x0a\x09aNode nodes do: [ :each |\x0a\x09\x09array addFirst: self pop ].\x0a\x09\x0a\x09self push: array",
  49018. referencedClasses: [],
  49019. //>>excludeEnd("ide");
  49020. messageSends: ["do:", "nodes", "addFirst:", "pop", "push:"]
  49021. }),
  49022. $globals.ASTInterpreter);
  49023. $core.addMethod(
  49024. $core.method({
  49025. selector: "visitDynamicDictionaryNode:",
  49026. protocol: 'visiting',
  49027. fn: function (aNode){
  49028. var self=this;
  49029. var keyValueList;
  49030. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  49031. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  49032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49033. return $core.withContext(function($ctx1) {
  49034. //>>excludeEnd("ctx");
  49035. keyValueList=$recv($OrderedCollection())._new();
  49036. $recv($recv(aNode)._nodes())._do_((function(each){
  49037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49038. return $core.withContext(function($ctx2) {
  49039. //>>excludeEnd("ctx");
  49040. return $recv(keyValueList)._add_(self._pop());
  49041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49042. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49043. //>>excludeEnd("ctx");
  49044. }));
  49045. self._push_($recv($HashedCollection())._newFromPairs_($recv(keyValueList)._reversed()));
  49046. return self;
  49047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49048. }, function($ctx1) {$ctx1.fill(self,"visitDynamicDictionaryNode:",{aNode:aNode,keyValueList:keyValueList},$globals.ASTInterpreter)});
  49049. //>>excludeEnd("ctx");
  49050. },
  49051. //>>excludeStart("ide", pragmas.excludeIdeData);
  49052. args: ["aNode"],
  49053. source: "visitDynamicDictionaryNode: aNode\x0a\x09| keyValueList |\x0a\x09\x0a\x09keyValueList := OrderedCollection new.\x0a\x09\x0a\x09aNode nodes do: [ :each | \x0a\x09\x09keyValueList add: self pop ].\x0a\x09\x0a\x09self push: (HashedCollection newFromPairs: keyValueList reversed)",
  49054. referencedClasses: ["OrderedCollection", "HashedCollection"],
  49055. //>>excludeEnd("ide");
  49056. messageSends: ["new", "do:", "nodes", "add:", "pop", "push:", "newFromPairs:", "reversed"]
  49057. }),
  49058. $globals.ASTInterpreter);
  49059. $core.addMethod(
  49060. $core.method({
  49061. selector: "visitJSStatementNode:",
  49062. protocol: 'visiting',
  49063. fn: function (aNode){
  49064. var self=this;
  49065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49066. return $core.withContext(function($ctx1) {
  49067. //>>excludeEnd("ctx");
  49068. self["@returned"]=true;
  49069. self._returnValue_(self._eval_($recv(aNode)._source()));
  49070. return self;
  49071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49072. }, function($ctx1) {$ctx1.fill(self,"visitJSStatementNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49073. //>>excludeEnd("ctx");
  49074. },
  49075. //>>excludeStart("ide", pragmas.excludeIdeData);
  49076. args: ["aNode"],
  49077. source: "visitJSStatementNode: aNode\x0a\x09returned := true.\x0a\x09self returnValue: (self eval: aNode source)",
  49078. referencedClasses: [],
  49079. //>>excludeEnd("ide");
  49080. messageSends: ["returnValue:", "eval:", "source"]
  49081. }),
  49082. $globals.ASTInterpreter);
  49083. $core.addMethod(
  49084. $core.method({
  49085. selector: "visitNode:",
  49086. protocol: 'visiting',
  49087. fn: function (aNode){
  49088. var self=this;
  49089. return self;
  49090. },
  49091. //>>excludeStart("ide", pragmas.excludeIdeData);
  49092. args: ["aNode"],
  49093. source: "visitNode: aNode\x0a\x09\x22Do nothing by default. Especially, do not visit children recursively.\x22",
  49094. referencedClasses: [],
  49095. //>>excludeEnd("ide");
  49096. messageSends: []
  49097. }),
  49098. $globals.ASTInterpreter);
  49099. $core.addMethod(
  49100. $core.method({
  49101. selector: "visitReturnNode:",
  49102. protocol: 'visiting',
  49103. fn: function (aNode){
  49104. var self=this;
  49105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49106. return $core.withContext(function($ctx1) {
  49107. //>>excludeEnd("ctx");
  49108. self["@returned"]=true;
  49109. self._returnValue_(self._pop());
  49110. return self;
  49111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49112. }, function($ctx1) {$ctx1.fill(self,"visitReturnNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49113. //>>excludeEnd("ctx");
  49114. },
  49115. //>>excludeStart("ide", pragmas.excludeIdeData);
  49116. args: ["aNode"],
  49117. source: "visitReturnNode: aNode\x0a\x09returned := true.\x0a\x09self returnValue: self pop",
  49118. referencedClasses: [],
  49119. //>>excludeEnd("ide");
  49120. messageSends: ["returnValue:", "pop"]
  49121. }),
  49122. $globals.ASTInterpreter);
  49123. $core.addMethod(
  49124. $core.method({
  49125. selector: "visitSendNode:",
  49126. protocol: 'visiting',
  49127. fn: function (aNode){
  49128. var self=this;
  49129. var receiver,args,message,result;
  49130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49131. return $core.withContext(function($ctx1) {
  49132. //>>excludeEnd("ctx");
  49133. var $1;
  49134. args=$recv($recv(aNode)._arguments())._collect_((function(each){
  49135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49136. return $core.withContext(function($ctx2) {
  49137. //>>excludeEnd("ctx");
  49138. return self._pop();
  49139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49140. $ctx2.sendIdx["pop"]=1;
  49141. //>>excludeEnd("ctx");
  49142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49143. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49144. //>>excludeEnd("ctx");
  49145. }));
  49146. receiver=self._pop();
  49147. message=self._messageFromSendNode_arguments_(aNode,$recv(args)._reversed());
  49148. result=self._sendMessage_to_superSend_(message,receiver,$recv(aNode)._superSend());
  49149. $1=$recv($recv(aNode)._isCascadeSendNode())._and_((function(){
  49150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49151. return $core.withContext(function($ctx2) {
  49152. //>>excludeEnd("ctx");
  49153. return $recv($recv(aNode)._isLastChild())._not();
  49154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49155. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  49156. //>>excludeEnd("ctx");
  49157. }));
  49158. if($core.assert($1)){
  49159. self._push_(receiver);
  49160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49161. $ctx1.sendIdx["push:"]=1;
  49162. //>>excludeEnd("ctx");
  49163. } else {
  49164. self._push_(result);
  49165. };
  49166. return self;
  49167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49168. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,receiver:receiver,args:args,message:message,result:result},$globals.ASTInterpreter)});
  49169. //>>excludeEnd("ctx");
  49170. },
  49171. //>>excludeStart("ide", pragmas.excludeIdeData);
  49172. args: ["aNode"],
  49173. source: "visitSendNode: aNode\x0a\x09| receiver args message result |\x0a\x09\x0a\x09args := aNode arguments collect: [ :each | self pop ].\x0a\x09receiver := self pop.\x0a\x09\x0a\x09message := self\x0a\x09\x09messageFromSendNode: aNode\x0a\x09\x09arguments: args reversed.\x0a\x09\x0a\x09result := self sendMessage: message to: receiver superSend: aNode superSend.\x0a\x09\x0a\x09\x22For cascade sends, push the reciever if the send is not the last one\x22\x0a\x09(aNode isCascadeSendNode and: [ aNode isLastChild not ])\x0a\x09\x09ifTrue: [ self push: receiver ]\x0a\x09\x09ifFalse: [ self push: result ]",
  49174. referencedClasses: [],
  49175. //>>excludeEnd("ide");
  49176. messageSends: ["collect:", "arguments", "pop", "messageFromSendNode:arguments:", "reversed", "sendMessage:to:superSend:", "superSend", "ifTrue:ifFalse:", "and:", "isCascadeSendNode", "not", "isLastChild", "push:"]
  49177. }),
  49178. $globals.ASTInterpreter);
  49179. $core.addMethod(
  49180. $core.method({
  49181. selector: "visitSequenceNode:",
  49182. protocol: 'visiting',
  49183. fn: function (aNode){
  49184. var self=this;
  49185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49186. return $core.withContext(function($ctx1) {
  49187. //>>excludeEnd("ctx");
  49188. $recv($recv(aNode)._temps())._do_((function(each){
  49189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49190. return $core.withContext(function($ctx2) {
  49191. //>>excludeEnd("ctx");
  49192. return $recv(self._context())._defineLocal_(each);
  49193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49194. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  49195. //>>excludeEnd("ctx");
  49196. }));
  49197. return self;
  49198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49199. }, function($ctx1) {$ctx1.fill(self,"visitSequenceNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49200. //>>excludeEnd("ctx");
  49201. },
  49202. //>>excludeStart("ide", pragmas.excludeIdeData);
  49203. args: ["aNode"],
  49204. source: "visitSequenceNode: aNode\x0a\x09aNode temps do: [ :each |\x0a\x09\x09self context defineLocal: each ]",
  49205. referencedClasses: [],
  49206. //>>excludeEnd("ide");
  49207. messageSends: ["do:", "temps", "defineLocal:", "context"]
  49208. }),
  49209. $globals.ASTInterpreter);
  49210. $core.addMethod(
  49211. $core.method({
  49212. selector: "visitValueNode:",
  49213. protocol: 'visiting',
  49214. fn: function (aNode){
  49215. var self=this;
  49216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49217. return $core.withContext(function($ctx1) {
  49218. //>>excludeEnd("ctx");
  49219. self._push_($recv(aNode)._value());
  49220. return self;
  49221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49222. }, function($ctx1) {$ctx1.fill(self,"visitValueNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49223. //>>excludeEnd("ctx");
  49224. },
  49225. //>>excludeStart("ide", pragmas.excludeIdeData);
  49226. args: ["aNode"],
  49227. source: "visitValueNode: aNode\x0a\x09self push: aNode value",
  49228. referencedClasses: [],
  49229. //>>excludeEnd("ide");
  49230. messageSends: ["push:", "value"]
  49231. }),
  49232. $globals.ASTInterpreter);
  49233. $core.addMethod(
  49234. $core.method({
  49235. selector: "visitVariableNode:",
  49236. protocol: 'visiting',
  49237. fn: function (aNode){
  49238. var self=this;
  49239. function $PlatformInterface(){return $globals.PlatformInterface||(typeof PlatformInterface=="undefined"?nil:PlatformInterface)}
  49240. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  49241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49242. return $core.withContext(function($ctx1) {
  49243. //>>excludeEnd("ctx");
  49244. var $2,$1,$5,$6,$4,$3,$8,$10,$9,$11,$12,$13,$15,$14,$16,$17,$7;
  49245. $2=$recv(aNode)._binding();
  49246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49247. $ctx1.sendIdx["binding"]=1;
  49248. //>>excludeEnd("ctx");
  49249. $1=$recv($2)._isUnknownVar();
  49250. if($core.assert($1)){
  49251. $5=$recv($PlatformInterface())._globals();
  49252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49253. $ctx1.sendIdx["globals"]=1;
  49254. //>>excludeEnd("ctx");
  49255. $6=$recv(aNode)._value();
  49256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49257. $ctx1.sendIdx["value"]=1;
  49258. //>>excludeEnd("ctx");
  49259. $4=$recv($5)._at_ifAbsent_($6,(function(){
  49260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49261. return $core.withContext(function($ctx2) {
  49262. //>>excludeEnd("ctx");
  49263. return self._error_("Unknown variable");
  49264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49265. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  49266. //>>excludeEnd("ctx");
  49267. }));
  49268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49269. $ctx1.sendIdx["at:ifAbsent:"]=1;
  49270. //>>excludeEnd("ctx");
  49271. $3=self._push_($4);
  49272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49273. $ctx1.sendIdx["push:"]=1;
  49274. //>>excludeEnd("ctx");
  49275. return $3;
  49276. };
  49277. $8=$recv($recv(aNode)._binding())._isInstanceVar();
  49278. if($core.assert($8)){
  49279. $10=self._context();
  49280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49281. $ctx1.sendIdx["context"]=1;
  49282. //>>excludeEnd("ctx");
  49283. $9=$recv($10)._receiver();
  49284. $11=$recv(aNode)._value();
  49285. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49286. $ctx1.sendIdx["value"]=2;
  49287. //>>excludeEnd("ctx");
  49288. $7=$recv($9)._instVarAt_($11);
  49289. } else {
  49290. $12=self._context();
  49291. $13=$recv(aNode)._value();
  49292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49293. $ctx1.sendIdx["value"]=3;
  49294. //>>excludeEnd("ctx");
  49295. $7=$recv($12)._localAt_ifAbsent_($13,(function(){
  49296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49297. return $core.withContext(function($ctx2) {
  49298. //>>excludeEnd("ctx");
  49299. $15=$recv(aNode)._value();
  49300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49301. $ctx2.sendIdx["value"]=4;
  49302. //>>excludeEnd("ctx");
  49303. $14=$recv($15)._isCapitalized();
  49304. if($core.assert($14)){
  49305. $16=$recv($Smalltalk())._globals();
  49306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49307. $ctx2.sendIdx["globals"]=2;
  49308. //>>excludeEnd("ctx");
  49309. $17=$recv(aNode)._value();
  49310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49311. $ctx2.sendIdx["value"]=5;
  49312. //>>excludeEnd("ctx");
  49313. return $recv($16)._at_ifAbsent_($17,(function(){
  49314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49315. return $core.withContext(function($ctx3) {
  49316. //>>excludeEnd("ctx");
  49317. return $recv($recv($PlatformInterface())._globals())._at_($recv(aNode)._value());
  49318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49319. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,7)});
  49320. //>>excludeEnd("ctx");
  49321. }));
  49322. };
  49323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49324. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  49325. //>>excludeEnd("ctx");
  49326. }));
  49327. };
  49328. self._push_($7);
  49329. return self;
  49330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49331. }, function($ctx1) {$ctx1.fill(self,"visitVariableNode:",{aNode:aNode},$globals.ASTInterpreter)});
  49332. //>>excludeEnd("ctx");
  49333. },
  49334. //>>excludeStart("ide", pragmas.excludeIdeData);
  49335. args: ["aNode"],
  49336. source: "visitVariableNode: aNode\x0a\x09aNode binding isUnknownVar ifTrue: [\x0a\x09\x09^ self push: (PlatformInterface globals at: aNode value ifAbsent: [ self error: 'Unknown variable' ]) ].\x0a\x09\x09\x0a\x09self push: (aNode binding isInstanceVar\x0a\x09\x09ifTrue: [ self context receiver instVarAt: aNode value ]\x0a\x09\x09ifFalse: [ self context \x0a\x09\x09\x09localAt: aNode value\x0a\x09\x09\x09ifAbsent: [\x0a\x09\x09\x09\x09aNode value isCapitalized\x0a\x09\x09\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09\x09\x09Smalltalk globals \x0a\x09\x09\x09\x09\x09\x09\x09at: aNode value \x0a\x09\x09\x09\x09\x09\x09\x09ifAbsent: [ PlatformInterface globals at: aNode value ] ] ] ])",
  49337. referencedClasses: ["PlatformInterface", "Smalltalk"],
  49338. //>>excludeEnd("ide");
  49339. messageSends: ["ifTrue:", "isUnknownVar", "binding", "push:", "at:ifAbsent:", "globals", "value", "error:", "ifTrue:ifFalse:", "isInstanceVar", "instVarAt:", "receiver", "context", "localAt:ifAbsent:", "isCapitalized", "at:"]
  49340. }),
  49341. $globals.ASTInterpreter);
  49342. $core.addClass('ASTInterpreterError', $globals.Error, [], 'Compiler-Interpreter');
  49343. //>>excludeStart("ide", pragmas.excludeIdeData);
  49344. $globals.ASTInterpreterError.comment="I get signaled when an AST interpreter is unable to interpret a node.";
  49345. //>>excludeEnd("ide");
  49346. $core.addClass('ASTPCNodeVisitor', $globals.NodeVisitor, ['context', 'index', 'selector', 'currentNode'], 'Compiler-Interpreter');
  49347. //>>excludeStart("ide", pragmas.excludeIdeData);
  49348. $globals.ASTPCNodeVisitor.comment="I visit an AST until I get to the current node for the `context` and answer it.\x0a\x0a## API\x0a\x0aMy instances must be filled with a context object using `#context:`.\x0a\x0aAfter visiting the AST the current node is answered by `#currentNode`";
  49349. //>>excludeEnd("ide");
  49350. $core.addMethod(
  49351. $core.method({
  49352. selector: "context",
  49353. protocol: 'accessing',
  49354. fn: function (){
  49355. var self=this;
  49356. var $1;
  49357. $1=self["@context"];
  49358. return $1;
  49359. },
  49360. //>>excludeStart("ide", pragmas.excludeIdeData);
  49361. args: [],
  49362. source: "context\x0a\x09^ context",
  49363. referencedClasses: [],
  49364. //>>excludeEnd("ide");
  49365. messageSends: []
  49366. }),
  49367. $globals.ASTPCNodeVisitor);
  49368. $core.addMethod(
  49369. $core.method({
  49370. selector: "context:",
  49371. protocol: 'accessing',
  49372. fn: function (aContext){
  49373. var self=this;
  49374. self["@context"]=aContext;
  49375. return self;
  49376. },
  49377. //>>excludeStart("ide", pragmas.excludeIdeData);
  49378. args: ["aContext"],
  49379. source: "context: aContext\x0a\x09context := aContext",
  49380. referencedClasses: [],
  49381. //>>excludeEnd("ide");
  49382. messageSends: []
  49383. }),
  49384. $globals.ASTPCNodeVisitor);
  49385. $core.addMethod(
  49386. $core.method({
  49387. selector: "currentNode",
  49388. protocol: 'accessing',
  49389. fn: function (){
  49390. var self=this;
  49391. var $1;
  49392. $1=self["@currentNode"];
  49393. return $1;
  49394. },
  49395. //>>excludeStart("ide", pragmas.excludeIdeData);
  49396. args: [],
  49397. source: "currentNode\x0a\x09^ currentNode",
  49398. referencedClasses: [],
  49399. //>>excludeEnd("ide");
  49400. messageSends: []
  49401. }),
  49402. $globals.ASTPCNodeVisitor);
  49403. $core.addMethod(
  49404. $core.method({
  49405. selector: "increaseIndex",
  49406. protocol: 'accessing',
  49407. fn: function (){
  49408. var self=this;
  49409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49410. return $core.withContext(function($ctx1) {
  49411. //>>excludeEnd("ctx");
  49412. self["@index"]=$recv(self._index()).__plus((1));
  49413. return self;
  49414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49415. }, function($ctx1) {$ctx1.fill(self,"increaseIndex",{},$globals.ASTPCNodeVisitor)});
  49416. //>>excludeEnd("ctx");
  49417. },
  49418. //>>excludeStart("ide", pragmas.excludeIdeData);
  49419. args: [],
  49420. source: "increaseIndex\x0a\x09index := self index + 1",
  49421. referencedClasses: [],
  49422. //>>excludeEnd("ide");
  49423. messageSends: ["+", "index"]
  49424. }),
  49425. $globals.ASTPCNodeVisitor);
  49426. $core.addMethod(
  49427. $core.method({
  49428. selector: "index",
  49429. protocol: 'accessing',
  49430. fn: function (){
  49431. var self=this;
  49432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49433. return $core.withContext(function($ctx1) {
  49434. //>>excludeEnd("ctx");
  49435. var $2,$1,$receiver;
  49436. $2=self["@index"];
  49437. if(($receiver = $2) == null || $receiver.isNil){
  49438. self["@index"]=(0);
  49439. $1=self["@index"];
  49440. } else {
  49441. $1=$2;
  49442. };
  49443. return $1;
  49444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49445. }, function($ctx1) {$ctx1.fill(self,"index",{},$globals.ASTPCNodeVisitor)});
  49446. //>>excludeEnd("ctx");
  49447. },
  49448. //>>excludeStart("ide", pragmas.excludeIdeData);
  49449. args: [],
  49450. source: "index\x0a\x09^ index ifNil: [ index := 0 ]",
  49451. referencedClasses: [],
  49452. //>>excludeEnd("ide");
  49453. messageSends: ["ifNil:"]
  49454. }),
  49455. $globals.ASTPCNodeVisitor);
  49456. $core.addMethod(
  49457. $core.method({
  49458. selector: "selector",
  49459. protocol: 'accessing',
  49460. fn: function (){
  49461. var self=this;
  49462. var $1;
  49463. $1=self["@selector"];
  49464. return $1;
  49465. },
  49466. //>>excludeStart("ide", pragmas.excludeIdeData);
  49467. args: [],
  49468. source: "selector\x0a\x09^ selector",
  49469. referencedClasses: [],
  49470. //>>excludeEnd("ide");
  49471. messageSends: []
  49472. }),
  49473. $globals.ASTPCNodeVisitor);
  49474. $core.addMethod(
  49475. $core.method({
  49476. selector: "selector:",
  49477. protocol: 'accessing',
  49478. fn: function (aString){
  49479. var self=this;
  49480. self["@selector"]=aString;
  49481. return self;
  49482. },
  49483. //>>excludeStart("ide", pragmas.excludeIdeData);
  49484. args: ["aString"],
  49485. source: "selector: aString\x0a\x09selector := aString",
  49486. referencedClasses: [],
  49487. //>>excludeEnd("ide");
  49488. messageSends: []
  49489. }),
  49490. $globals.ASTPCNodeVisitor);
  49491. $core.addMethod(
  49492. $core.method({
  49493. selector: "visitJSStatementNode:",
  49494. protocol: 'visiting',
  49495. fn: function (aNode){
  49496. var self=this;
  49497. self["@currentNode"]=aNode;
  49498. return self;
  49499. },
  49500. //>>excludeStart("ide", pragmas.excludeIdeData);
  49501. args: ["aNode"],
  49502. source: "visitJSStatementNode: aNode\x0a\x09\x22If a JSStatementNode is encountered, it always is the current node.\x0a\x09Stop visiting the AST there\x22\x0a\x09\x0a\x09currentNode := aNode",
  49503. referencedClasses: [],
  49504. //>>excludeEnd("ide");
  49505. messageSends: []
  49506. }),
  49507. $globals.ASTPCNodeVisitor);
  49508. $core.addMethod(
  49509. $core.method({
  49510. selector: "visitSendNode:",
  49511. protocol: 'visiting',
  49512. fn: function (aNode){
  49513. var self=this;
  49514. var sendIndex;
  49515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49516. return $core.withContext(function($ctx1) {
  49517. //>>excludeEnd("ctx");
  49518. var $1,$2,$4,$3,$5;
  49519. $1=self._context();
  49520. $2=self._selector();
  49521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49522. $ctx1.sendIdx["selector"]=1;
  49523. //>>excludeEnd("ctx");
  49524. sendIndex=$recv($1)._sendIndexAt_($2);
  49525. (
  49526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49527. $ctx1.supercall = true,
  49528. //>>excludeEnd("ctx");
  49529. $globals.ASTPCNodeVisitor.superclass.fn.prototype._visitSendNode_.apply($recv(self), [aNode]));
  49530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49531. $ctx1.supercall = false;
  49532. //>>excludeEnd("ctx");;
  49533. $4=self._selector();
  49534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49535. $ctx1.sendIdx["selector"]=2;
  49536. //>>excludeEnd("ctx");
  49537. $3=$recv($4).__eq($recv(aNode)._selector());
  49538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49539. $ctx1.sendIdx["="]=1;
  49540. //>>excludeEnd("ctx");
  49541. if($core.assert($3)){
  49542. $5=$recv(self._index()).__eq(sendIndex);
  49543. if($core.assert($5)){
  49544. self["@currentNode"]=aNode;
  49545. self["@currentNode"];
  49546. };
  49547. self._increaseIndex();
  49548. };
  49549. return self;
  49550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  49551. }, function($ctx1) {$ctx1.fill(self,"visitSendNode:",{aNode:aNode,sendIndex:sendIndex},$globals.ASTPCNodeVisitor)});
  49552. //>>excludeEnd("ctx");
  49553. },
  49554. //>>excludeStart("ide", pragmas.excludeIdeData);
  49555. args: ["aNode"],
  49556. source: "visitSendNode: aNode\x0a\x09| sendIndex |\x0a\x09sendIndex := self context sendIndexAt: self selector.\x0a\x09\x0a\x09super visitSendNode: aNode.\x0a\x09\x0a\x09self selector = aNode selector ifTrue: [\x0a\x09\x09self index = sendIndex ifTrue: [ currentNode := aNode ].\x0a\x09\x09self increaseIndex ]",
  49557. referencedClasses: [],
  49558. //>>excludeEnd("ide");
  49559. messageSends: ["sendIndexAt:", "context", "selector", "visitSendNode:", "ifTrue:", "=", "index", "increaseIndex"]
  49560. }),
  49561. $globals.ASTPCNodeVisitor);
  49562. $core.addMethod(
  49563. $core.method({
  49564. selector: "isSteppingNode",
  49565. protocol: '*Compiler-Interpreter',
  49566. fn: function (){
  49567. var self=this;
  49568. return true;
  49569. },
  49570. //>>excludeStart("ide", pragmas.excludeIdeData);
  49571. args: [],
  49572. source: "isSteppingNode\x0a\x09^ true",
  49573. referencedClasses: [],
  49574. //>>excludeEnd("ide");
  49575. messageSends: []
  49576. }),
  49577. $globals.AssignmentNode);
  49578. $core.addMethod(
  49579. $core.method({
  49580. selector: "isSteppingNode",
  49581. protocol: '*Compiler-Interpreter',
  49582. fn: function (){
  49583. var self=this;
  49584. return true;
  49585. },
  49586. //>>excludeStart("ide", pragmas.excludeIdeData);
  49587. args: [],
  49588. source: "isSteppingNode\x0a\x09^ true",
  49589. referencedClasses: [],
  49590. //>>excludeEnd("ide");
  49591. messageSends: []
  49592. }),
  49593. $globals.BlockNode);
  49594. $core.addMethod(
  49595. $core.method({
  49596. selector: "isSteppingNode",
  49597. protocol: '*Compiler-Interpreter',
  49598. fn: function (){
  49599. var self=this;
  49600. return true;
  49601. },
  49602. //>>excludeStart("ide", pragmas.excludeIdeData);
  49603. args: [],
  49604. source: "isSteppingNode\x0a\x09^ true",
  49605. referencedClasses: [],
  49606. //>>excludeEnd("ide");
  49607. messageSends: []
  49608. }),
  49609. $globals.DynamicArrayNode);
  49610. $core.addMethod(
  49611. $core.method({
  49612. selector: "isSteppingNode",
  49613. protocol: '*Compiler-Interpreter',
  49614. fn: function (){
  49615. var self=this;
  49616. return true;
  49617. },
  49618. //>>excludeStart("ide", pragmas.excludeIdeData);
  49619. args: [],
  49620. source: "isSteppingNode\x0a\x09^ true",
  49621. referencedClasses: [],
  49622. //>>excludeEnd("ide");
  49623. messageSends: []
  49624. }),
  49625. $globals.DynamicDictionaryNode);
  49626. $core.addMethod(
  49627. $core.method({
  49628. selector: "isSteppingNode",
  49629. protocol: '*Compiler-Interpreter',
  49630. fn: function (){
  49631. var self=this;
  49632. return true;
  49633. },
  49634. //>>excludeStart("ide", pragmas.excludeIdeData);
  49635. args: [],
  49636. source: "isSteppingNode\x0a\x09^ true",
  49637. referencedClasses: [],
  49638. //>>excludeEnd("ide");
  49639. messageSends: []
  49640. }),
  49641. $globals.JSStatementNode);
  49642. $core.addMethod(
  49643. $core.method({
  49644. selector: "isSteppingNode",
  49645. protocol: '*Compiler-Interpreter',
  49646. fn: function (){
  49647. var self=this;
  49648. return false;
  49649. },
  49650. //>>excludeStart("ide", pragmas.excludeIdeData);
  49651. args: [],
  49652. source: "isSteppingNode\x0a\x09^ false",
  49653. referencedClasses: [],
  49654. //>>excludeEnd("ide");
  49655. messageSends: []
  49656. }),
  49657. $globals.Node);
  49658. $core.addMethod(
  49659. $core.method({
  49660. selector: "isSteppingNode",
  49661. protocol: '*Compiler-Interpreter',
  49662. fn: function (){
  49663. var self=this;
  49664. return true;
  49665. },
  49666. //>>excludeStart("ide", pragmas.excludeIdeData);
  49667. args: [],
  49668. source: "isSteppingNode\x0a\x09^ true",
  49669. referencedClasses: [],
  49670. //>>excludeEnd("ide");
  49671. messageSends: []
  49672. }),
  49673. $globals.SendNode);
  49674. });
  49675. define("amber/parser", ["./boot"], function($boot) {
  49676. var $globals = $boot.globals, nil = $boot.nil;
  49677. $globals.SmalltalkParser = (function() {
  49678. /*
  49679. * Generated by PEG.js 0.8.0.
  49680. *
  49681. * http://pegjs.majda.cz/
  49682. */
  49683. function peg$subclass(child, parent) {
  49684. function ctor() { this.constructor = child; }
  49685. ctor.prototype = parent.prototype;
  49686. child.prototype = new ctor();
  49687. }
  49688. function SyntaxError(message, expected, found, offset, line, column) {
  49689. this.message = message;
  49690. this.expected = expected;
  49691. this.found = found;
  49692. this.offset = offset;
  49693. this.line = line;
  49694. this.column = column;
  49695. this.name = "SyntaxError";
  49696. }
  49697. peg$subclass(SyntaxError, Error);
  49698. function parse(input) {
  49699. var options = arguments.length > 1 ? arguments[1] : {},
  49700. peg$FAILED = {},
  49701. peg$startRuleFunctions = { start: peg$parsestart },
  49702. peg$startRuleFunction = peg$parsestart,
  49703. peg$c0 = [],
  49704. peg$c1 = peg$FAILED,
  49705. peg$c2 = /^[ \t\x0B\f\xA0\uFEFF\n\r\u2028\u2029]/,
  49706. peg$c3 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\n\\r\\u2028\\u2029]" },
  49707. peg$c4 = "\"",
  49708. peg$c5 = { type: "literal", value: "\"", description: "\"\\\"\"" },
  49709. peg$c6 = /^[^"]/,
  49710. peg$c7 = { type: "class", value: "[^\"]", description: "[^\"]" },
  49711. peg$c8 = /^[a-zA-Z]/,
  49712. peg$c9 = { type: "class", value: "[a-zA-Z]", description: "[a-zA-Z]" },
  49713. peg$c10 = /^[a-zA-Z0-9]/,
  49714. peg$c11 = { type: "class", value: "[a-zA-Z0-9]", description: "[a-zA-Z0-9]" },
  49715. peg$c12 = function(first, others) {return first + others.join("");},
  49716. peg$c13 = ":",
  49717. peg$c14 = { type: "literal", value: ":", description: "\":\"" },
  49718. peg$c15 = function(first, last) {return first + last;},
  49719. peg$c16 = /^[a-zA-Z0-9:]/,
  49720. peg$c17 = { type: "class", value: "[a-zA-Z0-9:]", description: "[a-zA-Z0-9:]" },
  49721. peg$c18 = /^[A-Z]/,
  49722. peg$c19 = { type: "class", value: "[A-Z]", description: "[A-Z]" },
  49723. peg$c20 = "'",
  49724. peg$c21 = { type: "literal", value: "'", description: "\"'\"" },
  49725. peg$c22 = "''",
  49726. peg$c23 = { type: "literal", value: "''", description: "\"''\"" },
  49727. peg$c24 = function() {return "'";},
  49728. peg$c25 = /^[^']/,
  49729. peg$c26 = { type: "class", value: "[^']", description: "[^']" },
  49730. peg$c27 = function(val) {
  49731. return $globals.ValueNode._new()
  49732. ._position_((line()).__at(column()))
  49733. ._source_(text())
  49734. ._value_(val.join(""));
  49735. },
  49736. peg$c28 = "$",
  49737. peg$c29 = { type: "literal", value: "$", description: "\"$\"" },
  49738. peg$c30 = { type: "any", description: "any character" },
  49739. peg$c31 = function(char) {
  49740. return $globals.ValueNode._new()
  49741. ._position_((line()).__at(column()))
  49742. ._source_(text())
  49743. ._value_(char);
  49744. },
  49745. peg$c32 = "#",
  49746. peg$c33 = { type: "literal", value: "#", description: "\"#\"" },
  49747. peg$c34 = function(rest) {return rest;},
  49748. peg$c35 = function(node) {return node._value();},
  49749. peg$c36 = function(val) {
  49750. return $globals.ValueNode._new()
  49751. ._position_((line()).__at(column()))
  49752. ._source_(text())
  49753. ._value_(val);
  49754. },
  49755. peg$c37 = function(n) {
  49756. return $globals.ValueNode._new()
  49757. ._position_((line()).__at(column()))
  49758. ._source_(text())
  49759. ._value_(n);
  49760. },
  49761. peg$c38 = "e",
  49762. peg$c39 = { type: "literal", value: "e", description: "\"e\"" },
  49763. peg$c40 = function(n) {return parseFloat(n.join(""));},
  49764. peg$c41 = null,
  49765. peg$c42 = "-",
  49766. peg$c43 = { type: "literal", value: "-", description: "\"-\"" },
  49767. peg$c44 = "16r",
  49768. peg$c45 = { type: "literal", value: "16r", description: "\"16r\"" },
  49769. peg$c46 = /^[0-9a-fA-F]/,
  49770. peg$c47 = { type: "class", value: "[0-9a-fA-F]", description: "[0-9a-fA-F]" },
  49771. peg$c48 = function(neg, num) {return parseInt(((neg || '') + num.join("")), 16);},
  49772. peg$c49 = /^[0-9]/,
  49773. peg$c50 = { type: "class", value: "[0-9]", description: "[0-9]" },
  49774. peg$c51 = ".",
  49775. peg$c52 = { type: "literal", value: ".", description: "\".\"" },
  49776. peg$c53 = function(neg, digits, dec) {return parseFloat(((neg || '') + digits.join("") + "." + dec.join("")), 10);},
  49777. peg$c54 = function(neg, digits) {return (parseInt((neg || '') + digits.join(""), 10));},
  49778. peg$c55 = "#(",
  49779. peg$c56 = { type: "literal", value: "#(", description: "\"#(\"" },
  49780. peg$c57 = "(",
  49781. peg$c58 = { type: "literal", value: "(", description: "\"(\"" },
  49782. peg$c59 = function(lit) {return lit._value();},
  49783. peg$c60 = ")",
  49784. peg$c61 = { type: "literal", value: ")", description: "\")\"" },
  49785. peg$c62 = function(lits) {
  49786. return $globals.ValueNode._new()
  49787. ._position_((line()).__at(column()))
  49788. ._source_(text())
  49789. ._value_(lits);
  49790. },
  49791. peg$c63 = "{",
  49792. peg$c64 = { type: "literal", value: "{", description: "\"{\"" },
  49793. peg$c65 = "}",
  49794. peg$c66 = { type: "literal", value: "}", description: "\"}\"" },
  49795. peg$c67 = function(expressions) {
  49796. return $globals.DynamicArrayNode._new()
  49797. ._position_((line()).__at(column()))
  49798. ._source_(text())
  49799. ._nodes_(expressions || []);
  49800. },
  49801. peg$c68 = "#{",
  49802. peg$c69 = { type: "literal", value: "#{", description: "\"#{\"" },
  49803. peg$c70 = function(expressions) {
  49804. return $globals.DynamicDictionaryNode._new()
  49805. ._position_((line()).__at(column()))
  49806. ._source_(text())
  49807. ._nodes_(expressions || []);
  49808. },
  49809. peg$c71 = "true",
  49810. peg$c72 = { type: "literal", value: "true", description: "\"true\"" },
  49811. peg$c73 = function() {return true;},
  49812. peg$c74 = "false",
  49813. peg$c75 = { type: "literal", value: "false", description: "\"false\"" },
  49814. peg$c76 = function() {return false;},
  49815. peg$c77 = "nil",
  49816. peg$c78 = { type: "literal", value: "nil", description: "\"nil\"" },
  49817. peg$c79 = function() {return nil;},
  49818. peg$c80 = function(val) {
  49819. return $globals.ValueNode._new()
  49820. ._position_((line()).__at(column()))
  49821. ._source_(text())
  49822. ._value_(val);
  49823. },
  49824. peg$c81 = function(identifier) {
  49825. return $globals.VariableNode._new()
  49826. ._position_((line()).__at(column()))
  49827. ._source_(text())
  49828. ._value_(identifier);
  49829. },
  49830. peg$c82 = function(key, arg) {return {key:key, arg:arg};},
  49831. peg$c83 = /^[\\+*\/=><,@%~|&\-]/,
  49832. peg$c84 = { type: "class", value: "[\\\\+*\\/=><,@%~|&\\-]", description: "[\\\\+*\\/=><,@%~|&\\-]" },
  49833. peg$c85 = function(bin) {return bin.join("");},
  49834. peg$c86 = function(pairs) {
  49835. var keywords = [];
  49836. var params = [];
  49837. var i = 0;
  49838. for(i = 0; i < pairs.length; i++){
  49839. keywords.push(pairs[i].key);
  49840. }
  49841. for(i = 0; i < pairs.length; i++){
  49842. params.push(pairs[i].arg);
  49843. }
  49844. return [keywords.join(""), params];
  49845. },
  49846. peg$c87 = function(selector, arg) {return [selector, [arg]];},
  49847. peg$c88 = function(selector) {return [selector, []];},
  49848. peg$c89 = function(expression) {return expression;},
  49849. peg$c90 = function(first, others) { return [first].concat(others); },
  49850. peg$c91 = ":=",
  49851. peg$c92 = { type: "literal", value: ":=", description: "\":=\"" },
  49852. peg$c93 = function(variable, expression) {
  49853. return $globals.AssignmentNode._new()
  49854. ._position_((line()).__at(column()))
  49855. ._source_(text())
  49856. ._left_(variable)
  49857. ._right_(expression);
  49858. },
  49859. peg$c94 = "^",
  49860. peg$c95 = { type: "literal", value: "^", description: "\"^\"" },
  49861. peg$c96 = function(expression) {
  49862. return $globals.ReturnNode._new()
  49863. ._position_((line()).__at(column()))
  49864. ._source_(text())
  49865. ._nodes_([expression]);
  49866. },
  49867. peg$c97 = "|",
  49868. peg$c98 = { type: "literal", value: "|", description: "\"|\"" },
  49869. peg$c99 = function(variable) {return variable;},
  49870. peg$c100 = function(vars) {return vars;},
  49871. peg$c101 = function(param) {return param;},
  49872. peg$c102 = function(params) {return params;},
  49873. peg$c103 = function(ret) {return [ret];},
  49874. peg$c104 = function(exps, ret) {
  49875. var expressions = exps;
  49876. expressions.push(ret);
  49877. return expressions;
  49878. },
  49879. peg$c105 = function(expressions) {
  49880. return expressions || [];
  49881. },
  49882. peg$c106 = function(temps, statements) {
  49883. return $globals.SequenceNode._new()
  49884. ._position_((line()).__at(column()))
  49885. ._source_(text())
  49886. ._temps_(temps || [])
  49887. ._nodes_(statements || []);
  49888. },
  49889. peg$c107 = "[",
  49890. peg$c108 = { type: "literal", value: "[", description: "\"[\"" },
  49891. peg$c109 = "]",
  49892. peg$c110 = { type: "literal", value: "]", description: "\"]\"" },
  49893. peg$c111 = function(params, sequence) {
  49894. return $globals.BlockNode._new()
  49895. ._position_((line()).__at(column()))
  49896. ._source_(text())
  49897. ._parameters_(params || [])
  49898. ._nodes_([sequence._asBlockSequenceNode()]);
  49899. },
  49900. peg$c112 = void 0,
  49901. peg$c113 = function(selector) {
  49902. return $globals.SendNode._new()
  49903. ._position_((line()).__at(column()))
  49904. ._source_(text())
  49905. ._selector_(selector);
  49906. },
  49907. peg$c114 = function(message, tail) {
  49908. if(tail) {
  49909. return tail._valueForReceiver_(message);
  49910. }
  49911. else {
  49912. return message;
  49913. }
  49914. },
  49915. peg$c115 = function(receiver, tail) {
  49916. if(tail) {
  49917. return tail._valueForReceiver_(receiver);
  49918. }
  49919. else {
  49920. return receiver;
  49921. }
  49922. },
  49923. peg$c116 = function(selector, arg) {
  49924. return $globals.SendNode._new()
  49925. ._position_((line()).__at(column()))
  49926. ._source_(text())
  49927. ._selector_(selector)
  49928. ._arguments_([arg]);
  49929. },
  49930. peg$c117 = function(message, tail) {
  49931. if(tail) {
  49932. return tail._valueForReceiver_(message);
  49933. }
  49934. else {
  49935. return message;
  49936. }
  49937. },
  49938. peg$c118 = function(pairs) {
  49939. var selector = [];
  49940. var args = [];
  49941. for(var i = 0; i < pairs.length; i++) {
  49942. selector.push(pairs[i].key);
  49943. args.push(pairs[i].arg);
  49944. }
  49945. return $globals.SendNode._new()
  49946. ._position_((line()).__at(column()))
  49947. ._source_(text())
  49948. ._selector_(selector.join(""))
  49949. ._arguments_(args);
  49950. },
  49951. peg$c119 = function(receiver, tail) {
  49952. return tail._valueForReceiver_(receiver);
  49953. },
  49954. peg$c120 = ";",
  49955. peg$c121 = { type: "literal", value: ";", description: "\";\"" },
  49956. peg$c122 = function(mess) {return mess;},
  49957. peg$c123 = function(send, messages) {
  49958. var cascade = [];
  49959. cascade.push(send);
  49960. for(var i = 0; i < messages.length; i++) {
  49961. cascade.push(messages[i]);
  49962. }
  49963. return $globals.CascadeNode._new()
  49964. ._position_((line()).__at(column()))
  49965. ._source_(text())
  49966. ._receiver_(send._receiver())
  49967. ._nodes_(cascade);
  49968. },
  49969. peg$c124 = "<",
  49970. peg$c125 = { type: "literal", value: "<", description: "\"<\"" },
  49971. peg$c126 = ">>",
  49972. peg$c127 = { type: "literal", value: ">>", description: "\">>\"" },
  49973. peg$c128 = function() {return ">";},
  49974. peg$c129 = /^[^>]/,
  49975. peg$c130 = { type: "class", value: "[^>]", description: "[^>]" },
  49976. peg$c131 = ">",
  49977. peg$c132 = { type: "literal", value: ">", description: "\">\"" },
  49978. peg$c133 = function(val) {
  49979. return $globals.JSStatementNode._new()
  49980. ._position_((line()).__at(column()))
  49981. ._source_(val.join(""))
  49982. },
  49983. peg$c134 = function(pattern, sequence) {
  49984. return $globals.MethodNode._new()
  49985. ._position_((line()).__at(column()))
  49986. ._source_(text())
  49987. ._selector_(pattern[0])
  49988. ._arguments_(pattern[1])
  49989. ._nodes_([sequence]);
  49990. },
  49991. peg$c135 = function(send) { return send._selector() === "->" },
  49992. peg$c136 = function(send) { return [send._receiver(), send._arguments()[0]]; },
  49993. peg$c137 = function(first, others) { return first.concat.apply(first, others); },
  49994. peg$currPos = 0,
  49995. peg$reportedPos = 0,
  49996. peg$cachedPos = 0,
  49997. peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
  49998. peg$maxFailPos = 0,
  49999. peg$maxFailExpected = [],
  50000. peg$silentFails = 0,
  50001. peg$cache = {},
  50002. peg$result;
  50003. if ("startRule" in options) {
  50004. if (!(options.startRule in peg$startRuleFunctions)) {
  50005. throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
  50006. }
  50007. peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
  50008. }
  50009. function text() {
  50010. return input.substring(peg$reportedPos, peg$currPos);
  50011. }
  50012. function offset() {
  50013. return peg$reportedPos;
  50014. }
  50015. function line() {
  50016. return peg$computePosDetails(peg$reportedPos).line;
  50017. }
  50018. function column() {
  50019. return peg$computePosDetails(peg$reportedPos).column;
  50020. }
  50021. function expected(description) {
  50022. throw peg$buildException(
  50023. null,
  50024. [{ type: "other", description: description }],
  50025. peg$reportedPos
  50026. );
  50027. }
  50028. function error(message) {
  50029. throw peg$buildException(message, null, peg$reportedPos);
  50030. }
  50031. function peg$computePosDetails(pos) {
  50032. function advance(details, startPos, endPos) {
  50033. var p, ch;
  50034. for (p = startPos; p < endPos; p++) {
  50035. ch = input.charAt(p);
  50036. if (ch === "\n") {
  50037. if (!details.seenCR) { details.line++; }
  50038. details.column = 1;
  50039. details.seenCR = false;
  50040. } else if (ch === "\r" || ch === "\u2028" || ch === "\u2029") {
  50041. details.line++;
  50042. details.column = 1;
  50043. details.seenCR = true;
  50044. } else {
  50045. details.column++;
  50046. details.seenCR = false;
  50047. }
  50048. }
  50049. }
  50050. if (peg$cachedPos !== pos) {
  50051. if (peg$cachedPos > pos) {
  50052. peg$cachedPos = 0;
  50053. peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
  50054. }
  50055. advance(peg$cachedPosDetails, peg$cachedPos, pos);
  50056. peg$cachedPos = pos;
  50057. }
  50058. return peg$cachedPosDetails;
  50059. }
  50060. function peg$fail(expected) {
  50061. if (peg$currPos < peg$maxFailPos) { return; }
  50062. if (peg$currPos > peg$maxFailPos) {
  50063. peg$maxFailPos = peg$currPos;
  50064. peg$maxFailExpected = [];
  50065. }
  50066. peg$maxFailExpected.push(expected);
  50067. }
  50068. function peg$buildException(message, expected, pos) {
  50069. function cleanupExpected(expected) {
  50070. var i = 1;
  50071. expected.sort(function(a, b) {
  50072. if (a.description < b.description) {
  50073. return -1;
  50074. } else if (a.description > b.description) {
  50075. return 1;
  50076. } else {
  50077. return 0;
  50078. }
  50079. });
  50080. while (i < expected.length) {
  50081. if (expected[i - 1] === expected[i]) {
  50082. expected.splice(i, 1);
  50083. } else {
  50084. i++;
  50085. }
  50086. }
  50087. }
  50088. function buildMessage(expected, found) {
  50089. function stringEscape(s) {
  50090. function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }
  50091. return s
  50092. .replace(/\\/g, '\\\\')
  50093. .replace(/"/g, '\\"')
  50094. .replace(/\x08/g, '\\b')
  50095. .replace(/\t/g, '\\t')
  50096. .replace(/\n/g, '\\n')
  50097. .replace(/\f/g, '\\f')
  50098. .replace(/\r/g, '\\r')
  50099. .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return '\\x0' + hex(ch); })
  50100. .replace(/[\x10-\x1F\x80-\xFF]/g, function(ch) { return '\\x' + hex(ch); })
  50101. .replace(/[\u0180-\u0FFF]/g, function(ch) { return '\\u0' + hex(ch); })
  50102. .replace(/[\u1080-\uFFFF]/g, function(ch) { return '\\u' + hex(ch); });
  50103. }
  50104. var expectedDescs = new Array(expected.length),
  50105. expectedDesc, foundDesc, i;
  50106. for (i = 0; i < expected.length; i++) {
  50107. expectedDescs[i] = expected[i].description;
  50108. }
  50109. expectedDesc = expected.length > 1
  50110. ? expectedDescs.slice(0, -1).join(", ")
  50111. + " or "
  50112. + expectedDescs[expected.length - 1]
  50113. : expectedDescs[0];
  50114. foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
  50115. return "Expected " + expectedDesc + " but " + foundDesc + " found.";
  50116. }
  50117. var posDetails = peg$computePosDetails(pos),
  50118. found = pos < input.length ? input.charAt(pos) : null;
  50119. if (expected !== null) {
  50120. cleanupExpected(expected);
  50121. }
  50122. return new SyntaxError(
  50123. message !== null ? message : buildMessage(expected, found),
  50124. expected,
  50125. found,
  50126. pos,
  50127. posDetails.line,
  50128. posDetails.column
  50129. );
  50130. }
  50131. function peg$parsestart() {
  50132. var s0;
  50133. var key = peg$currPos * 60 + 0,
  50134. cached = peg$cache[key];
  50135. if (cached) {
  50136. peg$currPos = cached.nextPos;
  50137. return cached.result;
  50138. }
  50139. s0 = peg$parsemethod();
  50140. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50141. return s0;
  50142. }
  50143. function peg$parseseparator() {
  50144. var s0, s1;
  50145. var key = peg$currPos * 60 + 1,
  50146. cached = peg$cache[key];
  50147. if (cached) {
  50148. peg$currPos = cached.nextPos;
  50149. return cached.result;
  50150. }
  50151. s0 = [];
  50152. if (peg$c2.test(input.charAt(peg$currPos))) {
  50153. s1 = input.charAt(peg$currPos);
  50154. peg$currPos++;
  50155. } else {
  50156. s1 = peg$FAILED;
  50157. if (peg$silentFails === 0) { peg$fail(peg$c3); }
  50158. }
  50159. if (s1 !== peg$FAILED) {
  50160. while (s1 !== peg$FAILED) {
  50161. s0.push(s1);
  50162. if (peg$c2.test(input.charAt(peg$currPos))) {
  50163. s1 = input.charAt(peg$currPos);
  50164. peg$currPos++;
  50165. } else {
  50166. s1 = peg$FAILED;
  50167. if (peg$silentFails === 0) { peg$fail(peg$c3); }
  50168. }
  50169. }
  50170. } else {
  50171. s0 = peg$c1;
  50172. }
  50173. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50174. return s0;
  50175. }
  50176. function peg$parsecomments() {
  50177. var s0, s1, s2, s3, s4;
  50178. var key = peg$currPos * 60 + 2,
  50179. cached = peg$cache[key];
  50180. if (cached) {
  50181. peg$currPos = cached.nextPos;
  50182. return cached.result;
  50183. }
  50184. s0 = [];
  50185. s1 = peg$currPos;
  50186. if (input.charCodeAt(peg$currPos) === 34) {
  50187. s2 = peg$c4;
  50188. peg$currPos++;
  50189. } else {
  50190. s2 = peg$FAILED;
  50191. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  50192. }
  50193. if (s2 !== peg$FAILED) {
  50194. s3 = [];
  50195. if (peg$c6.test(input.charAt(peg$currPos))) {
  50196. s4 = input.charAt(peg$currPos);
  50197. peg$currPos++;
  50198. } else {
  50199. s4 = peg$FAILED;
  50200. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  50201. }
  50202. while (s4 !== peg$FAILED) {
  50203. s3.push(s4);
  50204. if (peg$c6.test(input.charAt(peg$currPos))) {
  50205. s4 = input.charAt(peg$currPos);
  50206. peg$currPos++;
  50207. } else {
  50208. s4 = peg$FAILED;
  50209. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  50210. }
  50211. }
  50212. if (s3 !== peg$FAILED) {
  50213. if (input.charCodeAt(peg$currPos) === 34) {
  50214. s4 = peg$c4;
  50215. peg$currPos++;
  50216. } else {
  50217. s4 = peg$FAILED;
  50218. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  50219. }
  50220. if (s4 !== peg$FAILED) {
  50221. s2 = [s2, s3, s4];
  50222. s1 = s2;
  50223. } else {
  50224. peg$currPos = s1;
  50225. s1 = peg$c1;
  50226. }
  50227. } else {
  50228. peg$currPos = s1;
  50229. s1 = peg$c1;
  50230. }
  50231. } else {
  50232. peg$currPos = s1;
  50233. s1 = peg$c1;
  50234. }
  50235. if (s1 !== peg$FAILED) {
  50236. while (s1 !== peg$FAILED) {
  50237. s0.push(s1);
  50238. s1 = peg$currPos;
  50239. if (input.charCodeAt(peg$currPos) === 34) {
  50240. s2 = peg$c4;
  50241. peg$currPos++;
  50242. } else {
  50243. s2 = peg$FAILED;
  50244. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  50245. }
  50246. if (s2 !== peg$FAILED) {
  50247. s3 = [];
  50248. if (peg$c6.test(input.charAt(peg$currPos))) {
  50249. s4 = input.charAt(peg$currPos);
  50250. peg$currPos++;
  50251. } else {
  50252. s4 = peg$FAILED;
  50253. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  50254. }
  50255. while (s4 !== peg$FAILED) {
  50256. s3.push(s4);
  50257. if (peg$c6.test(input.charAt(peg$currPos))) {
  50258. s4 = input.charAt(peg$currPos);
  50259. peg$currPos++;
  50260. } else {
  50261. s4 = peg$FAILED;
  50262. if (peg$silentFails === 0) { peg$fail(peg$c7); }
  50263. }
  50264. }
  50265. if (s3 !== peg$FAILED) {
  50266. if (input.charCodeAt(peg$currPos) === 34) {
  50267. s4 = peg$c4;
  50268. peg$currPos++;
  50269. } else {
  50270. s4 = peg$FAILED;
  50271. if (peg$silentFails === 0) { peg$fail(peg$c5); }
  50272. }
  50273. if (s4 !== peg$FAILED) {
  50274. s2 = [s2, s3, s4];
  50275. s1 = s2;
  50276. } else {
  50277. peg$currPos = s1;
  50278. s1 = peg$c1;
  50279. }
  50280. } else {
  50281. peg$currPos = s1;
  50282. s1 = peg$c1;
  50283. }
  50284. } else {
  50285. peg$currPos = s1;
  50286. s1 = peg$c1;
  50287. }
  50288. }
  50289. } else {
  50290. s0 = peg$c1;
  50291. }
  50292. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50293. return s0;
  50294. }
  50295. function peg$parsews() {
  50296. var s0, s1;
  50297. var key = peg$currPos * 60 + 3,
  50298. cached = peg$cache[key];
  50299. if (cached) {
  50300. peg$currPos = cached.nextPos;
  50301. return cached.result;
  50302. }
  50303. s0 = [];
  50304. s1 = peg$parseseparator();
  50305. if (s1 === peg$FAILED) {
  50306. s1 = peg$parsecomments();
  50307. }
  50308. while (s1 !== peg$FAILED) {
  50309. s0.push(s1);
  50310. s1 = peg$parseseparator();
  50311. if (s1 === peg$FAILED) {
  50312. s1 = peg$parsecomments();
  50313. }
  50314. }
  50315. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50316. return s0;
  50317. }
  50318. function peg$parseidentifier() {
  50319. var s0, s1, s2, s3;
  50320. var key = peg$currPos * 60 + 4,
  50321. cached = peg$cache[key];
  50322. if (cached) {
  50323. peg$currPos = cached.nextPos;
  50324. return cached.result;
  50325. }
  50326. s0 = peg$currPos;
  50327. if (peg$c8.test(input.charAt(peg$currPos))) {
  50328. s1 = input.charAt(peg$currPos);
  50329. peg$currPos++;
  50330. } else {
  50331. s1 = peg$FAILED;
  50332. if (peg$silentFails === 0) { peg$fail(peg$c9); }
  50333. }
  50334. if (s1 !== peg$FAILED) {
  50335. s2 = [];
  50336. if (peg$c10.test(input.charAt(peg$currPos))) {
  50337. s3 = input.charAt(peg$currPos);
  50338. peg$currPos++;
  50339. } else {
  50340. s3 = peg$FAILED;
  50341. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  50342. }
  50343. while (s3 !== peg$FAILED) {
  50344. s2.push(s3);
  50345. if (peg$c10.test(input.charAt(peg$currPos))) {
  50346. s3 = input.charAt(peg$currPos);
  50347. peg$currPos++;
  50348. } else {
  50349. s3 = peg$FAILED;
  50350. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  50351. }
  50352. }
  50353. if (s2 !== peg$FAILED) {
  50354. peg$reportedPos = s0;
  50355. s1 = peg$c12(s1, s2);
  50356. s0 = s1;
  50357. } else {
  50358. peg$currPos = s0;
  50359. s0 = peg$c1;
  50360. }
  50361. } else {
  50362. peg$currPos = s0;
  50363. s0 = peg$c1;
  50364. }
  50365. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50366. return s0;
  50367. }
  50368. function peg$parsekeyword() {
  50369. var s0, s1, s2;
  50370. var key = peg$currPos * 60 + 5,
  50371. cached = peg$cache[key];
  50372. if (cached) {
  50373. peg$currPos = cached.nextPos;
  50374. return cached.result;
  50375. }
  50376. s0 = peg$currPos;
  50377. s1 = peg$parseidentifier();
  50378. if (s1 !== peg$FAILED) {
  50379. if (input.charCodeAt(peg$currPos) === 58) {
  50380. s2 = peg$c13;
  50381. peg$currPos++;
  50382. } else {
  50383. s2 = peg$FAILED;
  50384. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  50385. }
  50386. if (s2 !== peg$FAILED) {
  50387. peg$reportedPos = s0;
  50388. s1 = peg$c15(s1, s2);
  50389. s0 = s1;
  50390. } else {
  50391. peg$currPos = s0;
  50392. s0 = peg$c1;
  50393. }
  50394. } else {
  50395. peg$currPos = s0;
  50396. s0 = peg$c1;
  50397. }
  50398. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50399. return s0;
  50400. }
  50401. function peg$parseselector() {
  50402. var s0, s1, s2, s3;
  50403. var key = peg$currPos * 60 + 6,
  50404. cached = peg$cache[key];
  50405. if (cached) {
  50406. peg$currPos = cached.nextPos;
  50407. return cached.result;
  50408. }
  50409. s0 = peg$currPos;
  50410. if (peg$c8.test(input.charAt(peg$currPos))) {
  50411. s1 = input.charAt(peg$currPos);
  50412. peg$currPos++;
  50413. } else {
  50414. s1 = peg$FAILED;
  50415. if (peg$silentFails === 0) { peg$fail(peg$c9); }
  50416. }
  50417. if (s1 !== peg$FAILED) {
  50418. s2 = [];
  50419. if (peg$c16.test(input.charAt(peg$currPos))) {
  50420. s3 = input.charAt(peg$currPos);
  50421. peg$currPos++;
  50422. } else {
  50423. s3 = peg$FAILED;
  50424. if (peg$silentFails === 0) { peg$fail(peg$c17); }
  50425. }
  50426. while (s3 !== peg$FAILED) {
  50427. s2.push(s3);
  50428. if (peg$c16.test(input.charAt(peg$currPos))) {
  50429. s3 = input.charAt(peg$currPos);
  50430. peg$currPos++;
  50431. } else {
  50432. s3 = peg$FAILED;
  50433. if (peg$silentFails === 0) { peg$fail(peg$c17); }
  50434. }
  50435. }
  50436. if (s2 !== peg$FAILED) {
  50437. peg$reportedPos = s0;
  50438. s1 = peg$c12(s1, s2);
  50439. s0 = s1;
  50440. } else {
  50441. peg$currPos = s0;
  50442. s0 = peg$c1;
  50443. }
  50444. } else {
  50445. peg$currPos = s0;
  50446. s0 = peg$c1;
  50447. }
  50448. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50449. return s0;
  50450. }
  50451. function peg$parseclassName() {
  50452. var s0, s1, s2, s3;
  50453. var key = peg$currPos * 60 + 7,
  50454. cached = peg$cache[key];
  50455. if (cached) {
  50456. peg$currPos = cached.nextPos;
  50457. return cached.result;
  50458. }
  50459. s0 = peg$currPos;
  50460. if (peg$c18.test(input.charAt(peg$currPos))) {
  50461. s1 = input.charAt(peg$currPos);
  50462. peg$currPos++;
  50463. } else {
  50464. s1 = peg$FAILED;
  50465. if (peg$silentFails === 0) { peg$fail(peg$c19); }
  50466. }
  50467. if (s1 !== peg$FAILED) {
  50468. s2 = [];
  50469. if (peg$c10.test(input.charAt(peg$currPos))) {
  50470. s3 = input.charAt(peg$currPos);
  50471. peg$currPos++;
  50472. } else {
  50473. s3 = peg$FAILED;
  50474. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  50475. }
  50476. while (s3 !== peg$FAILED) {
  50477. s2.push(s3);
  50478. if (peg$c10.test(input.charAt(peg$currPos))) {
  50479. s3 = input.charAt(peg$currPos);
  50480. peg$currPos++;
  50481. } else {
  50482. s3 = peg$FAILED;
  50483. if (peg$silentFails === 0) { peg$fail(peg$c11); }
  50484. }
  50485. }
  50486. if (s2 !== peg$FAILED) {
  50487. peg$reportedPos = s0;
  50488. s1 = peg$c12(s1, s2);
  50489. s0 = s1;
  50490. } else {
  50491. peg$currPos = s0;
  50492. s0 = peg$c1;
  50493. }
  50494. } else {
  50495. peg$currPos = s0;
  50496. s0 = peg$c1;
  50497. }
  50498. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50499. return s0;
  50500. }
  50501. function peg$parsestring() {
  50502. var s0, s1, s2, s3, s4;
  50503. var key = peg$currPos * 60 + 8,
  50504. cached = peg$cache[key];
  50505. if (cached) {
  50506. peg$currPos = cached.nextPos;
  50507. return cached.result;
  50508. }
  50509. s0 = peg$currPos;
  50510. if (input.charCodeAt(peg$currPos) === 39) {
  50511. s1 = peg$c20;
  50512. peg$currPos++;
  50513. } else {
  50514. s1 = peg$FAILED;
  50515. if (peg$silentFails === 0) { peg$fail(peg$c21); }
  50516. }
  50517. if (s1 !== peg$FAILED) {
  50518. s2 = [];
  50519. s3 = peg$currPos;
  50520. if (input.substr(peg$currPos, 2) === peg$c22) {
  50521. s4 = peg$c22;
  50522. peg$currPos += 2;
  50523. } else {
  50524. s4 = peg$FAILED;
  50525. if (peg$silentFails === 0) { peg$fail(peg$c23); }
  50526. }
  50527. if (s4 !== peg$FAILED) {
  50528. peg$reportedPos = s3;
  50529. s4 = peg$c24();
  50530. }
  50531. s3 = s4;
  50532. if (s3 === peg$FAILED) {
  50533. if (peg$c25.test(input.charAt(peg$currPos))) {
  50534. s3 = input.charAt(peg$currPos);
  50535. peg$currPos++;
  50536. } else {
  50537. s3 = peg$FAILED;
  50538. if (peg$silentFails === 0) { peg$fail(peg$c26); }
  50539. }
  50540. }
  50541. while (s3 !== peg$FAILED) {
  50542. s2.push(s3);
  50543. s3 = peg$currPos;
  50544. if (input.substr(peg$currPos, 2) === peg$c22) {
  50545. s4 = peg$c22;
  50546. peg$currPos += 2;
  50547. } else {
  50548. s4 = peg$FAILED;
  50549. if (peg$silentFails === 0) { peg$fail(peg$c23); }
  50550. }
  50551. if (s4 !== peg$FAILED) {
  50552. peg$reportedPos = s3;
  50553. s4 = peg$c24();
  50554. }
  50555. s3 = s4;
  50556. if (s3 === peg$FAILED) {
  50557. if (peg$c25.test(input.charAt(peg$currPos))) {
  50558. s3 = input.charAt(peg$currPos);
  50559. peg$currPos++;
  50560. } else {
  50561. s3 = peg$FAILED;
  50562. if (peg$silentFails === 0) { peg$fail(peg$c26); }
  50563. }
  50564. }
  50565. }
  50566. if (s2 !== peg$FAILED) {
  50567. if (input.charCodeAt(peg$currPos) === 39) {
  50568. s3 = peg$c20;
  50569. peg$currPos++;
  50570. } else {
  50571. s3 = peg$FAILED;
  50572. if (peg$silentFails === 0) { peg$fail(peg$c21); }
  50573. }
  50574. if (s3 !== peg$FAILED) {
  50575. peg$reportedPos = s0;
  50576. s1 = peg$c27(s2);
  50577. s0 = s1;
  50578. } else {
  50579. peg$currPos = s0;
  50580. s0 = peg$c1;
  50581. }
  50582. } else {
  50583. peg$currPos = s0;
  50584. s0 = peg$c1;
  50585. }
  50586. } else {
  50587. peg$currPos = s0;
  50588. s0 = peg$c1;
  50589. }
  50590. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50591. return s0;
  50592. }
  50593. function peg$parsecharacter() {
  50594. var s0, s1, s2;
  50595. var key = peg$currPos * 60 + 9,
  50596. cached = peg$cache[key];
  50597. if (cached) {
  50598. peg$currPos = cached.nextPos;
  50599. return cached.result;
  50600. }
  50601. s0 = peg$currPos;
  50602. if (input.charCodeAt(peg$currPos) === 36) {
  50603. s1 = peg$c28;
  50604. peg$currPos++;
  50605. } else {
  50606. s1 = peg$FAILED;
  50607. if (peg$silentFails === 0) { peg$fail(peg$c29); }
  50608. }
  50609. if (s1 !== peg$FAILED) {
  50610. if (input.length > peg$currPos) {
  50611. s2 = input.charAt(peg$currPos);
  50612. peg$currPos++;
  50613. } else {
  50614. s2 = peg$FAILED;
  50615. if (peg$silentFails === 0) { peg$fail(peg$c30); }
  50616. }
  50617. if (s2 !== peg$FAILED) {
  50618. peg$reportedPos = s0;
  50619. s1 = peg$c31(s2);
  50620. s0 = s1;
  50621. } else {
  50622. peg$currPos = s0;
  50623. s0 = peg$c1;
  50624. }
  50625. } else {
  50626. peg$currPos = s0;
  50627. s0 = peg$c1;
  50628. }
  50629. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50630. return s0;
  50631. }
  50632. function peg$parsesymbol() {
  50633. var s0, s1, s2;
  50634. var key = peg$currPos * 60 + 10,
  50635. cached = peg$cache[key];
  50636. if (cached) {
  50637. peg$currPos = cached.nextPos;
  50638. return cached.result;
  50639. }
  50640. s0 = peg$currPos;
  50641. if (input.charCodeAt(peg$currPos) === 35) {
  50642. s1 = peg$c32;
  50643. peg$currPos++;
  50644. } else {
  50645. s1 = peg$FAILED;
  50646. if (peg$silentFails === 0) { peg$fail(peg$c33); }
  50647. }
  50648. if (s1 !== peg$FAILED) {
  50649. s2 = peg$parsebareSymbol();
  50650. if (s2 !== peg$FAILED) {
  50651. peg$reportedPos = s0;
  50652. s1 = peg$c34(s2);
  50653. s0 = s1;
  50654. } else {
  50655. peg$currPos = s0;
  50656. s0 = peg$c1;
  50657. }
  50658. } else {
  50659. peg$currPos = s0;
  50660. s0 = peg$c1;
  50661. }
  50662. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50663. return s0;
  50664. }
  50665. function peg$parsebareSymbol() {
  50666. var s0, s1, s2;
  50667. var key = peg$currPos * 60 + 11,
  50668. cached = peg$cache[key];
  50669. if (cached) {
  50670. peg$currPos = cached.nextPos;
  50671. return cached.result;
  50672. }
  50673. s0 = peg$currPos;
  50674. s1 = peg$parseselector();
  50675. if (s1 === peg$FAILED) {
  50676. s1 = peg$parsebinarySelector();
  50677. if (s1 === peg$FAILED) {
  50678. s1 = peg$currPos;
  50679. s2 = peg$parsestring();
  50680. if (s2 !== peg$FAILED) {
  50681. peg$reportedPos = s1;
  50682. s2 = peg$c35(s2);
  50683. }
  50684. s1 = s2;
  50685. }
  50686. }
  50687. if (s1 !== peg$FAILED) {
  50688. peg$reportedPos = s0;
  50689. s1 = peg$c36(s1);
  50690. }
  50691. s0 = s1;
  50692. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50693. return s0;
  50694. }
  50695. function peg$parsenumber() {
  50696. var s0, s1;
  50697. var key = peg$currPos * 60 + 12,
  50698. cached = peg$cache[key];
  50699. if (cached) {
  50700. peg$currPos = cached.nextPos;
  50701. return cached.result;
  50702. }
  50703. s0 = peg$currPos;
  50704. s1 = peg$parsenumberExp();
  50705. if (s1 === peg$FAILED) {
  50706. s1 = peg$parsehex();
  50707. if (s1 === peg$FAILED) {
  50708. s1 = peg$parsefloat();
  50709. if (s1 === peg$FAILED) {
  50710. s1 = peg$parseinteger();
  50711. }
  50712. }
  50713. }
  50714. if (s1 !== peg$FAILED) {
  50715. peg$reportedPos = s0;
  50716. s1 = peg$c37(s1);
  50717. }
  50718. s0 = s1;
  50719. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50720. return s0;
  50721. }
  50722. function peg$parsenumberExp() {
  50723. var s0, s1, s2, s3, s4;
  50724. var key = peg$currPos * 60 + 13,
  50725. cached = peg$cache[key];
  50726. if (cached) {
  50727. peg$currPos = cached.nextPos;
  50728. return cached.result;
  50729. }
  50730. s0 = peg$currPos;
  50731. s1 = peg$currPos;
  50732. s2 = peg$parsefloat();
  50733. if (s2 === peg$FAILED) {
  50734. s2 = peg$parseinteger();
  50735. }
  50736. if (s2 !== peg$FAILED) {
  50737. if (input.charCodeAt(peg$currPos) === 101) {
  50738. s3 = peg$c38;
  50739. peg$currPos++;
  50740. } else {
  50741. s3 = peg$FAILED;
  50742. if (peg$silentFails === 0) { peg$fail(peg$c39); }
  50743. }
  50744. if (s3 !== peg$FAILED) {
  50745. s4 = peg$parseinteger();
  50746. if (s4 !== peg$FAILED) {
  50747. s2 = [s2, s3, s4];
  50748. s1 = s2;
  50749. } else {
  50750. peg$currPos = s1;
  50751. s1 = peg$c1;
  50752. }
  50753. } else {
  50754. peg$currPos = s1;
  50755. s1 = peg$c1;
  50756. }
  50757. } else {
  50758. peg$currPos = s1;
  50759. s1 = peg$c1;
  50760. }
  50761. if (s1 !== peg$FAILED) {
  50762. peg$reportedPos = s0;
  50763. s1 = peg$c40(s1);
  50764. }
  50765. s0 = s1;
  50766. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50767. return s0;
  50768. }
  50769. function peg$parsehex() {
  50770. var s0, s1, s2, s3, s4;
  50771. var key = peg$currPos * 60 + 14,
  50772. cached = peg$cache[key];
  50773. if (cached) {
  50774. peg$currPos = cached.nextPos;
  50775. return cached.result;
  50776. }
  50777. s0 = peg$currPos;
  50778. if (input.charCodeAt(peg$currPos) === 45) {
  50779. s1 = peg$c42;
  50780. peg$currPos++;
  50781. } else {
  50782. s1 = peg$FAILED;
  50783. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  50784. }
  50785. if (s1 === peg$FAILED) {
  50786. s1 = peg$c41;
  50787. }
  50788. if (s1 !== peg$FAILED) {
  50789. if (input.substr(peg$currPos, 3) === peg$c44) {
  50790. s2 = peg$c44;
  50791. peg$currPos += 3;
  50792. } else {
  50793. s2 = peg$FAILED;
  50794. if (peg$silentFails === 0) { peg$fail(peg$c45); }
  50795. }
  50796. if (s2 !== peg$FAILED) {
  50797. s3 = [];
  50798. if (peg$c46.test(input.charAt(peg$currPos))) {
  50799. s4 = input.charAt(peg$currPos);
  50800. peg$currPos++;
  50801. } else {
  50802. s4 = peg$FAILED;
  50803. if (peg$silentFails === 0) { peg$fail(peg$c47); }
  50804. }
  50805. if (s4 !== peg$FAILED) {
  50806. while (s4 !== peg$FAILED) {
  50807. s3.push(s4);
  50808. if (peg$c46.test(input.charAt(peg$currPos))) {
  50809. s4 = input.charAt(peg$currPos);
  50810. peg$currPos++;
  50811. } else {
  50812. s4 = peg$FAILED;
  50813. if (peg$silentFails === 0) { peg$fail(peg$c47); }
  50814. }
  50815. }
  50816. } else {
  50817. s3 = peg$c1;
  50818. }
  50819. if (s3 !== peg$FAILED) {
  50820. peg$reportedPos = s0;
  50821. s1 = peg$c48(s1, s3);
  50822. s0 = s1;
  50823. } else {
  50824. peg$currPos = s0;
  50825. s0 = peg$c1;
  50826. }
  50827. } else {
  50828. peg$currPos = s0;
  50829. s0 = peg$c1;
  50830. }
  50831. } else {
  50832. peg$currPos = s0;
  50833. s0 = peg$c1;
  50834. }
  50835. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50836. return s0;
  50837. }
  50838. function peg$parsefloat() {
  50839. var s0, s1, s2, s3, s4, s5;
  50840. var key = peg$currPos * 60 + 15,
  50841. cached = peg$cache[key];
  50842. if (cached) {
  50843. peg$currPos = cached.nextPos;
  50844. return cached.result;
  50845. }
  50846. s0 = peg$currPos;
  50847. if (input.charCodeAt(peg$currPos) === 45) {
  50848. s1 = peg$c42;
  50849. peg$currPos++;
  50850. } else {
  50851. s1 = peg$FAILED;
  50852. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  50853. }
  50854. if (s1 === peg$FAILED) {
  50855. s1 = peg$c41;
  50856. }
  50857. if (s1 !== peg$FAILED) {
  50858. s2 = [];
  50859. if (peg$c49.test(input.charAt(peg$currPos))) {
  50860. s3 = input.charAt(peg$currPos);
  50861. peg$currPos++;
  50862. } else {
  50863. s3 = peg$FAILED;
  50864. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50865. }
  50866. if (s3 !== peg$FAILED) {
  50867. while (s3 !== peg$FAILED) {
  50868. s2.push(s3);
  50869. if (peg$c49.test(input.charAt(peg$currPos))) {
  50870. s3 = input.charAt(peg$currPos);
  50871. peg$currPos++;
  50872. } else {
  50873. s3 = peg$FAILED;
  50874. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50875. }
  50876. }
  50877. } else {
  50878. s2 = peg$c1;
  50879. }
  50880. if (s2 !== peg$FAILED) {
  50881. if (input.charCodeAt(peg$currPos) === 46) {
  50882. s3 = peg$c51;
  50883. peg$currPos++;
  50884. } else {
  50885. s3 = peg$FAILED;
  50886. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  50887. }
  50888. if (s3 !== peg$FAILED) {
  50889. s4 = [];
  50890. if (peg$c49.test(input.charAt(peg$currPos))) {
  50891. s5 = input.charAt(peg$currPos);
  50892. peg$currPos++;
  50893. } else {
  50894. s5 = peg$FAILED;
  50895. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50896. }
  50897. if (s5 !== peg$FAILED) {
  50898. while (s5 !== peg$FAILED) {
  50899. s4.push(s5);
  50900. if (peg$c49.test(input.charAt(peg$currPos))) {
  50901. s5 = input.charAt(peg$currPos);
  50902. peg$currPos++;
  50903. } else {
  50904. s5 = peg$FAILED;
  50905. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50906. }
  50907. }
  50908. } else {
  50909. s4 = peg$c1;
  50910. }
  50911. if (s4 !== peg$FAILED) {
  50912. peg$reportedPos = s0;
  50913. s1 = peg$c53(s1, s2, s4);
  50914. s0 = s1;
  50915. } else {
  50916. peg$currPos = s0;
  50917. s0 = peg$c1;
  50918. }
  50919. } else {
  50920. peg$currPos = s0;
  50921. s0 = peg$c1;
  50922. }
  50923. } else {
  50924. peg$currPos = s0;
  50925. s0 = peg$c1;
  50926. }
  50927. } else {
  50928. peg$currPos = s0;
  50929. s0 = peg$c1;
  50930. }
  50931. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50932. return s0;
  50933. }
  50934. function peg$parseinteger() {
  50935. var s0, s1, s2, s3;
  50936. var key = peg$currPos * 60 + 16,
  50937. cached = peg$cache[key];
  50938. if (cached) {
  50939. peg$currPos = cached.nextPos;
  50940. return cached.result;
  50941. }
  50942. s0 = peg$currPos;
  50943. if (input.charCodeAt(peg$currPos) === 45) {
  50944. s1 = peg$c42;
  50945. peg$currPos++;
  50946. } else {
  50947. s1 = peg$FAILED;
  50948. if (peg$silentFails === 0) { peg$fail(peg$c43); }
  50949. }
  50950. if (s1 === peg$FAILED) {
  50951. s1 = peg$c41;
  50952. }
  50953. if (s1 !== peg$FAILED) {
  50954. s2 = [];
  50955. if (peg$c49.test(input.charAt(peg$currPos))) {
  50956. s3 = input.charAt(peg$currPos);
  50957. peg$currPos++;
  50958. } else {
  50959. s3 = peg$FAILED;
  50960. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50961. }
  50962. if (s3 !== peg$FAILED) {
  50963. while (s3 !== peg$FAILED) {
  50964. s2.push(s3);
  50965. if (peg$c49.test(input.charAt(peg$currPos))) {
  50966. s3 = input.charAt(peg$currPos);
  50967. peg$currPos++;
  50968. } else {
  50969. s3 = peg$FAILED;
  50970. if (peg$silentFails === 0) { peg$fail(peg$c50); }
  50971. }
  50972. }
  50973. } else {
  50974. s2 = peg$c1;
  50975. }
  50976. if (s2 !== peg$FAILED) {
  50977. peg$reportedPos = s0;
  50978. s1 = peg$c54(s1, s2);
  50979. s0 = s1;
  50980. } else {
  50981. peg$currPos = s0;
  50982. s0 = peg$c1;
  50983. }
  50984. } else {
  50985. peg$currPos = s0;
  50986. s0 = peg$c1;
  50987. }
  50988. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  50989. return s0;
  50990. }
  50991. function peg$parseliteralArray() {
  50992. var s0, s1, s2;
  50993. var key = peg$currPos * 60 + 17,
  50994. cached = peg$cache[key];
  50995. if (cached) {
  50996. peg$currPos = cached.nextPos;
  50997. return cached.result;
  50998. }
  50999. s0 = peg$currPos;
  51000. if (input.substr(peg$currPos, 2) === peg$c55) {
  51001. s1 = peg$c55;
  51002. peg$currPos += 2;
  51003. } else {
  51004. s1 = peg$FAILED;
  51005. if (peg$silentFails === 0) { peg$fail(peg$c56); }
  51006. }
  51007. if (s1 !== peg$FAILED) {
  51008. s2 = peg$parseliteralArrayRest();
  51009. if (s2 !== peg$FAILED) {
  51010. peg$reportedPos = s0;
  51011. s1 = peg$c34(s2);
  51012. s0 = s1;
  51013. } else {
  51014. peg$currPos = s0;
  51015. s0 = peg$c1;
  51016. }
  51017. } else {
  51018. peg$currPos = s0;
  51019. s0 = peg$c1;
  51020. }
  51021. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51022. return s0;
  51023. }
  51024. function peg$parsebareLiteralArray() {
  51025. var s0, s1, s2;
  51026. var key = peg$currPos * 60 + 18,
  51027. cached = peg$cache[key];
  51028. if (cached) {
  51029. peg$currPos = cached.nextPos;
  51030. return cached.result;
  51031. }
  51032. s0 = peg$currPos;
  51033. if (input.charCodeAt(peg$currPos) === 40) {
  51034. s1 = peg$c57;
  51035. peg$currPos++;
  51036. } else {
  51037. s1 = peg$FAILED;
  51038. if (peg$silentFails === 0) { peg$fail(peg$c58); }
  51039. }
  51040. if (s1 !== peg$FAILED) {
  51041. s2 = peg$parseliteralArrayRest();
  51042. if (s2 !== peg$FAILED) {
  51043. peg$reportedPos = s0;
  51044. s1 = peg$c34(s2);
  51045. s0 = s1;
  51046. } else {
  51047. peg$currPos = s0;
  51048. s0 = peg$c1;
  51049. }
  51050. } else {
  51051. peg$currPos = s0;
  51052. s0 = peg$c1;
  51053. }
  51054. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51055. return s0;
  51056. }
  51057. function peg$parseliteralArrayRest() {
  51058. var s0, s1, s2, s3, s4;
  51059. var key = peg$currPos * 60 + 19,
  51060. cached = peg$cache[key];
  51061. if (cached) {
  51062. peg$currPos = cached.nextPos;
  51063. return cached.result;
  51064. }
  51065. s0 = peg$currPos;
  51066. s1 = [];
  51067. s2 = peg$currPos;
  51068. s3 = peg$parsews();
  51069. if (s3 !== peg$FAILED) {
  51070. s4 = peg$parseparseTimeLiteral();
  51071. if (s4 === peg$FAILED) {
  51072. s4 = peg$parsebareLiteralArray();
  51073. if (s4 === peg$FAILED) {
  51074. s4 = peg$parsebareSymbol();
  51075. }
  51076. }
  51077. if (s4 !== peg$FAILED) {
  51078. peg$reportedPos = s2;
  51079. s3 = peg$c59(s4);
  51080. s2 = s3;
  51081. } else {
  51082. peg$currPos = s2;
  51083. s2 = peg$c1;
  51084. }
  51085. } else {
  51086. peg$currPos = s2;
  51087. s2 = peg$c1;
  51088. }
  51089. while (s2 !== peg$FAILED) {
  51090. s1.push(s2);
  51091. s2 = peg$currPos;
  51092. s3 = peg$parsews();
  51093. if (s3 !== peg$FAILED) {
  51094. s4 = peg$parseparseTimeLiteral();
  51095. if (s4 === peg$FAILED) {
  51096. s4 = peg$parsebareLiteralArray();
  51097. if (s4 === peg$FAILED) {
  51098. s4 = peg$parsebareSymbol();
  51099. }
  51100. }
  51101. if (s4 !== peg$FAILED) {
  51102. peg$reportedPos = s2;
  51103. s3 = peg$c59(s4);
  51104. s2 = s3;
  51105. } else {
  51106. peg$currPos = s2;
  51107. s2 = peg$c1;
  51108. }
  51109. } else {
  51110. peg$currPos = s2;
  51111. s2 = peg$c1;
  51112. }
  51113. }
  51114. if (s1 !== peg$FAILED) {
  51115. s2 = peg$parsews();
  51116. if (s2 !== peg$FAILED) {
  51117. if (input.charCodeAt(peg$currPos) === 41) {
  51118. s3 = peg$c60;
  51119. peg$currPos++;
  51120. } else {
  51121. s3 = peg$FAILED;
  51122. if (peg$silentFails === 0) { peg$fail(peg$c61); }
  51123. }
  51124. if (s3 !== peg$FAILED) {
  51125. peg$reportedPos = s0;
  51126. s1 = peg$c62(s1);
  51127. s0 = s1;
  51128. } else {
  51129. peg$currPos = s0;
  51130. s0 = peg$c1;
  51131. }
  51132. } else {
  51133. peg$currPos = s0;
  51134. s0 = peg$c1;
  51135. }
  51136. } else {
  51137. peg$currPos = s0;
  51138. s0 = peg$c1;
  51139. }
  51140. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51141. return s0;
  51142. }
  51143. function peg$parsedynamicArray() {
  51144. var s0, s1, s2, s3, s4, s5, s6;
  51145. var key = peg$currPos * 60 + 20,
  51146. cached = peg$cache[key];
  51147. if (cached) {
  51148. peg$currPos = cached.nextPos;
  51149. return cached.result;
  51150. }
  51151. s0 = peg$currPos;
  51152. if (input.charCodeAt(peg$currPos) === 123) {
  51153. s1 = peg$c63;
  51154. peg$currPos++;
  51155. } else {
  51156. s1 = peg$FAILED;
  51157. if (peg$silentFails === 0) { peg$fail(peg$c64); }
  51158. }
  51159. if (s1 !== peg$FAILED) {
  51160. s2 = peg$parsews();
  51161. if (s2 !== peg$FAILED) {
  51162. s3 = peg$parseexpressions();
  51163. if (s3 === peg$FAILED) {
  51164. s3 = peg$c41;
  51165. }
  51166. if (s3 !== peg$FAILED) {
  51167. s4 = peg$parsews();
  51168. if (s4 !== peg$FAILED) {
  51169. if (input.charCodeAt(peg$currPos) === 46) {
  51170. s5 = peg$c51;
  51171. peg$currPos++;
  51172. } else {
  51173. s5 = peg$FAILED;
  51174. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  51175. }
  51176. if (s5 === peg$FAILED) {
  51177. s5 = peg$c41;
  51178. }
  51179. if (s5 !== peg$FAILED) {
  51180. if (input.charCodeAt(peg$currPos) === 125) {
  51181. s6 = peg$c65;
  51182. peg$currPos++;
  51183. } else {
  51184. s6 = peg$FAILED;
  51185. if (peg$silentFails === 0) { peg$fail(peg$c66); }
  51186. }
  51187. if (s6 !== peg$FAILED) {
  51188. peg$reportedPos = s0;
  51189. s1 = peg$c67(s3);
  51190. s0 = s1;
  51191. } else {
  51192. peg$currPos = s0;
  51193. s0 = peg$c1;
  51194. }
  51195. } else {
  51196. peg$currPos = s0;
  51197. s0 = peg$c1;
  51198. }
  51199. } else {
  51200. peg$currPos = s0;
  51201. s0 = peg$c1;
  51202. }
  51203. } else {
  51204. peg$currPos = s0;
  51205. s0 = peg$c1;
  51206. }
  51207. } else {
  51208. peg$currPos = s0;
  51209. s0 = peg$c1;
  51210. }
  51211. } else {
  51212. peg$currPos = s0;
  51213. s0 = peg$c1;
  51214. }
  51215. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51216. return s0;
  51217. }
  51218. function peg$parsedynamicDictionary() {
  51219. var s0, s1, s2, s3, s4, s5;
  51220. var key = peg$currPos * 60 + 21,
  51221. cached = peg$cache[key];
  51222. if (cached) {
  51223. peg$currPos = cached.nextPos;
  51224. return cached.result;
  51225. }
  51226. s0 = peg$currPos;
  51227. if (input.substr(peg$currPos, 2) === peg$c68) {
  51228. s1 = peg$c68;
  51229. peg$currPos += 2;
  51230. } else {
  51231. s1 = peg$FAILED;
  51232. if (peg$silentFails === 0) { peg$fail(peg$c69); }
  51233. }
  51234. if (s1 !== peg$FAILED) {
  51235. s2 = peg$parsews();
  51236. if (s2 !== peg$FAILED) {
  51237. s3 = peg$parseassociations();
  51238. if (s3 === peg$FAILED) {
  51239. s3 = peg$c41;
  51240. }
  51241. if (s3 !== peg$FAILED) {
  51242. s4 = peg$parsews();
  51243. if (s4 !== peg$FAILED) {
  51244. if (input.charCodeAt(peg$currPos) === 125) {
  51245. s5 = peg$c65;
  51246. peg$currPos++;
  51247. } else {
  51248. s5 = peg$FAILED;
  51249. if (peg$silentFails === 0) { peg$fail(peg$c66); }
  51250. }
  51251. if (s5 !== peg$FAILED) {
  51252. peg$reportedPos = s0;
  51253. s1 = peg$c70(s3);
  51254. s0 = s1;
  51255. } else {
  51256. peg$currPos = s0;
  51257. s0 = peg$c1;
  51258. }
  51259. } else {
  51260. peg$currPos = s0;
  51261. s0 = peg$c1;
  51262. }
  51263. } else {
  51264. peg$currPos = s0;
  51265. s0 = peg$c1;
  51266. }
  51267. } else {
  51268. peg$currPos = s0;
  51269. s0 = peg$c1;
  51270. }
  51271. } else {
  51272. peg$currPos = s0;
  51273. s0 = peg$c1;
  51274. }
  51275. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51276. return s0;
  51277. }
  51278. function peg$parsepseudoVariable() {
  51279. var s0, s1, s2;
  51280. var key = peg$currPos * 60 + 22,
  51281. cached = peg$cache[key];
  51282. if (cached) {
  51283. peg$currPos = cached.nextPos;
  51284. return cached.result;
  51285. }
  51286. s0 = peg$currPos;
  51287. s1 = peg$currPos;
  51288. if (input.substr(peg$currPos, 4) === peg$c71) {
  51289. s2 = peg$c71;
  51290. peg$currPos += 4;
  51291. } else {
  51292. s2 = peg$FAILED;
  51293. if (peg$silentFails === 0) { peg$fail(peg$c72); }
  51294. }
  51295. if (s2 !== peg$FAILED) {
  51296. peg$reportedPos = s1;
  51297. s2 = peg$c73();
  51298. }
  51299. s1 = s2;
  51300. if (s1 === peg$FAILED) {
  51301. s1 = peg$currPos;
  51302. if (input.substr(peg$currPos, 5) === peg$c74) {
  51303. s2 = peg$c74;
  51304. peg$currPos += 5;
  51305. } else {
  51306. s2 = peg$FAILED;
  51307. if (peg$silentFails === 0) { peg$fail(peg$c75); }
  51308. }
  51309. if (s2 !== peg$FAILED) {
  51310. peg$reportedPos = s1;
  51311. s2 = peg$c76();
  51312. }
  51313. s1 = s2;
  51314. if (s1 === peg$FAILED) {
  51315. s1 = peg$currPos;
  51316. if (input.substr(peg$currPos, 3) === peg$c77) {
  51317. s2 = peg$c77;
  51318. peg$currPos += 3;
  51319. } else {
  51320. s2 = peg$FAILED;
  51321. if (peg$silentFails === 0) { peg$fail(peg$c78); }
  51322. }
  51323. if (s2 !== peg$FAILED) {
  51324. peg$reportedPos = s1;
  51325. s2 = peg$c79();
  51326. }
  51327. s1 = s2;
  51328. }
  51329. }
  51330. if (s1 !== peg$FAILED) {
  51331. peg$reportedPos = s0;
  51332. s1 = peg$c80(s1);
  51333. }
  51334. s0 = s1;
  51335. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51336. return s0;
  51337. }
  51338. function peg$parseparseTimeLiteral() {
  51339. var s0;
  51340. var key = peg$currPos * 60 + 23,
  51341. cached = peg$cache[key];
  51342. if (cached) {
  51343. peg$currPos = cached.nextPos;
  51344. return cached.result;
  51345. }
  51346. s0 = peg$parsepseudoVariable();
  51347. if (s0 === peg$FAILED) {
  51348. s0 = peg$parsenumber();
  51349. if (s0 === peg$FAILED) {
  51350. s0 = peg$parseliteralArray();
  51351. if (s0 === peg$FAILED) {
  51352. s0 = peg$parsestring();
  51353. if (s0 === peg$FAILED) {
  51354. s0 = peg$parsesymbol();
  51355. if (s0 === peg$FAILED) {
  51356. s0 = peg$parsecharacter();
  51357. }
  51358. }
  51359. }
  51360. }
  51361. }
  51362. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51363. return s0;
  51364. }
  51365. function peg$parseruntimeLiteral() {
  51366. var s0;
  51367. var key = peg$currPos * 60 + 24,
  51368. cached = peg$cache[key];
  51369. if (cached) {
  51370. peg$currPos = cached.nextPos;
  51371. return cached.result;
  51372. }
  51373. s0 = peg$parsedynamicDictionary();
  51374. if (s0 === peg$FAILED) {
  51375. s0 = peg$parsedynamicArray();
  51376. if (s0 === peg$FAILED) {
  51377. s0 = peg$parseblock();
  51378. }
  51379. }
  51380. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51381. return s0;
  51382. }
  51383. function peg$parseliteral() {
  51384. var s0;
  51385. var key = peg$currPos * 60 + 25,
  51386. cached = peg$cache[key];
  51387. if (cached) {
  51388. peg$currPos = cached.nextPos;
  51389. return cached.result;
  51390. }
  51391. s0 = peg$parseruntimeLiteral();
  51392. if (s0 === peg$FAILED) {
  51393. s0 = peg$parseparseTimeLiteral();
  51394. }
  51395. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51396. return s0;
  51397. }
  51398. function peg$parsevariable() {
  51399. var s0, s1;
  51400. var key = peg$currPos * 60 + 26,
  51401. cached = peg$cache[key];
  51402. if (cached) {
  51403. peg$currPos = cached.nextPos;
  51404. return cached.result;
  51405. }
  51406. s0 = peg$currPos;
  51407. s1 = peg$parseidentifier();
  51408. if (s1 !== peg$FAILED) {
  51409. peg$reportedPos = s0;
  51410. s1 = peg$c81(s1);
  51411. }
  51412. s0 = s1;
  51413. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51414. return s0;
  51415. }
  51416. function peg$parsekeywordPair() {
  51417. var s0, s1, s2, s3, s4;
  51418. var key = peg$currPos * 60 + 27,
  51419. cached = peg$cache[key];
  51420. if (cached) {
  51421. peg$currPos = cached.nextPos;
  51422. return cached.result;
  51423. }
  51424. s0 = peg$currPos;
  51425. s1 = peg$parsews();
  51426. if (s1 !== peg$FAILED) {
  51427. s2 = peg$parsekeyword();
  51428. if (s2 !== peg$FAILED) {
  51429. s3 = peg$parsews();
  51430. if (s3 !== peg$FAILED) {
  51431. s4 = peg$parsebinarySend();
  51432. if (s4 !== peg$FAILED) {
  51433. peg$reportedPos = s0;
  51434. s1 = peg$c82(s2, s4);
  51435. s0 = s1;
  51436. } else {
  51437. peg$currPos = s0;
  51438. s0 = peg$c1;
  51439. }
  51440. } else {
  51441. peg$currPos = s0;
  51442. s0 = peg$c1;
  51443. }
  51444. } else {
  51445. peg$currPos = s0;
  51446. s0 = peg$c1;
  51447. }
  51448. } else {
  51449. peg$currPos = s0;
  51450. s0 = peg$c1;
  51451. }
  51452. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51453. return s0;
  51454. }
  51455. function peg$parsebinarySelector() {
  51456. var s0, s1, s2;
  51457. var key = peg$currPos * 60 + 28,
  51458. cached = peg$cache[key];
  51459. if (cached) {
  51460. peg$currPos = cached.nextPos;
  51461. return cached.result;
  51462. }
  51463. s0 = peg$currPos;
  51464. s1 = [];
  51465. if (peg$c83.test(input.charAt(peg$currPos))) {
  51466. s2 = input.charAt(peg$currPos);
  51467. peg$currPos++;
  51468. } else {
  51469. s2 = peg$FAILED;
  51470. if (peg$silentFails === 0) { peg$fail(peg$c84); }
  51471. }
  51472. if (s2 !== peg$FAILED) {
  51473. while (s2 !== peg$FAILED) {
  51474. s1.push(s2);
  51475. if (peg$c83.test(input.charAt(peg$currPos))) {
  51476. s2 = input.charAt(peg$currPos);
  51477. peg$currPos++;
  51478. } else {
  51479. s2 = peg$FAILED;
  51480. if (peg$silentFails === 0) { peg$fail(peg$c84); }
  51481. }
  51482. }
  51483. } else {
  51484. s1 = peg$c1;
  51485. }
  51486. if (s1 !== peg$FAILED) {
  51487. peg$reportedPos = s0;
  51488. s1 = peg$c85(s1);
  51489. }
  51490. s0 = s1;
  51491. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51492. return s0;
  51493. }
  51494. function peg$parsekeywordPattern() {
  51495. var s0, s1, s2, s3, s4, s5, s6;
  51496. var key = peg$currPos * 60 + 29,
  51497. cached = peg$cache[key];
  51498. if (cached) {
  51499. peg$currPos = cached.nextPos;
  51500. return cached.result;
  51501. }
  51502. s0 = peg$currPos;
  51503. s1 = [];
  51504. s2 = peg$currPos;
  51505. s3 = peg$parsews();
  51506. if (s3 !== peg$FAILED) {
  51507. s4 = peg$parsekeyword();
  51508. if (s4 !== peg$FAILED) {
  51509. s5 = peg$parsews();
  51510. if (s5 !== peg$FAILED) {
  51511. s6 = peg$parseidentifier();
  51512. if (s6 !== peg$FAILED) {
  51513. peg$reportedPos = s2;
  51514. s3 = peg$c82(s4, s6);
  51515. s2 = s3;
  51516. } else {
  51517. peg$currPos = s2;
  51518. s2 = peg$c1;
  51519. }
  51520. } else {
  51521. peg$currPos = s2;
  51522. s2 = peg$c1;
  51523. }
  51524. } else {
  51525. peg$currPos = s2;
  51526. s2 = peg$c1;
  51527. }
  51528. } else {
  51529. peg$currPos = s2;
  51530. s2 = peg$c1;
  51531. }
  51532. if (s2 !== peg$FAILED) {
  51533. while (s2 !== peg$FAILED) {
  51534. s1.push(s2);
  51535. s2 = peg$currPos;
  51536. s3 = peg$parsews();
  51537. if (s3 !== peg$FAILED) {
  51538. s4 = peg$parsekeyword();
  51539. if (s4 !== peg$FAILED) {
  51540. s5 = peg$parsews();
  51541. if (s5 !== peg$FAILED) {
  51542. s6 = peg$parseidentifier();
  51543. if (s6 !== peg$FAILED) {
  51544. peg$reportedPos = s2;
  51545. s3 = peg$c82(s4, s6);
  51546. s2 = s3;
  51547. } else {
  51548. peg$currPos = s2;
  51549. s2 = peg$c1;
  51550. }
  51551. } else {
  51552. peg$currPos = s2;
  51553. s2 = peg$c1;
  51554. }
  51555. } else {
  51556. peg$currPos = s2;
  51557. s2 = peg$c1;
  51558. }
  51559. } else {
  51560. peg$currPos = s2;
  51561. s2 = peg$c1;
  51562. }
  51563. }
  51564. } else {
  51565. s1 = peg$c1;
  51566. }
  51567. if (s1 !== peg$FAILED) {
  51568. peg$reportedPos = s0;
  51569. s1 = peg$c86(s1);
  51570. }
  51571. s0 = s1;
  51572. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51573. return s0;
  51574. }
  51575. function peg$parsebinaryPattern() {
  51576. var s0, s1, s2, s3, s4;
  51577. var key = peg$currPos * 60 + 30,
  51578. cached = peg$cache[key];
  51579. if (cached) {
  51580. peg$currPos = cached.nextPos;
  51581. return cached.result;
  51582. }
  51583. s0 = peg$currPos;
  51584. s1 = peg$parsews();
  51585. if (s1 !== peg$FAILED) {
  51586. s2 = peg$parsebinarySelector();
  51587. if (s2 !== peg$FAILED) {
  51588. s3 = peg$parsews();
  51589. if (s3 !== peg$FAILED) {
  51590. s4 = peg$parseidentifier();
  51591. if (s4 !== peg$FAILED) {
  51592. peg$reportedPos = s0;
  51593. s1 = peg$c87(s2, s4);
  51594. s0 = s1;
  51595. } else {
  51596. peg$currPos = s0;
  51597. s0 = peg$c1;
  51598. }
  51599. } else {
  51600. peg$currPos = s0;
  51601. s0 = peg$c1;
  51602. }
  51603. } else {
  51604. peg$currPos = s0;
  51605. s0 = peg$c1;
  51606. }
  51607. } else {
  51608. peg$currPos = s0;
  51609. s0 = peg$c1;
  51610. }
  51611. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51612. return s0;
  51613. }
  51614. function peg$parseunaryPattern() {
  51615. var s0, s1, s2;
  51616. var key = peg$currPos * 60 + 31,
  51617. cached = peg$cache[key];
  51618. if (cached) {
  51619. peg$currPos = cached.nextPos;
  51620. return cached.result;
  51621. }
  51622. s0 = peg$currPos;
  51623. s1 = peg$parsews();
  51624. if (s1 !== peg$FAILED) {
  51625. s2 = peg$parseidentifier();
  51626. if (s2 !== peg$FAILED) {
  51627. peg$reportedPos = s0;
  51628. s1 = peg$c88(s2);
  51629. s0 = s1;
  51630. } else {
  51631. peg$currPos = s0;
  51632. s0 = peg$c1;
  51633. }
  51634. } else {
  51635. peg$currPos = s0;
  51636. s0 = peg$c1;
  51637. }
  51638. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51639. return s0;
  51640. }
  51641. function peg$parseexpression() {
  51642. var s0;
  51643. var key = peg$currPos * 60 + 32,
  51644. cached = peg$cache[key];
  51645. if (cached) {
  51646. peg$currPos = cached.nextPos;
  51647. return cached.result;
  51648. }
  51649. s0 = peg$parseassignment();
  51650. if (s0 === peg$FAILED) {
  51651. s0 = peg$parsecascade();
  51652. if (s0 === peg$FAILED) {
  51653. s0 = peg$parsekeywordSend();
  51654. if (s0 === peg$FAILED) {
  51655. s0 = peg$parsebinarySend();
  51656. }
  51657. }
  51658. }
  51659. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51660. return s0;
  51661. }
  51662. function peg$parseexpressionList() {
  51663. var s0, s1, s2, s3, s4;
  51664. var key = peg$currPos * 60 + 33,
  51665. cached = peg$cache[key];
  51666. if (cached) {
  51667. peg$currPos = cached.nextPos;
  51668. return cached.result;
  51669. }
  51670. s0 = peg$currPos;
  51671. s1 = peg$parsews();
  51672. if (s1 !== peg$FAILED) {
  51673. if (input.charCodeAt(peg$currPos) === 46) {
  51674. s2 = peg$c51;
  51675. peg$currPos++;
  51676. } else {
  51677. s2 = peg$FAILED;
  51678. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  51679. }
  51680. if (s2 !== peg$FAILED) {
  51681. s3 = peg$parsews();
  51682. if (s3 !== peg$FAILED) {
  51683. s4 = peg$parseexpression();
  51684. if (s4 !== peg$FAILED) {
  51685. peg$reportedPos = s0;
  51686. s1 = peg$c89(s4);
  51687. s0 = s1;
  51688. } else {
  51689. peg$currPos = s0;
  51690. s0 = peg$c1;
  51691. }
  51692. } else {
  51693. peg$currPos = s0;
  51694. s0 = peg$c1;
  51695. }
  51696. } else {
  51697. peg$currPos = s0;
  51698. s0 = peg$c1;
  51699. }
  51700. } else {
  51701. peg$currPos = s0;
  51702. s0 = peg$c1;
  51703. }
  51704. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51705. return s0;
  51706. }
  51707. function peg$parseexpressions() {
  51708. var s0, s1, s2, s3;
  51709. var key = peg$currPos * 60 + 34,
  51710. cached = peg$cache[key];
  51711. if (cached) {
  51712. peg$currPos = cached.nextPos;
  51713. return cached.result;
  51714. }
  51715. s0 = peg$currPos;
  51716. s1 = peg$parseexpression();
  51717. if (s1 !== peg$FAILED) {
  51718. s2 = [];
  51719. s3 = peg$parseexpressionList();
  51720. while (s3 !== peg$FAILED) {
  51721. s2.push(s3);
  51722. s3 = peg$parseexpressionList();
  51723. }
  51724. if (s2 !== peg$FAILED) {
  51725. peg$reportedPos = s0;
  51726. s1 = peg$c90(s1, s2);
  51727. s0 = s1;
  51728. } else {
  51729. peg$currPos = s0;
  51730. s0 = peg$c1;
  51731. }
  51732. } else {
  51733. peg$currPos = s0;
  51734. s0 = peg$c1;
  51735. }
  51736. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51737. return s0;
  51738. }
  51739. function peg$parseassignment() {
  51740. var s0, s1, s2, s3, s4, s5;
  51741. var key = peg$currPos * 60 + 35,
  51742. cached = peg$cache[key];
  51743. if (cached) {
  51744. peg$currPos = cached.nextPos;
  51745. return cached.result;
  51746. }
  51747. s0 = peg$currPos;
  51748. s1 = peg$parsevariable();
  51749. if (s1 !== peg$FAILED) {
  51750. s2 = peg$parsews();
  51751. if (s2 !== peg$FAILED) {
  51752. if (input.substr(peg$currPos, 2) === peg$c91) {
  51753. s3 = peg$c91;
  51754. peg$currPos += 2;
  51755. } else {
  51756. s3 = peg$FAILED;
  51757. if (peg$silentFails === 0) { peg$fail(peg$c92); }
  51758. }
  51759. if (s3 !== peg$FAILED) {
  51760. s4 = peg$parsews();
  51761. if (s4 !== peg$FAILED) {
  51762. s5 = peg$parseexpression();
  51763. if (s5 !== peg$FAILED) {
  51764. peg$reportedPos = s0;
  51765. s1 = peg$c93(s1, s5);
  51766. s0 = s1;
  51767. } else {
  51768. peg$currPos = s0;
  51769. s0 = peg$c1;
  51770. }
  51771. } else {
  51772. peg$currPos = s0;
  51773. s0 = peg$c1;
  51774. }
  51775. } else {
  51776. peg$currPos = s0;
  51777. s0 = peg$c1;
  51778. }
  51779. } else {
  51780. peg$currPos = s0;
  51781. s0 = peg$c1;
  51782. }
  51783. } else {
  51784. peg$currPos = s0;
  51785. s0 = peg$c1;
  51786. }
  51787. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51788. return s0;
  51789. }
  51790. function peg$parseret() {
  51791. var s0, s1, s2, s3, s4, s5;
  51792. var key = peg$currPos * 60 + 36,
  51793. cached = peg$cache[key];
  51794. if (cached) {
  51795. peg$currPos = cached.nextPos;
  51796. return cached.result;
  51797. }
  51798. s0 = peg$currPos;
  51799. if (input.charCodeAt(peg$currPos) === 94) {
  51800. s1 = peg$c94;
  51801. peg$currPos++;
  51802. } else {
  51803. s1 = peg$FAILED;
  51804. if (peg$silentFails === 0) { peg$fail(peg$c95); }
  51805. }
  51806. if (s1 !== peg$FAILED) {
  51807. s2 = peg$parsews();
  51808. if (s2 !== peg$FAILED) {
  51809. s3 = peg$parseexpression();
  51810. if (s3 !== peg$FAILED) {
  51811. s4 = peg$parsews();
  51812. if (s4 !== peg$FAILED) {
  51813. if (input.charCodeAt(peg$currPos) === 46) {
  51814. s5 = peg$c51;
  51815. peg$currPos++;
  51816. } else {
  51817. s5 = peg$FAILED;
  51818. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  51819. }
  51820. if (s5 === peg$FAILED) {
  51821. s5 = peg$c41;
  51822. }
  51823. if (s5 !== peg$FAILED) {
  51824. peg$reportedPos = s0;
  51825. s1 = peg$c96(s3);
  51826. s0 = s1;
  51827. } else {
  51828. peg$currPos = s0;
  51829. s0 = peg$c1;
  51830. }
  51831. } else {
  51832. peg$currPos = s0;
  51833. s0 = peg$c1;
  51834. }
  51835. } else {
  51836. peg$currPos = s0;
  51837. s0 = peg$c1;
  51838. }
  51839. } else {
  51840. peg$currPos = s0;
  51841. s0 = peg$c1;
  51842. }
  51843. } else {
  51844. peg$currPos = s0;
  51845. s0 = peg$c1;
  51846. }
  51847. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51848. return s0;
  51849. }
  51850. function peg$parsetemps() {
  51851. var s0, s1, s2, s3, s4, s5;
  51852. var key = peg$currPos * 60 + 37,
  51853. cached = peg$cache[key];
  51854. if (cached) {
  51855. peg$currPos = cached.nextPos;
  51856. return cached.result;
  51857. }
  51858. s0 = peg$currPos;
  51859. if (input.charCodeAt(peg$currPos) === 124) {
  51860. s1 = peg$c97;
  51861. peg$currPos++;
  51862. } else {
  51863. s1 = peg$FAILED;
  51864. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  51865. }
  51866. if (s1 !== peg$FAILED) {
  51867. s2 = [];
  51868. s3 = peg$currPos;
  51869. s4 = peg$parsews();
  51870. if (s4 !== peg$FAILED) {
  51871. s5 = peg$parseidentifier();
  51872. if (s5 !== peg$FAILED) {
  51873. peg$reportedPos = s3;
  51874. s4 = peg$c99(s5);
  51875. s3 = s4;
  51876. } else {
  51877. peg$currPos = s3;
  51878. s3 = peg$c1;
  51879. }
  51880. } else {
  51881. peg$currPos = s3;
  51882. s3 = peg$c1;
  51883. }
  51884. while (s3 !== peg$FAILED) {
  51885. s2.push(s3);
  51886. s3 = peg$currPos;
  51887. s4 = peg$parsews();
  51888. if (s4 !== peg$FAILED) {
  51889. s5 = peg$parseidentifier();
  51890. if (s5 !== peg$FAILED) {
  51891. peg$reportedPos = s3;
  51892. s4 = peg$c99(s5);
  51893. s3 = s4;
  51894. } else {
  51895. peg$currPos = s3;
  51896. s3 = peg$c1;
  51897. }
  51898. } else {
  51899. peg$currPos = s3;
  51900. s3 = peg$c1;
  51901. }
  51902. }
  51903. if (s2 !== peg$FAILED) {
  51904. s3 = peg$parsews();
  51905. if (s3 !== peg$FAILED) {
  51906. if (input.charCodeAt(peg$currPos) === 124) {
  51907. s4 = peg$c97;
  51908. peg$currPos++;
  51909. } else {
  51910. s4 = peg$FAILED;
  51911. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  51912. }
  51913. if (s4 !== peg$FAILED) {
  51914. peg$reportedPos = s0;
  51915. s1 = peg$c100(s2);
  51916. s0 = s1;
  51917. } else {
  51918. peg$currPos = s0;
  51919. s0 = peg$c1;
  51920. }
  51921. } else {
  51922. peg$currPos = s0;
  51923. s0 = peg$c1;
  51924. }
  51925. } else {
  51926. peg$currPos = s0;
  51927. s0 = peg$c1;
  51928. }
  51929. } else {
  51930. peg$currPos = s0;
  51931. s0 = peg$c1;
  51932. }
  51933. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  51934. return s0;
  51935. }
  51936. function peg$parseblockParamList() {
  51937. var s0, s1, s2, s3, s4, s5, s6;
  51938. var key = peg$currPos * 60 + 38,
  51939. cached = peg$cache[key];
  51940. if (cached) {
  51941. peg$currPos = cached.nextPos;
  51942. return cached.result;
  51943. }
  51944. s0 = peg$currPos;
  51945. s1 = [];
  51946. s2 = peg$currPos;
  51947. s3 = peg$parsews();
  51948. if (s3 !== peg$FAILED) {
  51949. if (input.charCodeAt(peg$currPos) === 58) {
  51950. s4 = peg$c13;
  51951. peg$currPos++;
  51952. } else {
  51953. s4 = peg$FAILED;
  51954. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  51955. }
  51956. if (s4 !== peg$FAILED) {
  51957. s5 = peg$parsews();
  51958. if (s5 !== peg$FAILED) {
  51959. s6 = peg$parseidentifier();
  51960. if (s6 !== peg$FAILED) {
  51961. peg$reportedPos = s2;
  51962. s3 = peg$c101(s6);
  51963. s2 = s3;
  51964. } else {
  51965. peg$currPos = s2;
  51966. s2 = peg$c1;
  51967. }
  51968. } else {
  51969. peg$currPos = s2;
  51970. s2 = peg$c1;
  51971. }
  51972. } else {
  51973. peg$currPos = s2;
  51974. s2 = peg$c1;
  51975. }
  51976. } else {
  51977. peg$currPos = s2;
  51978. s2 = peg$c1;
  51979. }
  51980. if (s2 !== peg$FAILED) {
  51981. while (s2 !== peg$FAILED) {
  51982. s1.push(s2);
  51983. s2 = peg$currPos;
  51984. s3 = peg$parsews();
  51985. if (s3 !== peg$FAILED) {
  51986. if (input.charCodeAt(peg$currPos) === 58) {
  51987. s4 = peg$c13;
  51988. peg$currPos++;
  51989. } else {
  51990. s4 = peg$FAILED;
  51991. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  51992. }
  51993. if (s4 !== peg$FAILED) {
  51994. s5 = peg$parsews();
  51995. if (s5 !== peg$FAILED) {
  51996. s6 = peg$parseidentifier();
  51997. if (s6 !== peg$FAILED) {
  51998. peg$reportedPos = s2;
  51999. s3 = peg$c101(s6);
  52000. s2 = s3;
  52001. } else {
  52002. peg$currPos = s2;
  52003. s2 = peg$c1;
  52004. }
  52005. } else {
  52006. peg$currPos = s2;
  52007. s2 = peg$c1;
  52008. }
  52009. } else {
  52010. peg$currPos = s2;
  52011. s2 = peg$c1;
  52012. }
  52013. } else {
  52014. peg$currPos = s2;
  52015. s2 = peg$c1;
  52016. }
  52017. }
  52018. } else {
  52019. s1 = peg$c1;
  52020. }
  52021. if (s1 !== peg$FAILED) {
  52022. s2 = peg$parsews();
  52023. if (s2 !== peg$FAILED) {
  52024. if (input.charCodeAt(peg$currPos) === 124) {
  52025. s3 = peg$c97;
  52026. peg$currPos++;
  52027. } else {
  52028. s3 = peg$FAILED;
  52029. if (peg$silentFails === 0) { peg$fail(peg$c98); }
  52030. }
  52031. if (s3 !== peg$FAILED) {
  52032. peg$reportedPos = s0;
  52033. s1 = peg$c102(s1);
  52034. s0 = s1;
  52035. } else {
  52036. peg$currPos = s0;
  52037. s0 = peg$c1;
  52038. }
  52039. } else {
  52040. peg$currPos = s0;
  52041. s0 = peg$c1;
  52042. }
  52043. } else {
  52044. peg$currPos = s0;
  52045. s0 = peg$c1;
  52046. }
  52047. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52048. return s0;
  52049. }
  52050. function peg$parsesubexpression() {
  52051. var s0, s1, s2, s3, s4, s5;
  52052. var key = peg$currPos * 60 + 39,
  52053. cached = peg$cache[key];
  52054. if (cached) {
  52055. peg$currPos = cached.nextPos;
  52056. return cached.result;
  52057. }
  52058. s0 = peg$currPos;
  52059. if (input.charCodeAt(peg$currPos) === 40) {
  52060. s1 = peg$c57;
  52061. peg$currPos++;
  52062. } else {
  52063. s1 = peg$FAILED;
  52064. if (peg$silentFails === 0) { peg$fail(peg$c58); }
  52065. }
  52066. if (s1 !== peg$FAILED) {
  52067. s2 = peg$parsews();
  52068. if (s2 !== peg$FAILED) {
  52069. s3 = peg$parseexpression();
  52070. if (s3 !== peg$FAILED) {
  52071. s4 = peg$parsews();
  52072. if (s4 !== peg$FAILED) {
  52073. if (input.charCodeAt(peg$currPos) === 41) {
  52074. s5 = peg$c60;
  52075. peg$currPos++;
  52076. } else {
  52077. s5 = peg$FAILED;
  52078. if (peg$silentFails === 0) { peg$fail(peg$c61); }
  52079. }
  52080. if (s5 !== peg$FAILED) {
  52081. peg$reportedPos = s0;
  52082. s1 = peg$c89(s3);
  52083. s0 = s1;
  52084. } else {
  52085. peg$currPos = s0;
  52086. s0 = peg$c1;
  52087. }
  52088. } else {
  52089. peg$currPos = s0;
  52090. s0 = peg$c1;
  52091. }
  52092. } else {
  52093. peg$currPos = s0;
  52094. s0 = peg$c1;
  52095. }
  52096. } else {
  52097. peg$currPos = s0;
  52098. s0 = peg$c1;
  52099. }
  52100. } else {
  52101. peg$currPos = s0;
  52102. s0 = peg$c1;
  52103. }
  52104. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52105. return s0;
  52106. }
  52107. function peg$parsestatements() {
  52108. var s0, s1, s2, s3, s4, s5, s6, s7;
  52109. var key = peg$currPos * 60 + 40,
  52110. cached = peg$cache[key];
  52111. if (cached) {
  52112. peg$currPos = cached.nextPos;
  52113. return cached.result;
  52114. }
  52115. s0 = peg$currPos;
  52116. s1 = peg$parseret();
  52117. if (s1 !== peg$FAILED) {
  52118. s2 = [];
  52119. if (input.charCodeAt(peg$currPos) === 46) {
  52120. s3 = peg$c51;
  52121. peg$currPos++;
  52122. } else {
  52123. s3 = peg$FAILED;
  52124. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52125. }
  52126. while (s3 !== peg$FAILED) {
  52127. s2.push(s3);
  52128. if (input.charCodeAt(peg$currPos) === 46) {
  52129. s3 = peg$c51;
  52130. peg$currPos++;
  52131. } else {
  52132. s3 = peg$FAILED;
  52133. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52134. }
  52135. }
  52136. if (s2 !== peg$FAILED) {
  52137. peg$reportedPos = s0;
  52138. s1 = peg$c103(s1);
  52139. s0 = s1;
  52140. } else {
  52141. peg$currPos = s0;
  52142. s0 = peg$c1;
  52143. }
  52144. } else {
  52145. peg$currPos = s0;
  52146. s0 = peg$c1;
  52147. }
  52148. if (s0 === peg$FAILED) {
  52149. s0 = peg$currPos;
  52150. s1 = peg$parseexpressions();
  52151. if (s1 !== peg$FAILED) {
  52152. s2 = peg$parsews();
  52153. if (s2 !== peg$FAILED) {
  52154. s3 = [];
  52155. if (input.charCodeAt(peg$currPos) === 46) {
  52156. s4 = peg$c51;
  52157. peg$currPos++;
  52158. } else {
  52159. s4 = peg$FAILED;
  52160. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52161. }
  52162. if (s4 !== peg$FAILED) {
  52163. while (s4 !== peg$FAILED) {
  52164. s3.push(s4);
  52165. if (input.charCodeAt(peg$currPos) === 46) {
  52166. s4 = peg$c51;
  52167. peg$currPos++;
  52168. } else {
  52169. s4 = peg$FAILED;
  52170. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52171. }
  52172. }
  52173. } else {
  52174. s3 = peg$c1;
  52175. }
  52176. if (s3 !== peg$FAILED) {
  52177. s4 = peg$parsews();
  52178. if (s4 !== peg$FAILED) {
  52179. s5 = peg$parseret();
  52180. if (s5 !== peg$FAILED) {
  52181. s6 = [];
  52182. if (input.charCodeAt(peg$currPos) === 46) {
  52183. s7 = peg$c51;
  52184. peg$currPos++;
  52185. } else {
  52186. s7 = peg$FAILED;
  52187. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52188. }
  52189. while (s7 !== peg$FAILED) {
  52190. s6.push(s7);
  52191. if (input.charCodeAt(peg$currPos) === 46) {
  52192. s7 = peg$c51;
  52193. peg$currPos++;
  52194. } else {
  52195. s7 = peg$FAILED;
  52196. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52197. }
  52198. }
  52199. if (s6 !== peg$FAILED) {
  52200. peg$reportedPos = s0;
  52201. s1 = peg$c104(s1, s5);
  52202. s0 = s1;
  52203. } else {
  52204. peg$currPos = s0;
  52205. s0 = peg$c1;
  52206. }
  52207. } else {
  52208. peg$currPos = s0;
  52209. s0 = peg$c1;
  52210. }
  52211. } else {
  52212. peg$currPos = s0;
  52213. s0 = peg$c1;
  52214. }
  52215. } else {
  52216. peg$currPos = s0;
  52217. s0 = peg$c1;
  52218. }
  52219. } else {
  52220. peg$currPos = s0;
  52221. s0 = peg$c1;
  52222. }
  52223. } else {
  52224. peg$currPos = s0;
  52225. s0 = peg$c1;
  52226. }
  52227. if (s0 === peg$FAILED) {
  52228. s0 = peg$currPos;
  52229. s1 = peg$parseexpressions();
  52230. if (s1 === peg$FAILED) {
  52231. s1 = peg$c41;
  52232. }
  52233. if (s1 !== peg$FAILED) {
  52234. s2 = [];
  52235. if (input.charCodeAt(peg$currPos) === 46) {
  52236. s3 = peg$c51;
  52237. peg$currPos++;
  52238. } else {
  52239. s3 = peg$FAILED;
  52240. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52241. }
  52242. while (s3 !== peg$FAILED) {
  52243. s2.push(s3);
  52244. if (input.charCodeAt(peg$currPos) === 46) {
  52245. s3 = peg$c51;
  52246. peg$currPos++;
  52247. } else {
  52248. s3 = peg$FAILED;
  52249. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  52250. }
  52251. }
  52252. if (s2 !== peg$FAILED) {
  52253. peg$reportedPos = s0;
  52254. s1 = peg$c105(s1);
  52255. s0 = s1;
  52256. } else {
  52257. peg$currPos = s0;
  52258. s0 = peg$c1;
  52259. }
  52260. } else {
  52261. peg$currPos = s0;
  52262. s0 = peg$c1;
  52263. }
  52264. }
  52265. }
  52266. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52267. return s0;
  52268. }
  52269. function peg$parsesequence() {
  52270. var s0;
  52271. var key = peg$currPos * 60 + 41,
  52272. cached = peg$cache[key];
  52273. if (cached) {
  52274. peg$currPos = cached.nextPos;
  52275. return cached.result;
  52276. }
  52277. s0 = peg$parsejsStatement();
  52278. if (s0 === peg$FAILED) {
  52279. s0 = peg$parsestSequence();
  52280. }
  52281. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52282. return s0;
  52283. }
  52284. function peg$parsestSequence() {
  52285. var s0, s1, s2, s3, s4;
  52286. var key = peg$currPos * 60 + 42,
  52287. cached = peg$cache[key];
  52288. if (cached) {
  52289. peg$currPos = cached.nextPos;
  52290. return cached.result;
  52291. }
  52292. s0 = peg$currPos;
  52293. s1 = peg$parsetemps();
  52294. if (s1 === peg$FAILED) {
  52295. s1 = peg$c41;
  52296. }
  52297. if (s1 !== peg$FAILED) {
  52298. s2 = peg$parsews();
  52299. if (s2 !== peg$FAILED) {
  52300. s3 = peg$parsestatements();
  52301. if (s3 === peg$FAILED) {
  52302. s3 = peg$c41;
  52303. }
  52304. if (s3 !== peg$FAILED) {
  52305. s4 = peg$parsews();
  52306. if (s4 !== peg$FAILED) {
  52307. peg$reportedPos = s0;
  52308. s1 = peg$c106(s1, s3);
  52309. s0 = s1;
  52310. } else {
  52311. peg$currPos = s0;
  52312. s0 = peg$c1;
  52313. }
  52314. } else {
  52315. peg$currPos = s0;
  52316. s0 = peg$c1;
  52317. }
  52318. } else {
  52319. peg$currPos = s0;
  52320. s0 = peg$c1;
  52321. }
  52322. } else {
  52323. peg$currPos = s0;
  52324. s0 = peg$c1;
  52325. }
  52326. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52327. return s0;
  52328. }
  52329. function peg$parseblock() {
  52330. var s0, s1, s2, s3, s4, s5, s6;
  52331. var key = peg$currPos * 60 + 43,
  52332. cached = peg$cache[key];
  52333. if (cached) {
  52334. peg$currPos = cached.nextPos;
  52335. return cached.result;
  52336. }
  52337. s0 = peg$currPos;
  52338. if (input.charCodeAt(peg$currPos) === 91) {
  52339. s1 = peg$c107;
  52340. peg$currPos++;
  52341. } else {
  52342. s1 = peg$FAILED;
  52343. if (peg$silentFails === 0) { peg$fail(peg$c108); }
  52344. }
  52345. if (s1 !== peg$FAILED) {
  52346. s2 = peg$parseblockParamList();
  52347. if (s2 === peg$FAILED) {
  52348. s2 = peg$c41;
  52349. }
  52350. if (s2 !== peg$FAILED) {
  52351. s3 = peg$parsews();
  52352. if (s3 !== peg$FAILED) {
  52353. s4 = peg$parsesequence();
  52354. if (s4 === peg$FAILED) {
  52355. s4 = peg$c41;
  52356. }
  52357. if (s4 !== peg$FAILED) {
  52358. s5 = peg$parsews();
  52359. if (s5 !== peg$FAILED) {
  52360. if (input.charCodeAt(peg$currPos) === 93) {
  52361. s6 = peg$c109;
  52362. peg$currPos++;
  52363. } else {
  52364. s6 = peg$FAILED;
  52365. if (peg$silentFails === 0) { peg$fail(peg$c110); }
  52366. }
  52367. if (s6 !== peg$FAILED) {
  52368. peg$reportedPos = s0;
  52369. s1 = peg$c111(s2, s4);
  52370. s0 = s1;
  52371. } else {
  52372. peg$currPos = s0;
  52373. s0 = peg$c1;
  52374. }
  52375. } else {
  52376. peg$currPos = s0;
  52377. s0 = peg$c1;
  52378. }
  52379. } else {
  52380. peg$currPos = s0;
  52381. s0 = peg$c1;
  52382. }
  52383. } else {
  52384. peg$currPos = s0;
  52385. s0 = peg$c1;
  52386. }
  52387. } else {
  52388. peg$currPos = s0;
  52389. s0 = peg$c1;
  52390. }
  52391. } else {
  52392. peg$currPos = s0;
  52393. s0 = peg$c1;
  52394. }
  52395. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52396. return s0;
  52397. }
  52398. function peg$parseoperand() {
  52399. var s0;
  52400. var key = peg$currPos * 60 + 44,
  52401. cached = peg$cache[key];
  52402. if (cached) {
  52403. peg$currPos = cached.nextPos;
  52404. return cached.result;
  52405. }
  52406. s0 = peg$parseliteral();
  52407. if (s0 === peg$FAILED) {
  52408. s0 = peg$parsevariable();
  52409. if (s0 === peg$FAILED) {
  52410. s0 = peg$parsesubexpression();
  52411. }
  52412. }
  52413. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52414. return s0;
  52415. }
  52416. function peg$parseunaryMessage() {
  52417. var s0, s1, s2, s3, s4;
  52418. var key = peg$currPos * 60 + 45,
  52419. cached = peg$cache[key];
  52420. if (cached) {
  52421. peg$currPos = cached.nextPos;
  52422. return cached.result;
  52423. }
  52424. s0 = peg$currPos;
  52425. s1 = peg$parsews();
  52426. if (s1 !== peg$FAILED) {
  52427. s2 = peg$parseidentifier();
  52428. if (s2 !== peg$FAILED) {
  52429. s3 = peg$currPos;
  52430. peg$silentFails++;
  52431. if (input.charCodeAt(peg$currPos) === 58) {
  52432. s4 = peg$c13;
  52433. peg$currPos++;
  52434. } else {
  52435. s4 = peg$FAILED;
  52436. if (peg$silentFails === 0) { peg$fail(peg$c14); }
  52437. }
  52438. peg$silentFails--;
  52439. if (s4 === peg$FAILED) {
  52440. s3 = peg$c112;
  52441. } else {
  52442. peg$currPos = s3;
  52443. s3 = peg$c1;
  52444. }
  52445. if (s3 !== peg$FAILED) {
  52446. peg$reportedPos = s0;
  52447. s1 = peg$c113(s2);
  52448. s0 = s1;
  52449. } else {
  52450. peg$currPos = s0;
  52451. s0 = peg$c1;
  52452. }
  52453. } else {
  52454. peg$currPos = s0;
  52455. s0 = peg$c1;
  52456. }
  52457. } else {
  52458. peg$currPos = s0;
  52459. s0 = peg$c1;
  52460. }
  52461. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52462. return s0;
  52463. }
  52464. function peg$parseunaryTail() {
  52465. var s0, s1, s2, s3, s4;
  52466. var key = peg$currPos * 60 + 46,
  52467. cached = peg$cache[key];
  52468. if (cached) {
  52469. peg$currPos = cached.nextPos;
  52470. return cached.result;
  52471. }
  52472. s0 = peg$currPos;
  52473. s1 = peg$parseunaryMessage();
  52474. if (s1 !== peg$FAILED) {
  52475. s2 = peg$parsews();
  52476. if (s2 !== peg$FAILED) {
  52477. s3 = peg$parseunaryTail();
  52478. if (s3 === peg$FAILED) {
  52479. s3 = peg$c41;
  52480. }
  52481. if (s3 !== peg$FAILED) {
  52482. s4 = peg$parsews();
  52483. if (s4 !== peg$FAILED) {
  52484. peg$reportedPos = s0;
  52485. s1 = peg$c114(s1, s3);
  52486. s0 = s1;
  52487. } else {
  52488. peg$currPos = s0;
  52489. s0 = peg$c1;
  52490. }
  52491. } else {
  52492. peg$currPos = s0;
  52493. s0 = peg$c1;
  52494. }
  52495. } else {
  52496. peg$currPos = s0;
  52497. s0 = peg$c1;
  52498. }
  52499. } else {
  52500. peg$currPos = s0;
  52501. s0 = peg$c1;
  52502. }
  52503. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52504. return s0;
  52505. }
  52506. function peg$parseunarySend() {
  52507. var s0, s1, s2, s3;
  52508. var key = peg$currPos * 60 + 47,
  52509. cached = peg$cache[key];
  52510. if (cached) {
  52511. peg$currPos = cached.nextPos;
  52512. return cached.result;
  52513. }
  52514. s0 = peg$currPos;
  52515. s1 = peg$parseoperand();
  52516. if (s1 !== peg$FAILED) {
  52517. s2 = peg$parsews();
  52518. if (s2 !== peg$FAILED) {
  52519. s3 = peg$parseunaryTail();
  52520. if (s3 === peg$FAILED) {
  52521. s3 = peg$c41;
  52522. }
  52523. if (s3 !== peg$FAILED) {
  52524. peg$reportedPos = s0;
  52525. s1 = peg$c115(s1, s3);
  52526. s0 = s1;
  52527. } else {
  52528. peg$currPos = s0;
  52529. s0 = peg$c1;
  52530. }
  52531. } else {
  52532. peg$currPos = s0;
  52533. s0 = peg$c1;
  52534. }
  52535. } else {
  52536. peg$currPos = s0;
  52537. s0 = peg$c1;
  52538. }
  52539. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52540. return s0;
  52541. }
  52542. function peg$parsebinaryMessage() {
  52543. var s0, s1, s2, s3, s4;
  52544. var key = peg$currPos * 60 + 48,
  52545. cached = peg$cache[key];
  52546. if (cached) {
  52547. peg$currPos = cached.nextPos;
  52548. return cached.result;
  52549. }
  52550. s0 = peg$currPos;
  52551. s1 = peg$parsews();
  52552. if (s1 !== peg$FAILED) {
  52553. s2 = peg$parsebinarySelector();
  52554. if (s2 !== peg$FAILED) {
  52555. s3 = peg$parsews();
  52556. if (s3 !== peg$FAILED) {
  52557. s4 = peg$parseunarySend();
  52558. if (s4 === peg$FAILED) {
  52559. s4 = peg$parseoperand();
  52560. }
  52561. if (s4 !== peg$FAILED) {
  52562. peg$reportedPos = s0;
  52563. s1 = peg$c116(s2, s4);
  52564. s0 = s1;
  52565. } else {
  52566. peg$currPos = s0;
  52567. s0 = peg$c1;
  52568. }
  52569. } else {
  52570. peg$currPos = s0;
  52571. s0 = peg$c1;
  52572. }
  52573. } else {
  52574. peg$currPos = s0;
  52575. s0 = peg$c1;
  52576. }
  52577. } else {
  52578. peg$currPos = s0;
  52579. s0 = peg$c1;
  52580. }
  52581. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52582. return s0;
  52583. }
  52584. function peg$parsebinaryTail() {
  52585. var s0, s1, s2;
  52586. var key = peg$currPos * 60 + 49,
  52587. cached = peg$cache[key];
  52588. if (cached) {
  52589. peg$currPos = cached.nextPos;
  52590. return cached.result;
  52591. }
  52592. s0 = peg$currPos;
  52593. s1 = peg$parsebinaryMessage();
  52594. if (s1 !== peg$FAILED) {
  52595. s2 = peg$parsebinaryTail();
  52596. if (s2 === peg$FAILED) {
  52597. s2 = peg$c41;
  52598. }
  52599. if (s2 !== peg$FAILED) {
  52600. peg$reportedPos = s0;
  52601. s1 = peg$c117(s1, s2);
  52602. s0 = s1;
  52603. } else {
  52604. peg$currPos = s0;
  52605. s0 = peg$c1;
  52606. }
  52607. } else {
  52608. peg$currPos = s0;
  52609. s0 = peg$c1;
  52610. }
  52611. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52612. return s0;
  52613. }
  52614. function peg$parsebinarySend() {
  52615. var s0, s1, s2;
  52616. var key = peg$currPos * 60 + 50,
  52617. cached = peg$cache[key];
  52618. if (cached) {
  52619. peg$currPos = cached.nextPos;
  52620. return cached.result;
  52621. }
  52622. s0 = peg$currPos;
  52623. s1 = peg$parseunarySend();
  52624. if (s1 !== peg$FAILED) {
  52625. s2 = peg$parsebinaryTail();
  52626. if (s2 === peg$FAILED) {
  52627. s2 = peg$c41;
  52628. }
  52629. if (s2 !== peg$FAILED) {
  52630. peg$reportedPos = s0;
  52631. s1 = peg$c115(s1, s2);
  52632. s0 = s1;
  52633. } else {
  52634. peg$currPos = s0;
  52635. s0 = peg$c1;
  52636. }
  52637. } else {
  52638. peg$currPos = s0;
  52639. s0 = peg$c1;
  52640. }
  52641. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52642. return s0;
  52643. }
  52644. function peg$parsekeywordMessage() {
  52645. var s0, s1, s2;
  52646. var key = peg$currPos * 60 + 51,
  52647. cached = peg$cache[key];
  52648. if (cached) {
  52649. peg$currPos = cached.nextPos;
  52650. return cached.result;
  52651. }
  52652. s0 = peg$currPos;
  52653. s1 = [];
  52654. s2 = peg$parsekeywordPair();
  52655. if (s2 !== peg$FAILED) {
  52656. while (s2 !== peg$FAILED) {
  52657. s1.push(s2);
  52658. s2 = peg$parsekeywordPair();
  52659. }
  52660. } else {
  52661. s1 = peg$c1;
  52662. }
  52663. if (s1 !== peg$FAILED) {
  52664. peg$reportedPos = s0;
  52665. s1 = peg$c118(s1);
  52666. }
  52667. s0 = s1;
  52668. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52669. return s0;
  52670. }
  52671. function peg$parsekeywordSend() {
  52672. var s0, s1, s2;
  52673. var key = peg$currPos * 60 + 52,
  52674. cached = peg$cache[key];
  52675. if (cached) {
  52676. peg$currPos = cached.nextPos;
  52677. return cached.result;
  52678. }
  52679. s0 = peg$currPos;
  52680. s1 = peg$parsebinarySend();
  52681. if (s1 !== peg$FAILED) {
  52682. s2 = peg$parsekeywordMessage();
  52683. if (s2 !== peg$FAILED) {
  52684. peg$reportedPos = s0;
  52685. s1 = peg$c119(s1, s2);
  52686. s0 = s1;
  52687. } else {
  52688. peg$currPos = s0;
  52689. s0 = peg$c1;
  52690. }
  52691. } else {
  52692. peg$currPos = s0;
  52693. s0 = peg$c1;
  52694. }
  52695. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52696. return s0;
  52697. }
  52698. function peg$parsemessage() {
  52699. var s0;
  52700. var key = peg$currPos * 60 + 53,
  52701. cached = peg$cache[key];
  52702. if (cached) {
  52703. peg$currPos = cached.nextPos;
  52704. return cached.result;
  52705. }
  52706. s0 = peg$parsebinaryMessage();
  52707. if (s0 === peg$FAILED) {
  52708. s0 = peg$parseunaryMessage();
  52709. if (s0 === peg$FAILED) {
  52710. s0 = peg$parsekeywordMessage();
  52711. }
  52712. }
  52713. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52714. return s0;
  52715. }
  52716. function peg$parsecascade() {
  52717. var s0, s1, s2, s3, s4, s5, s6, s7, s8;
  52718. var key = peg$currPos * 60 + 54,
  52719. cached = peg$cache[key];
  52720. if (cached) {
  52721. peg$currPos = cached.nextPos;
  52722. return cached.result;
  52723. }
  52724. s0 = peg$currPos;
  52725. s1 = peg$parsews();
  52726. if (s1 !== peg$FAILED) {
  52727. s2 = peg$parsekeywordSend();
  52728. if (s2 === peg$FAILED) {
  52729. s2 = peg$parsebinarySend();
  52730. }
  52731. if (s2 !== peg$FAILED) {
  52732. s3 = [];
  52733. s4 = peg$currPos;
  52734. s5 = peg$parsews();
  52735. if (s5 !== peg$FAILED) {
  52736. if (input.charCodeAt(peg$currPos) === 59) {
  52737. s6 = peg$c120;
  52738. peg$currPos++;
  52739. } else {
  52740. s6 = peg$FAILED;
  52741. if (peg$silentFails === 0) { peg$fail(peg$c121); }
  52742. }
  52743. if (s6 !== peg$FAILED) {
  52744. s7 = peg$parsews();
  52745. if (s7 !== peg$FAILED) {
  52746. s8 = peg$parsemessage();
  52747. if (s8 !== peg$FAILED) {
  52748. peg$reportedPos = s4;
  52749. s5 = peg$c122(s8);
  52750. s4 = s5;
  52751. } else {
  52752. peg$currPos = s4;
  52753. s4 = peg$c1;
  52754. }
  52755. } else {
  52756. peg$currPos = s4;
  52757. s4 = peg$c1;
  52758. }
  52759. } else {
  52760. peg$currPos = s4;
  52761. s4 = peg$c1;
  52762. }
  52763. } else {
  52764. peg$currPos = s4;
  52765. s4 = peg$c1;
  52766. }
  52767. if (s4 !== peg$FAILED) {
  52768. while (s4 !== peg$FAILED) {
  52769. s3.push(s4);
  52770. s4 = peg$currPos;
  52771. s5 = peg$parsews();
  52772. if (s5 !== peg$FAILED) {
  52773. if (input.charCodeAt(peg$currPos) === 59) {
  52774. s6 = peg$c120;
  52775. peg$currPos++;
  52776. } else {
  52777. s6 = peg$FAILED;
  52778. if (peg$silentFails === 0) { peg$fail(peg$c121); }
  52779. }
  52780. if (s6 !== peg$FAILED) {
  52781. s7 = peg$parsews();
  52782. if (s7 !== peg$FAILED) {
  52783. s8 = peg$parsemessage();
  52784. if (s8 !== peg$FAILED) {
  52785. peg$reportedPos = s4;
  52786. s5 = peg$c122(s8);
  52787. s4 = s5;
  52788. } else {
  52789. peg$currPos = s4;
  52790. s4 = peg$c1;
  52791. }
  52792. } else {
  52793. peg$currPos = s4;
  52794. s4 = peg$c1;
  52795. }
  52796. } else {
  52797. peg$currPos = s4;
  52798. s4 = peg$c1;
  52799. }
  52800. } else {
  52801. peg$currPos = s4;
  52802. s4 = peg$c1;
  52803. }
  52804. }
  52805. } else {
  52806. s3 = peg$c1;
  52807. }
  52808. if (s3 !== peg$FAILED) {
  52809. peg$reportedPos = s0;
  52810. s1 = peg$c123(s2, s3);
  52811. s0 = s1;
  52812. } else {
  52813. peg$currPos = s0;
  52814. s0 = peg$c1;
  52815. }
  52816. } else {
  52817. peg$currPos = s0;
  52818. s0 = peg$c1;
  52819. }
  52820. } else {
  52821. peg$currPos = s0;
  52822. s0 = peg$c1;
  52823. }
  52824. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52825. return s0;
  52826. }
  52827. function peg$parsejsStatement() {
  52828. var s0, s1, s2, s3, s4;
  52829. var key = peg$currPos * 60 + 55,
  52830. cached = peg$cache[key];
  52831. if (cached) {
  52832. peg$currPos = cached.nextPos;
  52833. return cached.result;
  52834. }
  52835. s0 = peg$currPos;
  52836. if (input.charCodeAt(peg$currPos) === 60) {
  52837. s1 = peg$c124;
  52838. peg$currPos++;
  52839. } else {
  52840. s1 = peg$FAILED;
  52841. if (peg$silentFails === 0) { peg$fail(peg$c125); }
  52842. }
  52843. if (s1 !== peg$FAILED) {
  52844. s2 = [];
  52845. s3 = peg$currPos;
  52846. if (input.substr(peg$currPos, 2) === peg$c126) {
  52847. s4 = peg$c126;
  52848. peg$currPos += 2;
  52849. } else {
  52850. s4 = peg$FAILED;
  52851. if (peg$silentFails === 0) { peg$fail(peg$c127); }
  52852. }
  52853. if (s4 !== peg$FAILED) {
  52854. peg$reportedPos = s3;
  52855. s4 = peg$c128();
  52856. }
  52857. s3 = s4;
  52858. if (s3 === peg$FAILED) {
  52859. if (peg$c129.test(input.charAt(peg$currPos))) {
  52860. s3 = input.charAt(peg$currPos);
  52861. peg$currPos++;
  52862. } else {
  52863. s3 = peg$FAILED;
  52864. if (peg$silentFails === 0) { peg$fail(peg$c130); }
  52865. }
  52866. }
  52867. while (s3 !== peg$FAILED) {
  52868. s2.push(s3);
  52869. s3 = peg$currPos;
  52870. if (input.substr(peg$currPos, 2) === peg$c126) {
  52871. s4 = peg$c126;
  52872. peg$currPos += 2;
  52873. } else {
  52874. s4 = peg$FAILED;
  52875. if (peg$silentFails === 0) { peg$fail(peg$c127); }
  52876. }
  52877. if (s4 !== peg$FAILED) {
  52878. peg$reportedPos = s3;
  52879. s4 = peg$c128();
  52880. }
  52881. s3 = s4;
  52882. if (s3 === peg$FAILED) {
  52883. if (peg$c129.test(input.charAt(peg$currPos))) {
  52884. s3 = input.charAt(peg$currPos);
  52885. peg$currPos++;
  52886. } else {
  52887. s3 = peg$FAILED;
  52888. if (peg$silentFails === 0) { peg$fail(peg$c130); }
  52889. }
  52890. }
  52891. }
  52892. if (s2 !== peg$FAILED) {
  52893. if (input.charCodeAt(peg$currPos) === 62) {
  52894. s3 = peg$c131;
  52895. peg$currPos++;
  52896. } else {
  52897. s3 = peg$FAILED;
  52898. if (peg$silentFails === 0) { peg$fail(peg$c132); }
  52899. }
  52900. if (s3 !== peg$FAILED) {
  52901. peg$reportedPos = s0;
  52902. s1 = peg$c133(s2);
  52903. s0 = s1;
  52904. } else {
  52905. peg$currPos = s0;
  52906. s0 = peg$c1;
  52907. }
  52908. } else {
  52909. peg$currPos = s0;
  52910. s0 = peg$c1;
  52911. }
  52912. } else {
  52913. peg$currPos = s0;
  52914. s0 = peg$c1;
  52915. }
  52916. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52917. return s0;
  52918. }
  52919. function peg$parsemethod() {
  52920. var s0, s1, s2, s3, s4;
  52921. var key = peg$currPos * 60 + 56,
  52922. cached = peg$cache[key];
  52923. if (cached) {
  52924. peg$currPos = cached.nextPos;
  52925. return cached.result;
  52926. }
  52927. s0 = peg$currPos;
  52928. s1 = peg$parsekeywordPattern();
  52929. if (s1 === peg$FAILED) {
  52930. s1 = peg$parsebinaryPattern();
  52931. if (s1 === peg$FAILED) {
  52932. s1 = peg$parseunaryPattern();
  52933. }
  52934. }
  52935. if (s1 !== peg$FAILED) {
  52936. s2 = peg$parsews();
  52937. if (s2 !== peg$FAILED) {
  52938. s3 = peg$parsesequence();
  52939. if (s3 === peg$FAILED) {
  52940. s3 = peg$c41;
  52941. }
  52942. if (s3 !== peg$FAILED) {
  52943. s4 = peg$parsews();
  52944. if (s4 !== peg$FAILED) {
  52945. peg$reportedPos = s0;
  52946. s1 = peg$c134(s1, s3);
  52947. s0 = s1;
  52948. } else {
  52949. peg$currPos = s0;
  52950. s0 = peg$c1;
  52951. }
  52952. } else {
  52953. peg$currPos = s0;
  52954. s0 = peg$c1;
  52955. }
  52956. } else {
  52957. peg$currPos = s0;
  52958. s0 = peg$c1;
  52959. }
  52960. } else {
  52961. peg$currPos = s0;
  52962. s0 = peg$c1;
  52963. }
  52964. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52965. return s0;
  52966. }
  52967. function peg$parseassociationSend() {
  52968. var s0, s1, s2;
  52969. var key = peg$currPos * 60 + 57,
  52970. cached = peg$cache[key];
  52971. if (cached) {
  52972. peg$currPos = cached.nextPos;
  52973. return cached.result;
  52974. }
  52975. s0 = peg$currPos;
  52976. s1 = peg$parsebinarySend();
  52977. if (s1 !== peg$FAILED) {
  52978. peg$reportedPos = peg$currPos;
  52979. s2 = peg$c135(s1);
  52980. if (s2) {
  52981. s2 = peg$c112;
  52982. } else {
  52983. s2 = peg$c1;
  52984. }
  52985. if (s2 !== peg$FAILED) {
  52986. peg$reportedPos = s0;
  52987. s1 = peg$c136(s1);
  52988. s0 = s1;
  52989. } else {
  52990. peg$currPos = s0;
  52991. s0 = peg$c1;
  52992. }
  52993. } else {
  52994. peg$currPos = s0;
  52995. s0 = peg$c1;
  52996. }
  52997. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  52998. return s0;
  52999. }
  53000. function peg$parseassociationList() {
  53001. var s0, s1, s2, s3, s4;
  53002. var key = peg$currPos * 60 + 58,
  53003. cached = peg$cache[key];
  53004. if (cached) {
  53005. peg$currPos = cached.nextPos;
  53006. return cached.result;
  53007. }
  53008. s0 = peg$currPos;
  53009. s1 = peg$parsews();
  53010. if (s1 !== peg$FAILED) {
  53011. if (input.charCodeAt(peg$currPos) === 46) {
  53012. s2 = peg$c51;
  53013. peg$currPos++;
  53014. } else {
  53015. s2 = peg$FAILED;
  53016. if (peg$silentFails === 0) { peg$fail(peg$c52); }
  53017. }
  53018. if (s2 !== peg$FAILED) {
  53019. s3 = peg$parsews();
  53020. if (s3 !== peg$FAILED) {
  53021. s4 = peg$parseassociationSend();
  53022. if (s4 !== peg$FAILED) {
  53023. peg$reportedPos = s0;
  53024. s1 = peg$c89(s4);
  53025. s0 = s1;
  53026. } else {
  53027. peg$currPos = s0;
  53028. s0 = peg$c1;
  53029. }
  53030. } else {
  53031. peg$currPos = s0;
  53032. s0 = peg$c1;
  53033. }
  53034. } else {
  53035. peg$currPos = s0;
  53036. s0 = peg$c1;
  53037. }
  53038. } else {
  53039. peg$currPos = s0;
  53040. s0 = peg$c1;
  53041. }
  53042. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53043. return s0;
  53044. }
  53045. function peg$parseassociations() {
  53046. var s0, s1, s2, s3;
  53047. var key = peg$currPos * 60 + 59,
  53048. cached = peg$cache[key];
  53049. if (cached) {
  53050. peg$currPos = cached.nextPos;
  53051. return cached.result;
  53052. }
  53053. s0 = peg$currPos;
  53054. s1 = peg$parseassociationSend();
  53055. if (s1 !== peg$FAILED) {
  53056. s2 = [];
  53057. s3 = peg$parseassociationList();
  53058. while (s3 !== peg$FAILED) {
  53059. s2.push(s3);
  53060. s3 = peg$parseassociationList();
  53061. }
  53062. if (s2 !== peg$FAILED) {
  53063. peg$reportedPos = s0;
  53064. s1 = peg$c137(s1, s2);
  53065. s0 = s1;
  53066. } else {
  53067. peg$currPos = s0;
  53068. s0 = peg$c1;
  53069. }
  53070. } else {
  53071. peg$currPos = s0;
  53072. s0 = peg$c1;
  53073. }
  53074. peg$cache[key] = { nextPos: peg$currPos, result: s0 };
  53075. return s0;
  53076. }
  53077. peg$result = peg$startRuleFunction();
  53078. if (peg$result !== peg$FAILED && peg$currPos === input.length) {
  53079. return peg$result;
  53080. } else {
  53081. if (peg$result !== peg$FAILED && peg$currPos < input.length) {
  53082. peg$fail({ type: "end", description: "end of input" });
  53083. }
  53084. throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
  53085. }
  53086. }
  53087. return {
  53088. SyntaxError: SyntaxError,
  53089. parse: parse
  53090. };
  53091. })();
  53092. });
  53093. define("amber_core/SUnit", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Exceptions", "amber_core/Kernel-Infrastructure", "amber_core/Kernel-Classes"], function($boot){
  53094. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  53095. var smalltalk=$core,_st=$recv,globals=$globals;
  53096. $core.addPackage('SUnit');
  53097. $core.packages["SUnit"].transport = {"type":"amd","amdNamespace":"amber_core"};
  53098. $core.addClass('ResultAnnouncement', $globals.Object, ['result'], 'SUnit');
  53099. //>>excludeStart("ide", pragmas.excludeIdeData);
  53100. $globals.ResultAnnouncement.comment="I get signaled when a `TestCase` has been run.\x0a\x0aMy instances hold the result (instance of `TestResult`) of the test run.";
  53101. //>>excludeEnd("ide");
  53102. $core.addMethod(
  53103. $core.method({
  53104. selector: "result",
  53105. protocol: 'accessing',
  53106. fn: function (){
  53107. var self=this;
  53108. var $1;
  53109. $1=self["@result"];
  53110. return $1;
  53111. },
  53112. //>>excludeStart("ide", pragmas.excludeIdeData);
  53113. args: [],
  53114. source: "result\x0a\x09^ result",
  53115. referencedClasses: [],
  53116. //>>excludeEnd("ide");
  53117. messageSends: []
  53118. }),
  53119. $globals.ResultAnnouncement);
  53120. $core.addMethod(
  53121. $core.method({
  53122. selector: "result:",
  53123. protocol: 'accessing',
  53124. fn: function (aTestResult){
  53125. var self=this;
  53126. self["@result"]=aTestResult;
  53127. return self;
  53128. },
  53129. //>>excludeStart("ide", pragmas.excludeIdeData);
  53130. args: ["aTestResult"],
  53131. source: "result: aTestResult\x0a\x09result := aTestResult",
  53132. referencedClasses: [],
  53133. //>>excludeEnd("ide");
  53134. messageSends: []
  53135. }),
  53136. $globals.ResultAnnouncement);
  53137. $core.addClass('TestCase', $globals.Object, ['testSelector', 'asyncTimeout', 'context'], 'SUnit');
  53138. //>>excludeStart("ide", pragmas.excludeIdeData);
  53139. $globals.TestCase.comment="I am an implementation of the command pattern to run a test.\x0a\x0a## API\x0a\x0aMy instances are created with the class method `#selector:`,\x0apassing the symbol that names the method to be executed when the test case runs.\x0a\x0aWhen you discover a new fixture, subclass `TestCase` and create a `#test...` method for the first test.\x0aAs that method develops and more `#test...` methods are added, you will find yourself refactoring temps\x0ainto instance variables for the objects in the fixture and overriding `#setUp` to initialize these variables.\x0aAs required, override `#tearDown` to nil references, release objects and deallocate.";
  53140. //>>excludeEnd("ide");
  53141. $core.addMethod(
  53142. $core.method({
  53143. selector: "assert:",
  53144. protocol: 'testing',
  53145. fn: function (aBoolean){
  53146. var self=this;
  53147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53148. return $core.withContext(function($ctx1) {
  53149. //>>excludeEnd("ctx");
  53150. self._assert_description_(aBoolean,"Assertion failed");
  53151. return self;
  53152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53153. }, function($ctx1) {$ctx1.fill(self,"assert:",{aBoolean:aBoolean},$globals.TestCase)});
  53154. //>>excludeEnd("ctx");
  53155. },
  53156. //>>excludeStart("ide", pragmas.excludeIdeData);
  53157. args: ["aBoolean"],
  53158. source: "assert: aBoolean\x0a\x09self assert: aBoolean description: 'Assertion failed'",
  53159. referencedClasses: [],
  53160. //>>excludeEnd("ide");
  53161. messageSends: ["assert:description:"]
  53162. }),
  53163. $globals.TestCase);
  53164. $core.addMethod(
  53165. $core.method({
  53166. selector: "assert:description:",
  53167. protocol: 'testing',
  53168. fn: function (aBoolean,aString){
  53169. var self=this;
  53170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53171. return $core.withContext(function($ctx1) {
  53172. //>>excludeEnd("ctx");
  53173. if(!$core.assert(aBoolean)){
  53174. self._signalFailure_(aString);
  53175. };
  53176. return self;
  53177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53178. }, function($ctx1) {$ctx1.fill(self,"assert:description:",{aBoolean:aBoolean,aString:aString},$globals.TestCase)});
  53179. //>>excludeEnd("ctx");
  53180. },
  53181. //>>excludeStart("ide", pragmas.excludeIdeData);
  53182. args: ["aBoolean", "aString"],
  53183. source: "assert: aBoolean description: aString\x0a\x09aBoolean ifFalse: [ self signalFailure: aString ]",
  53184. referencedClasses: [],
  53185. //>>excludeEnd("ide");
  53186. messageSends: ["ifFalse:", "signalFailure:"]
  53187. }),
  53188. $globals.TestCase);
  53189. $core.addMethod(
  53190. $core.method({
  53191. selector: "assert:equals:",
  53192. protocol: 'testing',
  53193. fn: function (actual,expected){
  53194. var self=this;
  53195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53196. return $core.withContext(function($ctx1) {
  53197. //>>excludeEnd("ctx");
  53198. var $2,$6,$5,$4,$3,$1;
  53199. $2=$recv(actual).__eq(expected);
  53200. $6=$recv(expected)._printString();
  53201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53202. $ctx1.sendIdx["printString"]=1;
  53203. //>>excludeEnd("ctx");
  53204. $5="Expected: ".__comma($6);
  53205. $4=$recv($5).__comma(" but was: ");
  53206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53207. $ctx1.sendIdx[","]=2;
  53208. //>>excludeEnd("ctx");
  53209. $3=$recv($4).__comma($recv(actual)._printString());
  53210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53211. $ctx1.sendIdx[","]=1;
  53212. //>>excludeEnd("ctx");
  53213. $1=self._assert_description_($2,$3);
  53214. return $1;
  53215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53216. }, function($ctx1) {$ctx1.fill(self,"assert:equals:",{actual:actual,expected:expected},$globals.TestCase)});
  53217. //>>excludeEnd("ctx");
  53218. },
  53219. //>>excludeStart("ide", pragmas.excludeIdeData);
  53220. args: ["actual", "expected"],
  53221. source: "assert: actual equals: expected\x0a\x09^ self assert: (actual = expected) description: 'Expected: ', expected printString, ' but was: ', actual printString",
  53222. referencedClasses: [],
  53223. //>>excludeEnd("ide");
  53224. messageSends: ["assert:description:", "=", ",", "printString"]
  53225. }),
  53226. $globals.TestCase);
  53227. $core.addMethod(
  53228. $core.method({
  53229. selector: "async:",
  53230. protocol: 'async',
  53231. fn: function (aBlock){
  53232. var self=this;
  53233. var c;
  53234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53235. return $core.withContext(function($ctx1) {
  53236. //>>excludeEnd("ctx");
  53237. var $2,$1;
  53238. self._errorIfNotAsync_("#async");
  53239. c=self["@context"];
  53240. $1=(function(){
  53241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53242. return $core.withContext(function($ctx2) {
  53243. //>>excludeEnd("ctx");
  53244. $2=self._isAsync();
  53245. if($core.assert($2)){
  53246. return $recv(c)._execute_(aBlock);
  53247. };
  53248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53249. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  53250. //>>excludeEnd("ctx");
  53251. });
  53252. return $1;
  53253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53254. }, function($ctx1) {$ctx1.fill(self,"async:",{aBlock:aBlock,c:c},$globals.TestCase)});
  53255. //>>excludeEnd("ctx");
  53256. },
  53257. //>>excludeStart("ide", pragmas.excludeIdeData);
  53258. args: ["aBlock"],
  53259. source: "async: aBlock\x0a\x09| c |\x0a\x09self errorIfNotAsync: '#async'.\x0a\x09c := context.\x0a\x09^ [ self isAsync ifTrue: [ c execute: aBlock ] ]",
  53260. referencedClasses: [],
  53261. //>>excludeEnd("ide");
  53262. messageSends: ["errorIfNotAsync:", "ifTrue:", "isAsync", "execute:"]
  53263. }),
  53264. $globals.TestCase);
  53265. $core.addMethod(
  53266. $core.method({
  53267. selector: "context:",
  53268. protocol: 'accessing',
  53269. fn: function (aRunningTestContext){
  53270. var self=this;
  53271. self["@context"]=aRunningTestContext;
  53272. return self;
  53273. },
  53274. //>>excludeStart("ide", pragmas.excludeIdeData);
  53275. args: ["aRunningTestContext"],
  53276. source: "context: aRunningTestContext\x0a\x09context := aRunningTestContext",
  53277. referencedClasses: [],
  53278. //>>excludeEnd("ide");
  53279. messageSends: []
  53280. }),
  53281. $globals.TestCase);
  53282. $core.addMethod(
  53283. $core.method({
  53284. selector: "deny:",
  53285. protocol: 'testing',
  53286. fn: function (aBoolean){
  53287. var self=this;
  53288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53289. return $core.withContext(function($ctx1) {
  53290. //>>excludeEnd("ctx");
  53291. self._assert_($recv(aBoolean)._not());
  53292. return self;
  53293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53294. }, function($ctx1) {$ctx1.fill(self,"deny:",{aBoolean:aBoolean},$globals.TestCase)});
  53295. //>>excludeEnd("ctx");
  53296. },
  53297. //>>excludeStart("ide", pragmas.excludeIdeData);
  53298. args: ["aBoolean"],
  53299. source: "deny: aBoolean\x0a\x09self assert: aBoolean not",
  53300. referencedClasses: [],
  53301. //>>excludeEnd("ide");
  53302. messageSends: ["assert:", "not"]
  53303. }),
  53304. $globals.TestCase);
  53305. $core.addMethod(
  53306. $core.method({
  53307. selector: "errorIfNotAsync:",
  53308. protocol: 'error handling',
  53309. fn: function (aString){
  53310. var self=this;
  53311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53312. return $core.withContext(function($ctx1) {
  53313. //>>excludeEnd("ctx");
  53314. var $1;
  53315. $1=self._isAsync();
  53316. if(!$core.assert($1)){
  53317. self._error_($recv(aString).__comma(" used without prior #timeout:"));
  53318. };
  53319. return self;
  53320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53321. }, function($ctx1) {$ctx1.fill(self,"errorIfNotAsync:",{aString:aString},$globals.TestCase)});
  53322. //>>excludeEnd("ctx");
  53323. },
  53324. //>>excludeStart("ide", pragmas.excludeIdeData);
  53325. args: ["aString"],
  53326. source: "errorIfNotAsync: aString\x0a\x09self isAsync ifFalse: [\x0a\x09\x09self error: aString, ' used without prior #timeout:' ]",
  53327. referencedClasses: [],
  53328. //>>excludeEnd("ide");
  53329. messageSends: ["ifFalse:", "isAsync", "error:", ","]
  53330. }),
  53331. $globals.TestCase);
  53332. $core.addMethod(
  53333. $core.method({
  53334. selector: "finished",
  53335. protocol: 'async',
  53336. fn: function (){
  53337. var self=this;
  53338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53339. return $core.withContext(function($ctx1) {
  53340. //>>excludeEnd("ctx");
  53341. self._errorIfNotAsync_("#finished");
  53342. self["@asyncTimeout"]=nil;
  53343. return self;
  53344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53345. }, function($ctx1) {$ctx1.fill(self,"finished",{},$globals.TestCase)});
  53346. //>>excludeEnd("ctx");
  53347. },
  53348. //>>excludeStart("ide", pragmas.excludeIdeData);
  53349. args: [],
  53350. source: "finished\x0a\x09self errorIfNotAsync: '#finished'.\x0a\x09asyncTimeout := nil",
  53351. referencedClasses: [],
  53352. //>>excludeEnd("ide");
  53353. messageSends: ["errorIfNotAsync:"]
  53354. }),
  53355. $globals.TestCase);
  53356. $core.addMethod(
  53357. $core.method({
  53358. selector: "isAsync",
  53359. protocol: 'testing',
  53360. fn: function (){
  53361. var self=this;
  53362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53363. return $core.withContext(function($ctx1) {
  53364. //>>excludeEnd("ctx");
  53365. var $1;
  53366. $1=$recv(self["@asyncTimeout"])._notNil();
  53367. return $1;
  53368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53369. }, function($ctx1) {$ctx1.fill(self,"isAsync",{},$globals.TestCase)});
  53370. //>>excludeEnd("ctx");
  53371. },
  53372. //>>excludeStart("ide", pragmas.excludeIdeData);
  53373. args: [],
  53374. source: "isAsync\x0a\x09^ asyncTimeout notNil",
  53375. referencedClasses: [],
  53376. //>>excludeEnd("ide");
  53377. messageSends: ["notNil"]
  53378. }),
  53379. $globals.TestCase);
  53380. $core.addMethod(
  53381. $core.method({
  53382. selector: "performTest",
  53383. protocol: 'running',
  53384. fn: function (){
  53385. var self=this;
  53386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53387. return $core.withContext(function($ctx1) {
  53388. //>>excludeEnd("ctx");
  53389. self["@asyncTimeout"]=nil;
  53390. self._perform_(self._selector());
  53391. return self;
  53392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53393. }, function($ctx1) {$ctx1.fill(self,"performTest",{},$globals.TestCase)});
  53394. //>>excludeEnd("ctx");
  53395. },
  53396. //>>excludeStart("ide", pragmas.excludeIdeData);
  53397. args: [],
  53398. source: "performTest\x0a\x09asyncTimeout := nil.\x0a\x09self perform: self selector",
  53399. referencedClasses: [],
  53400. //>>excludeEnd("ide");
  53401. messageSends: ["perform:", "selector"]
  53402. }),
  53403. $globals.TestCase);
  53404. $core.addMethod(
  53405. $core.method({
  53406. selector: "runCase",
  53407. protocol: 'running',
  53408. fn: function (){
  53409. var self=this;
  53410. function $TestContext(){return $globals.TestContext||(typeof TestContext=="undefined"?nil:TestContext)}
  53411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53412. return $core.withContext(function($ctx1) {
  53413. //>>excludeEnd("ctx");
  53414. $recv($recv($TestContext())._testCase_(self))._start();
  53415. return self;
  53416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53417. }, function($ctx1) {$ctx1.fill(self,"runCase",{},$globals.TestCase)});
  53418. //>>excludeEnd("ctx");
  53419. },
  53420. //>>excludeStart("ide", pragmas.excludeIdeData);
  53421. args: [],
  53422. source: "runCase\x0a\x09\x22Runs a test case in isolated context, leaking all errors.\x22\x0a\x0a\x09(TestContext testCase: self) start",
  53423. referencedClasses: ["TestContext"],
  53424. //>>excludeEnd("ide");
  53425. messageSends: ["start", "testCase:"]
  53426. }),
  53427. $globals.TestCase);
  53428. $core.addMethod(
  53429. $core.method({
  53430. selector: "selector",
  53431. protocol: 'accessing',
  53432. fn: function (){
  53433. var self=this;
  53434. var $1;
  53435. $1=self["@testSelector"];
  53436. return $1;
  53437. },
  53438. //>>excludeStart("ide", pragmas.excludeIdeData);
  53439. args: [],
  53440. source: "selector\x0a\x09^ testSelector",
  53441. referencedClasses: [],
  53442. //>>excludeEnd("ide");
  53443. messageSends: []
  53444. }),
  53445. $globals.TestCase);
  53446. $core.addMethod(
  53447. $core.method({
  53448. selector: "setTestSelector:",
  53449. protocol: 'accessing',
  53450. fn: function (aSelector){
  53451. var self=this;
  53452. self["@testSelector"]=aSelector;
  53453. return self;
  53454. },
  53455. //>>excludeStart("ide", pragmas.excludeIdeData);
  53456. args: ["aSelector"],
  53457. source: "setTestSelector: aSelector\x0a\x09testSelector := aSelector",
  53458. referencedClasses: [],
  53459. //>>excludeEnd("ide");
  53460. messageSends: []
  53461. }),
  53462. $globals.TestCase);
  53463. $core.addMethod(
  53464. $core.method({
  53465. selector: "setUp",
  53466. protocol: 'running',
  53467. fn: function (){
  53468. var self=this;
  53469. return self;
  53470. },
  53471. //>>excludeStart("ide", pragmas.excludeIdeData);
  53472. args: [],
  53473. source: "setUp",
  53474. referencedClasses: [],
  53475. //>>excludeEnd("ide");
  53476. messageSends: []
  53477. }),
  53478. $globals.TestCase);
  53479. $core.addMethod(
  53480. $core.method({
  53481. selector: "should:",
  53482. protocol: 'testing',
  53483. fn: function (aBlock){
  53484. var self=this;
  53485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53486. return $core.withContext(function($ctx1) {
  53487. //>>excludeEnd("ctx");
  53488. self._assert_($recv(aBlock)._value());
  53489. return self;
  53490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53491. }, function($ctx1) {$ctx1.fill(self,"should:",{aBlock:aBlock},$globals.TestCase)});
  53492. //>>excludeEnd("ctx");
  53493. },
  53494. //>>excludeStart("ide", pragmas.excludeIdeData);
  53495. args: ["aBlock"],
  53496. source: "should: aBlock\x0a\x09self assert: aBlock value",
  53497. referencedClasses: [],
  53498. //>>excludeEnd("ide");
  53499. messageSends: ["assert:", "value"]
  53500. }),
  53501. $globals.TestCase);
  53502. $core.addMethod(
  53503. $core.method({
  53504. selector: "should:raise:",
  53505. protocol: 'testing',
  53506. fn: function (aBlock,anExceptionClass){
  53507. var self=this;
  53508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53509. return $core.withContext(function($ctx1) {
  53510. //>>excludeEnd("ctx");
  53511. self._assert_($recv((function(){
  53512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53513. return $core.withContext(function($ctx2) {
  53514. //>>excludeEnd("ctx");
  53515. $recv(aBlock)._value();
  53516. return false;
  53517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53518. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  53519. //>>excludeEnd("ctx");
  53520. }))._on_do_(anExceptionClass,(function(ex){
  53521. return true;
  53522. })));
  53523. return self;
  53524. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53525. }, function($ctx1) {$ctx1.fill(self,"should:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass},$globals.TestCase)});
  53526. //>>excludeEnd("ctx");
  53527. },
  53528. //>>excludeStart("ide", pragmas.excludeIdeData);
  53529. args: ["aBlock", "anExceptionClass"],
  53530. source: "should: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. false ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | true ])",
  53531. referencedClasses: [],
  53532. //>>excludeEnd("ide");
  53533. messageSends: ["assert:", "on:do:", "value"]
  53534. }),
  53535. $globals.TestCase);
  53536. $core.addMethod(
  53537. $core.method({
  53538. selector: "shouldnt:raise:",
  53539. protocol: 'testing',
  53540. fn: function (aBlock,anExceptionClass){
  53541. var self=this;
  53542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53543. return $core.withContext(function($ctx1) {
  53544. //>>excludeEnd("ctx");
  53545. self._assert_($recv((function(){
  53546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53547. return $core.withContext(function($ctx2) {
  53548. //>>excludeEnd("ctx");
  53549. $recv(aBlock)._value();
  53550. return true;
  53551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53552. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  53553. //>>excludeEnd("ctx");
  53554. }))._on_do_(anExceptionClass,(function(ex){
  53555. return false;
  53556. })));
  53557. return self;
  53558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53559. }, function($ctx1) {$ctx1.fill(self,"shouldnt:raise:",{aBlock:aBlock,anExceptionClass:anExceptionClass},$globals.TestCase)});
  53560. //>>excludeEnd("ctx");
  53561. },
  53562. //>>excludeStart("ide", pragmas.excludeIdeData);
  53563. args: ["aBlock", "anExceptionClass"],
  53564. source: "shouldnt: aBlock raise: anExceptionClass\x0a\x09self assert: ([ aBlock value. true ]\x0a\x09\x09on: anExceptionClass\x0a\x09\x09do: [ :ex | false ])",
  53565. referencedClasses: [],
  53566. //>>excludeEnd("ide");
  53567. messageSends: ["assert:", "on:do:", "value"]
  53568. }),
  53569. $globals.TestCase);
  53570. $core.addMethod(
  53571. $core.method({
  53572. selector: "signalFailure:",
  53573. protocol: 'private',
  53574. fn: function (aString){
  53575. var self=this;
  53576. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  53577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53578. return $core.withContext(function($ctx1) {
  53579. //>>excludeEnd("ctx");
  53580. var $1,$2;
  53581. $1=$recv($TestFailure())._new();
  53582. $recv($1)._messageText_(aString);
  53583. $2=$recv($1)._signal();
  53584. return self;
  53585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53586. }, function($ctx1) {$ctx1.fill(self,"signalFailure:",{aString:aString},$globals.TestCase)});
  53587. //>>excludeEnd("ctx");
  53588. },
  53589. //>>excludeStart("ide", pragmas.excludeIdeData);
  53590. args: ["aString"],
  53591. source: "signalFailure: aString\x0a\x09TestFailure new\x0a\x09\x09messageText: aString;\x0a\x09\x09signal",
  53592. referencedClasses: ["TestFailure"],
  53593. //>>excludeEnd("ide");
  53594. messageSends: ["messageText:", "new", "signal"]
  53595. }),
  53596. $globals.TestCase);
  53597. $core.addMethod(
  53598. $core.method({
  53599. selector: "tearDown",
  53600. protocol: 'running',
  53601. fn: function (){
  53602. var self=this;
  53603. return self;
  53604. },
  53605. //>>excludeStart("ide", pragmas.excludeIdeData);
  53606. args: [],
  53607. source: "tearDown",
  53608. referencedClasses: [],
  53609. //>>excludeEnd("ide");
  53610. messageSends: []
  53611. }),
  53612. $globals.TestCase);
  53613. $core.addMethod(
  53614. $core.method({
  53615. selector: "timeout:",
  53616. protocol: 'async',
  53617. fn: function (aNumber){
  53618. var self=this;
  53619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53620. return $core.withContext(function($ctx1) {
  53621. //>>excludeEnd("ctx");
  53622. var $1,$receiver;
  53623. $1=self["@asyncTimeout"];
  53624. if(($receiver = $1) == null || $receiver.isNil){
  53625. $1;
  53626. } else {
  53627. $recv(self["@asyncTimeout"])._clearTimeout();
  53628. };
  53629. self["@asyncTimeout"]=(0);
  53630. self["@asyncTimeout"]=$recv(self._async_((function(){
  53631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53632. return $core.withContext(function($ctx2) {
  53633. //>>excludeEnd("ctx");
  53634. return self._assert_description_(false,"SUnit grace time exhausted");
  53635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53636. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  53637. //>>excludeEnd("ctx");
  53638. })))._valueWithTimeout_(aNumber);
  53639. return self;
  53640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53641. }, function($ctx1) {$ctx1.fill(self,"timeout:",{aNumber:aNumber},$globals.TestCase)});
  53642. //>>excludeEnd("ctx");
  53643. },
  53644. //>>excludeStart("ide", pragmas.excludeIdeData);
  53645. args: ["aNumber"],
  53646. source: "timeout: aNumber\x0a\x09\x22Set a grace time timeout in milliseconds to run the test asynchronously\x22\x0a\x09\x0a\x09asyncTimeout ifNotNil: [ asyncTimeout clearTimeout ].\x0a\x09\x0a\x09\x22to allow #async: message send without throwing an error\x22\x0a\x09asyncTimeout := 0.\x0a\x09\x0a\x09asyncTimeout := (self async: [\x0a\x09\x09self assert: false description: 'SUnit grace time exhausted' ])\x0a\x09\x09\x09valueWithTimeout: aNumber",
  53647. referencedClasses: [],
  53648. //>>excludeEnd("ide");
  53649. messageSends: ["ifNotNil:", "clearTimeout", "valueWithTimeout:", "async:", "assert:description:"]
  53650. }),
  53651. $globals.TestCase);
  53652. $core.addMethod(
  53653. $core.method({
  53654. selector: "allTestSelectors",
  53655. protocol: 'accessing',
  53656. fn: function (){
  53657. var self=this;
  53658. var selectors;
  53659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53660. return $core.withContext(function($ctx1) {
  53661. //>>excludeEnd("ctx");
  53662. var $1,$2;
  53663. selectors=self._testSelectors();
  53664. $1=self._shouldInheritSelectors();
  53665. if($core.assert($1)){
  53666. $recv(selectors)._addAll_($recv(self._superclass())._allTestSelectors());
  53667. };
  53668. $2=selectors;
  53669. return $2;
  53670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53671. }, function($ctx1) {$ctx1.fill(self,"allTestSelectors",{selectors:selectors},$globals.TestCase.klass)});
  53672. //>>excludeEnd("ctx");
  53673. },
  53674. //>>excludeStart("ide", pragmas.excludeIdeData);
  53675. args: [],
  53676. source: "allTestSelectors\x0a\x09| selectors |\x0a\x09selectors := self testSelectors.\x0a\x09self shouldInheritSelectors ifTrue: [\x0a\x09\x09selectors addAll: self superclass allTestSelectors ].\x0a\x09^ selectors",
  53677. referencedClasses: [],
  53678. //>>excludeEnd("ide");
  53679. messageSends: ["testSelectors", "ifTrue:", "shouldInheritSelectors", "addAll:", "allTestSelectors", "superclass"]
  53680. }),
  53681. $globals.TestCase.klass);
  53682. $core.addMethod(
  53683. $core.method({
  53684. selector: "buildSuite",
  53685. protocol: 'accessing',
  53686. fn: function (){
  53687. var self=this;
  53688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53689. return $core.withContext(function($ctx1) {
  53690. //>>excludeEnd("ctx");
  53691. var $1;
  53692. $1=$recv(self._allTestSelectors())._collect_((function(each){
  53693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53694. return $core.withContext(function($ctx2) {
  53695. //>>excludeEnd("ctx");
  53696. return self._selector_(each);
  53697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53698. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  53699. //>>excludeEnd("ctx");
  53700. }));
  53701. return $1;
  53702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53703. }, function($ctx1) {$ctx1.fill(self,"buildSuite",{},$globals.TestCase.klass)});
  53704. //>>excludeEnd("ctx");
  53705. },
  53706. //>>excludeStart("ide", pragmas.excludeIdeData);
  53707. args: [],
  53708. source: "buildSuite\x0a\x09^ self allTestSelectors collect: [ :each | self selector: each ]",
  53709. referencedClasses: [],
  53710. //>>excludeEnd("ide");
  53711. messageSends: ["collect:", "allTestSelectors", "selector:"]
  53712. }),
  53713. $globals.TestCase.klass);
  53714. $core.addMethod(
  53715. $core.method({
  53716. selector: "heliosClass",
  53717. protocol: 'helios',
  53718. fn: function (){
  53719. var self=this;
  53720. return "test";
  53721. },
  53722. //>>excludeStart("ide", pragmas.excludeIdeData);
  53723. args: [],
  53724. source: "heliosClass\x0a\x09^ 'test'",
  53725. referencedClasses: [],
  53726. //>>excludeEnd("ide");
  53727. messageSends: []
  53728. }),
  53729. $globals.TestCase.klass);
  53730. $core.addMethod(
  53731. $core.method({
  53732. selector: "isAbstract",
  53733. protocol: 'testing',
  53734. fn: function (){
  53735. var self=this;
  53736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53737. return $core.withContext(function($ctx1) {
  53738. //>>excludeEnd("ctx");
  53739. var $1;
  53740. $1=$recv(self._name()).__eq("TestCase");
  53741. return $1;
  53742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53743. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.TestCase.klass)});
  53744. //>>excludeEnd("ctx");
  53745. },
  53746. //>>excludeStart("ide", pragmas.excludeIdeData);
  53747. args: [],
  53748. source: "isAbstract\x0a\x09^ self name = 'TestCase'",
  53749. referencedClasses: [],
  53750. //>>excludeEnd("ide");
  53751. messageSends: ["=", "name"]
  53752. }),
  53753. $globals.TestCase.klass);
  53754. $core.addMethod(
  53755. $core.method({
  53756. selector: "lookupHierarchyRoot",
  53757. protocol: 'accessing',
  53758. fn: function (){
  53759. var self=this;
  53760. function $TestCase(){return $globals.TestCase||(typeof TestCase=="undefined"?nil:TestCase)}
  53761. return $TestCase();
  53762. },
  53763. //>>excludeStart("ide", pragmas.excludeIdeData);
  53764. args: [],
  53765. source: "lookupHierarchyRoot\x0a\x09^ TestCase",
  53766. referencedClasses: ["TestCase"],
  53767. //>>excludeEnd("ide");
  53768. messageSends: []
  53769. }),
  53770. $globals.TestCase.klass);
  53771. $core.addMethod(
  53772. $core.method({
  53773. selector: "selector:",
  53774. protocol: 'accessing',
  53775. fn: function (aSelector){
  53776. var self=this;
  53777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53778. return $core.withContext(function($ctx1) {
  53779. //>>excludeEnd("ctx");
  53780. var $2,$3,$1;
  53781. $2=self._new();
  53782. $recv($2)._setTestSelector_(aSelector);
  53783. $3=$recv($2)._yourself();
  53784. $1=$3;
  53785. return $1;
  53786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53787. }, function($ctx1) {$ctx1.fill(self,"selector:",{aSelector:aSelector},$globals.TestCase.klass)});
  53788. //>>excludeEnd("ctx");
  53789. },
  53790. //>>excludeStart("ide", pragmas.excludeIdeData);
  53791. args: ["aSelector"],
  53792. source: "selector: aSelector\x0a\x09^ self new\x0a\x09\x09setTestSelector: aSelector;\x0a\x09\x09yourself",
  53793. referencedClasses: [],
  53794. //>>excludeEnd("ide");
  53795. messageSends: ["setTestSelector:", "new", "yourself"]
  53796. }),
  53797. $globals.TestCase.klass);
  53798. $core.addMethod(
  53799. $core.method({
  53800. selector: "shouldInheritSelectors",
  53801. protocol: 'testing',
  53802. fn: function (){
  53803. var self=this;
  53804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53805. return $core.withContext(function($ctx1) {
  53806. //>>excludeEnd("ctx");
  53807. var $1;
  53808. $1=self.__tild_eq(self._lookupHierarchyRoot());
  53809. return $1;
  53810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53811. }, function($ctx1) {$ctx1.fill(self,"shouldInheritSelectors",{},$globals.TestCase.klass)});
  53812. //>>excludeEnd("ctx");
  53813. },
  53814. //>>excludeStart("ide", pragmas.excludeIdeData);
  53815. args: [],
  53816. source: "shouldInheritSelectors\x0a\x09^ self ~= self lookupHierarchyRoot",
  53817. referencedClasses: [],
  53818. //>>excludeEnd("ide");
  53819. messageSends: ["~=", "lookupHierarchyRoot"]
  53820. }),
  53821. $globals.TestCase.klass);
  53822. $core.addMethod(
  53823. $core.method({
  53824. selector: "testSelectors",
  53825. protocol: 'accessing',
  53826. fn: function (){
  53827. var self=this;
  53828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53829. return $core.withContext(function($ctx1) {
  53830. //>>excludeEnd("ctx");
  53831. var $1;
  53832. $1=$recv($recv(self._methodDictionary())._keys())._select_((function(each){
  53833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53834. return $core.withContext(function($ctx2) {
  53835. //>>excludeEnd("ctx");
  53836. return $recv(each)._match_("^test");
  53837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53838. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  53839. //>>excludeEnd("ctx");
  53840. }));
  53841. return $1;
  53842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53843. }, function($ctx1) {$ctx1.fill(self,"testSelectors",{},$globals.TestCase.klass)});
  53844. //>>excludeEnd("ctx");
  53845. },
  53846. //>>excludeStart("ide", pragmas.excludeIdeData);
  53847. args: [],
  53848. source: "testSelectors\x0a\x09^ self methodDictionary keys select: [ :each | each match: '^test' ]",
  53849. referencedClasses: [],
  53850. //>>excludeEnd("ide");
  53851. messageSends: ["select:", "keys", "methodDictionary", "match:"]
  53852. }),
  53853. $globals.TestCase.klass);
  53854. $core.addClass('TestContext', $globals.Object, ['testCase'], 'SUnit');
  53855. //>>excludeStart("ide", pragmas.excludeIdeData);
  53856. $globals.TestContext.comment="I govern running a particular test case.\x0a\x0aMy main added value is `#execute:` method which runs a block as a part of test case (restores context, nilling it afterwards, cleaning/calling `#tearDown` as appropriate for sync/async scenario).";
  53857. //>>excludeEnd("ide");
  53858. $core.addMethod(
  53859. $core.method({
  53860. selector: "execute:",
  53861. protocol: 'running',
  53862. fn: function (aBlock){
  53863. var self=this;
  53864. var failed;
  53865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53866. return $core.withContext(function($ctx1) {
  53867. //>>excludeEnd("ctx");
  53868. var $1,$2;
  53869. $recv(self["@testCase"])._context_(self);
  53870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53871. $ctx1.sendIdx["context:"]=1;
  53872. //>>excludeEnd("ctx");
  53873. $recv((function(){
  53874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53875. return $core.withContext(function($ctx2) {
  53876. //>>excludeEnd("ctx");
  53877. failed=true;
  53878. failed;
  53879. $recv(aBlock)._value();
  53880. failed=false;
  53881. return failed;
  53882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53883. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  53884. //>>excludeEnd("ctx");
  53885. }))._ensure_((function(){
  53886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53887. return $core.withContext(function($ctx2) {
  53888. //>>excludeEnd("ctx");
  53889. $recv(self["@testCase"])._context_(nil);
  53890. $1=$recv(failed)._and_((function(){
  53891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53892. return $core.withContext(function($ctx3) {
  53893. //>>excludeEnd("ctx");
  53894. return $recv(self["@testCase"])._isAsync();
  53895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53896. $ctx3.sendIdx["isAsync"]=1;
  53897. //>>excludeEnd("ctx");
  53898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53899. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  53900. //>>excludeEnd("ctx");
  53901. }));
  53902. if($core.assert($1)){
  53903. $recv(self["@testCase"])._finished();
  53904. };
  53905. $2=$recv(self["@testCase"])._isAsync();
  53906. if(!$core.assert($2)){
  53907. return $recv(self["@testCase"])._tearDown();
  53908. };
  53909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53910. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  53911. //>>excludeEnd("ctx");
  53912. }));
  53913. return self;
  53914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53915. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock,failed:failed},$globals.TestContext)});
  53916. //>>excludeEnd("ctx");
  53917. },
  53918. //>>excludeStart("ide", pragmas.excludeIdeData);
  53919. args: ["aBlock"],
  53920. source: "execute: aBlock\x0a\x09| failed |\x0a\x09\x0a\x09testCase context: self.\x0a\x09[\x0a\x09\x09failed := true.\x0a\x09\x09aBlock value.\x0a\x09\x09failed := false\x0a\x09]\x0a\x09\x09ensure: [\x0a\x09\x09\x09testCase context: nil.\x0a\x09\x09\x09\x0a\x09\x09\x09(failed and: [ testCase isAsync ]) ifTrue: [\x0a\x09\x09\x09\x09testCase finished ].\x0a\x09\x09\x09testCase isAsync ifFalse: [\x0a\x09\x09\x09\x09testCase tearDown ] ]",
  53921. referencedClasses: [],
  53922. //>>excludeEnd("ide");
  53923. messageSends: ["context:", "ensure:", "value", "ifTrue:", "and:", "isAsync", "finished", "ifFalse:", "tearDown"]
  53924. }),
  53925. $globals.TestContext);
  53926. $core.addMethod(
  53927. $core.method({
  53928. selector: "start",
  53929. protocol: 'running',
  53930. fn: function (){
  53931. var self=this;
  53932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53933. return $core.withContext(function($ctx1) {
  53934. //>>excludeEnd("ctx");
  53935. self._execute_((function(){
  53936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53937. return $core.withContext(function($ctx2) {
  53938. //>>excludeEnd("ctx");
  53939. $recv(self["@testCase"])._setUp();
  53940. return $recv(self["@testCase"])._performTest();
  53941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53942. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  53943. //>>excludeEnd("ctx");
  53944. }));
  53945. return self;
  53946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53947. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.TestContext)});
  53948. //>>excludeEnd("ctx");
  53949. },
  53950. //>>excludeStart("ide", pragmas.excludeIdeData);
  53951. args: [],
  53952. source: "start\x0a\x09self execute: [\x0a\x09\x09testCase setUp.\x0a\x09\x09testCase performTest ]",
  53953. referencedClasses: [],
  53954. //>>excludeEnd("ide");
  53955. messageSends: ["execute:", "setUp", "performTest"]
  53956. }),
  53957. $globals.TestContext);
  53958. $core.addMethod(
  53959. $core.method({
  53960. selector: "testCase:",
  53961. protocol: 'accessing',
  53962. fn: function (aTestCase){
  53963. var self=this;
  53964. self["@testCase"]=aTestCase;
  53965. return self;
  53966. },
  53967. //>>excludeStart("ide", pragmas.excludeIdeData);
  53968. args: ["aTestCase"],
  53969. source: "testCase: aTestCase\x0a\x09testCase := aTestCase",
  53970. referencedClasses: [],
  53971. //>>excludeEnd("ide");
  53972. messageSends: []
  53973. }),
  53974. $globals.TestContext);
  53975. $core.addMethod(
  53976. $core.method({
  53977. selector: "testCase:",
  53978. protocol: 'instance creation',
  53979. fn: function (aTestCase){
  53980. var self=this;
  53981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53982. return $core.withContext(function($ctx1) {
  53983. //>>excludeEnd("ctx");
  53984. var $2,$3,$1;
  53985. $2=self._new();
  53986. $recv($2)._testCase_(aTestCase);
  53987. $3=$recv($2)._yourself();
  53988. $1=$3;
  53989. return $1;
  53990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  53991. }, function($ctx1) {$ctx1.fill(self,"testCase:",{aTestCase:aTestCase},$globals.TestContext.klass)});
  53992. //>>excludeEnd("ctx");
  53993. },
  53994. //>>excludeStart("ide", pragmas.excludeIdeData);
  53995. args: ["aTestCase"],
  53996. source: "testCase: aTestCase\x0a\x09^ self new\x0a\x09\x09testCase: aTestCase;\x0a\x09\x09yourself",
  53997. referencedClasses: [],
  53998. //>>excludeEnd("ide");
  53999. messageSends: ["testCase:", "new", "yourself"]
  54000. }),
  54001. $globals.TestContext.klass);
  54002. $core.addClass('ReportingTestContext', $globals.TestContext, ['finished', 'result'], 'SUnit');
  54003. //>>excludeStart("ide", pragmas.excludeIdeData);
  54004. $globals.ReportingTestContext.comment="I add `TestResult` reporting to `TestContext`.\x0a\x0aErrors are caught and save into a `TestResult`,\x0aWhen test case is finished (which can be later for async tests), a callback block is executed; this is used by a `TestSuiteRunner`.";
  54005. //>>excludeEnd("ide");
  54006. $core.addMethod(
  54007. $core.method({
  54008. selector: "execute:",
  54009. protocol: 'running',
  54010. fn: function (aBlock){
  54011. var self=this;
  54012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54013. return $core.withContext(function($ctx1) {
  54014. //>>excludeEnd("ctx");
  54015. var $1;
  54016. $recv((function(){
  54017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54018. return $core.withContext(function($ctx2) {
  54019. //>>excludeEnd("ctx");
  54020. return self._withErrorReporting_((function(){
  54021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54022. return $core.withContext(function($ctx3) {
  54023. //>>excludeEnd("ctx");
  54024. return (
  54025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54026. $ctx3.supercall = true,
  54027. //>>excludeEnd("ctx");
  54028. $globals.ReportingTestContext.superclass.fn.prototype._execute_.apply($recv(self), [aBlock]));
  54029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54030. $ctx3.supercall = false;
  54031. //>>excludeEnd("ctx");;
  54032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54033. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  54034. //>>excludeEnd("ctx");
  54035. }));
  54036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54037. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54038. //>>excludeEnd("ctx");
  54039. }))._ensure_((function(){
  54040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54041. return $core.withContext(function($ctx2) {
  54042. //>>excludeEnd("ctx");
  54043. $1=$recv(self["@testCase"])._isAsync();
  54044. if(!$core.assert($1)){
  54045. $recv(self["@result"])._increaseRuns();
  54046. return $recv(self["@finished"])._value();
  54047. };
  54048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54049. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  54050. //>>excludeEnd("ctx");
  54051. }));
  54052. return self;
  54053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54054. }, function($ctx1) {$ctx1.fill(self,"execute:",{aBlock:aBlock},$globals.ReportingTestContext)});
  54055. //>>excludeEnd("ctx");
  54056. },
  54057. //>>excludeStart("ide", pragmas.excludeIdeData);
  54058. args: ["aBlock"],
  54059. source: "execute: aBlock\x0a\x09[\x0a\x09\x09self withErrorReporting: [ super execute: aBlock ]\x0a\x09]\x0a\x09\x09ensure: [\x0a\x09\x09\x09testCase isAsync ifFalse: [\x0a\x09\x09\x09\x09result increaseRuns. finished value ] ]",
  54060. referencedClasses: [],
  54061. //>>excludeEnd("ide");
  54062. messageSends: ["ensure:", "withErrorReporting:", "execute:", "ifFalse:", "isAsync", "increaseRuns", "value"]
  54063. }),
  54064. $globals.ReportingTestContext);
  54065. $core.addMethod(
  54066. $core.method({
  54067. selector: "finished:",
  54068. protocol: 'accessing',
  54069. fn: function (aBlock){
  54070. var self=this;
  54071. self["@finished"]=aBlock;
  54072. return self;
  54073. },
  54074. //>>excludeStart("ide", pragmas.excludeIdeData);
  54075. args: ["aBlock"],
  54076. source: "finished: aBlock\x0a\x09finished := aBlock",
  54077. referencedClasses: [],
  54078. //>>excludeEnd("ide");
  54079. messageSends: []
  54080. }),
  54081. $globals.ReportingTestContext);
  54082. $core.addMethod(
  54083. $core.method({
  54084. selector: "result:",
  54085. protocol: 'accessing',
  54086. fn: function (aTestResult){
  54087. var self=this;
  54088. self["@result"]=aTestResult;
  54089. return self;
  54090. },
  54091. //>>excludeStart("ide", pragmas.excludeIdeData);
  54092. args: ["aTestResult"],
  54093. source: "result: aTestResult\x0a\x09result := aTestResult",
  54094. referencedClasses: [],
  54095. //>>excludeEnd("ide");
  54096. messageSends: []
  54097. }),
  54098. $globals.ReportingTestContext);
  54099. $core.addMethod(
  54100. $core.method({
  54101. selector: "withErrorReporting:",
  54102. protocol: 'private',
  54103. fn: function (aBlock){
  54104. var self=this;
  54105. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  54106. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  54107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54108. return $core.withContext(function($ctx1) {
  54109. //>>excludeEnd("ctx");
  54110. $recv((function(){
  54111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54112. return $core.withContext(function($ctx2) {
  54113. //>>excludeEnd("ctx");
  54114. return $recv(aBlock)._on_do_($TestFailure(),(function(ex){
  54115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54116. return $core.withContext(function($ctx3) {
  54117. //>>excludeEnd("ctx");
  54118. return $recv(self["@result"])._addFailure_(self["@testCase"]);
  54119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54120. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,2)});
  54121. //>>excludeEnd("ctx");
  54122. }));
  54123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54124. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54125. //>>excludeEnd("ctx");
  54126. }))._on_do_($Error(),(function(ex){
  54127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54128. return $core.withContext(function($ctx2) {
  54129. //>>excludeEnd("ctx");
  54130. return $recv(self["@result"])._addError_(self["@testCase"]);
  54131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54132. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,3)});
  54133. //>>excludeEnd("ctx");
  54134. }));
  54135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54136. $ctx1.sendIdx["on:do:"]=1;
  54137. //>>excludeEnd("ctx");
  54138. return self;
  54139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54140. }, function($ctx1) {$ctx1.fill(self,"withErrorReporting:",{aBlock:aBlock},$globals.ReportingTestContext)});
  54141. //>>excludeEnd("ctx");
  54142. },
  54143. //>>excludeStart("ide", pragmas.excludeIdeData);
  54144. args: ["aBlock"],
  54145. source: "withErrorReporting: aBlock\x0a\x09[ aBlock\x0a\x09\x09on: TestFailure\x0a\x09\x09do: [ :ex | result addFailure: testCase ]\x0a\x09]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :ex | result addError: testCase ]",
  54146. referencedClasses: ["TestFailure", "Error"],
  54147. //>>excludeEnd("ide");
  54148. messageSends: ["on:do:", "addFailure:", "addError:"]
  54149. }),
  54150. $globals.ReportingTestContext);
  54151. $core.addMethod(
  54152. $core.method({
  54153. selector: "testCase:result:finished:",
  54154. protocol: 'instance creation',
  54155. fn: function (aTestCase,aTestResult,aBlock){
  54156. var self=this;
  54157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54158. return $core.withContext(function($ctx1) {
  54159. //>>excludeEnd("ctx");
  54160. var $2,$3,$1;
  54161. $2=(
  54162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54163. $ctx1.supercall = true,
  54164. //>>excludeEnd("ctx");
  54165. $globals.ReportingTestContext.klass.superclass.fn.prototype._testCase_.apply($recv(self), [aTestCase]));
  54166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54167. $ctx1.supercall = false;
  54168. //>>excludeEnd("ctx");;
  54169. $recv($2)._result_(aTestResult);
  54170. $recv($2)._finished_(aBlock);
  54171. $3=$recv($2)._yourself();
  54172. $1=$3;
  54173. return $1;
  54174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54175. }, function($ctx1) {$ctx1.fill(self,"testCase:result:finished:",{aTestCase:aTestCase,aTestResult:aTestResult,aBlock:aBlock},$globals.ReportingTestContext.klass)});
  54176. //>>excludeEnd("ctx");
  54177. },
  54178. //>>excludeStart("ide", pragmas.excludeIdeData);
  54179. args: ["aTestCase", "aTestResult", "aBlock"],
  54180. source: "testCase: aTestCase result: aTestResult finished: aBlock\x0a\x09^ (super testCase: aTestCase)\x0a\x09\x09result: aTestResult;\x0a\x09\x09finished: aBlock;\x0a\x09\x09yourself",
  54181. referencedClasses: [],
  54182. //>>excludeEnd("ide");
  54183. messageSends: ["result:", "testCase:", "finished:", "yourself"]
  54184. }),
  54185. $globals.ReportingTestContext.klass);
  54186. $core.addClass('TestFailure', $globals.Error, [], 'SUnit');
  54187. //>>excludeStart("ide", pragmas.excludeIdeData);
  54188. $globals.TestFailure.comment="I am raised when the boolean parameter of an #`assert:` or `#deny:` call is the opposite of what the assertion claims.\x0a\x0aThe test framework distinguishes between failures and errors.\x0aA failure is an event whose possibiity is explicitly anticipated and checked for in an assertion,\x0awhereas an error is an unanticipated problem like a division by 0 or an index out of bounds.";
  54189. //>>excludeEnd("ide");
  54190. $core.addClass('TestResult', $globals.Object, ['timestamp', 'runs', 'errors', 'failures', 'total'], 'SUnit');
  54191. //>>excludeStart("ide", pragmas.excludeIdeData);
  54192. $globals.TestResult.comment="I implement the collecting parameter pattern for running a bunch of tests.\x0a\x0aMy instances hold tests that have run, sorted into the result categories of passed, failures and errors.\x0a\x0a`TestResult` is an interesting object to subclass or substitute. `#runCase:` is the external protocol you need to reproduce";
  54193. //>>excludeEnd("ide");
  54194. $core.addMethod(
  54195. $core.method({
  54196. selector: "addError:",
  54197. protocol: 'accessing',
  54198. fn: function (anError){
  54199. var self=this;
  54200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54201. return $core.withContext(function($ctx1) {
  54202. //>>excludeEnd("ctx");
  54203. $recv(self._errors())._add_(anError);
  54204. return self;
  54205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54206. }, function($ctx1) {$ctx1.fill(self,"addError:",{anError:anError},$globals.TestResult)});
  54207. //>>excludeEnd("ctx");
  54208. },
  54209. //>>excludeStart("ide", pragmas.excludeIdeData);
  54210. args: ["anError"],
  54211. source: "addError: anError\x0a\x09self errors add: anError",
  54212. referencedClasses: [],
  54213. //>>excludeEnd("ide");
  54214. messageSends: ["add:", "errors"]
  54215. }),
  54216. $globals.TestResult);
  54217. $core.addMethod(
  54218. $core.method({
  54219. selector: "addFailure:",
  54220. protocol: 'accessing',
  54221. fn: function (aFailure){
  54222. var self=this;
  54223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54224. return $core.withContext(function($ctx1) {
  54225. //>>excludeEnd("ctx");
  54226. $recv(self._failures())._add_(aFailure);
  54227. return self;
  54228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54229. }, function($ctx1) {$ctx1.fill(self,"addFailure:",{aFailure:aFailure},$globals.TestResult)});
  54230. //>>excludeEnd("ctx");
  54231. },
  54232. //>>excludeStart("ide", pragmas.excludeIdeData);
  54233. args: ["aFailure"],
  54234. source: "addFailure: aFailure\x0a\x09self failures add: aFailure",
  54235. referencedClasses: [],
  54236. //>>excludeEnd("ide");
  54237. messageSends: ["add:", "failures"]
  54238. }),
  54239. $globals.TestResult);
  54240. $core.addMethod(
  54241. $core.method({
  54242. selector: "errors",
  54243. protocol: 'accessing',
  54244. fn: function (){
  54245. var self=this;
  54246. var $1;
  54247. $1=self["@errors"];
  54248. return $1;
  54249. },
  54250. //>>excludeStart("ide", pragmas.excludeIdeData);
  54251. args: [],
  54252. source: "errors\x0a\x09^ errors",
  54253. referencedClasses: [],
  54254. //>>excludeEnd("ide");
  54255. messageSends: []
  54256. }),
  54257. $globals.TestResult);
  54258. $core.addMethod(
  54259. $core.method({
  54260. selector: "failures",
  54261. protocol: 'accessing',
  54262. fn: function (){
  54263. var self=this;
  54264. var $1;
  54265. $1=self["@failures"];
  54266. return $1;
  54267. },
  54268. //>>excludeStart("ide", pragmas.excludeIdeData);
  54269. args: [],
  54270. source: "failures\x0a\x09^ failures",
  54271. referencedClasses: [],
  54272. //>>excludeEnd("ide");
  54273. messageSends: []
  54274. }),
  54275. $globals.TestResult);
  54276. $core.addMethod(
  54277. $core.method({
  54278. selector: "increaseRuns",
  54279. protocol: 'accessing',
  54280. fn: function (){
  54281. var self=this;
  54282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54283. return $core.withContext(function($ctx1) {
  54284. //>>excludeEnd("ctx");
  54285. self["@runs"]=$recv(self["@runs"]).__plus((1));
  54286. return self;
  54287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54288. }, function($ctx1) {$ctx1.fill(self,"increaseRuns",{},$globals.TestResult)});
  54289. //>>excludeEnd("ctx");
  54290. },
  54291. //>>excludeStart("ide", pragmas.excludeIdeData);
  54292. args: [],
  54293. source: "increaseRuns\x0a\x09runs := runs + 1",
  54294. referencedClasses: [],
  54295. //>>excludeEnd("ide");
  54296. messageSends: ["+"]
  54297. }),
  54298. $globals.TestResult);
  54299. $core.addMethod(
  54300. $core.method({
  54301. selector: "initialize",
  54302. protocol: 'initialization',
  54303. fn: function (){
  54304. var self=this;
  54305. function $Date(){return $globals.Date||(typeof Date=="undefined"?nil:Date)}
  54306. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  54307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54308. return $core.withContext(function($ctx1) {
  54309. //>>excludeEnd("ctx");
  54310. (
  54311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54312. $ctx1.supercall = true,
  54313. //>>excludeEnd("ctx");
  54314. $globals.TestResult.superclass.fn.prototype._initialize.apply($recv(self), []));
  54315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54316. $ctx1.supercall = false;
  54317. //>>excludeEnd("ctx");;
  54318. self["@timestamp"]=$recv($Date())._now();
  54319. self["@runs"]=(0);
  54320. self["@errors"]=$recv($Array())._new();
  54321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54322. $ctx1.sendIdx["new"]=1;
  54323. //>>excludeEnd("ctx");
  54324. self["@failures"]=$recv($Array())._new();
  54325. self["@total"]=(0);
  54326. return self;
  54327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54328. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestResult)});
  54329. //>>excludeEnd("ctx");
  54330. },
  54331. //>>excludeStart("ide", pragmas.excludeIdeData);
  54332. args: [],
  54333. source: "initialize\x0a\x09super initialize.\x0a\x09timestamp := Date now.\x0a\x09runs := 0.\x0a\x09errors := Array new.\x0a\x09failures := Array new.\x0a\x09total := 0",
  54334. referencedClasses: ["Date", "Array"],
  54335. //>>excludeEnd("ide");
  54336. messageSends: ["initialize", "now", "new"]
  54337. }),
  54338. $globals.TestResult);
  54339. $core.addMethod(
  54340. $core.method({
  54341. selector: "nextRunDo:",
  54342. protocol: 'running',
  54343. fn: function (aBlock){
  54344. var self=this;
  54345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54346. return $core.withContext(function($ctx1) {
  54347. //>>excludeEnd("ctx");
  54348. var $3,$2,$1;
  54349. $3=self._runs();
  54350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54351. $ctx1.sendIdx["runs"]=1;
  54352. //>>excludeEnd("ctx");
  54353. $2=$recv($3).__eq_eq(self._total());
  54354. if(!$core.assert($2)){
  54355. $1=$recv(aBlock)._value_($recv(self._runs()).__plus((1)));
  54356. };
  54357. return $1;
  54358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54359. }, function($ctx1) {$ctx1.fill(self,"nextRunDo:",{aBlock:aBlock},$globals.TestResult)});
  54360. //>>excludeEnd("ctx");
  54361. },
  54362. //>>excludeStart("ide", pragmas.excludeIdeData);
  54363. args: ["aBlock"],
  54364. source: "nextRunDo: aBlock\x0a\x09\x22Runs aBlock with index of next run or does nothing if no more runs\x22\x0a\x09^ self runs == self total\x0a\x09\x09ifFalse: [ aBlock value: self runs + 1 ]",
  54365. referencedClasses: [],
  54366. //>>excludeEnd("ide");
  54367. messageSends: ["ifFalse:", "==", "runs", "total", "value:", "+"]
  54368. }),
  54369. $globals.TestResult);
  54370. $core.addMethod(
  54371. $core.method({
  54372. selector: "runCase:",
  54373. protocol: 'running',
  54374. fn: function (aTestCase){
  54375. var self=this;
  54376. function $TestFailure(){return $globals.TestFailure||(typeof TestFailure=="undefined"?nil:TestFailure)}
  54377. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  54378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54379. return $core.withContext(function($ctx1) {
  54380. //>>excludeEnd("ctx");
  54381. $recv((function(){
  54382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54383. return $core.withContext(function($ctx2) {
  54384. //>>excludeEnd("ctx");
  54385. return $recv((function(){
  54386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54387. return $core.withContext(function($ctx3) {
  54388. //>>excludeEnd("ctx");
  54389. self._increaseRuns();
  54390. return $recv(aTestCase)._runCase();
  54391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54392. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  54393. //>>excludeEnd("ctx");
  54394. }))._on_do_($TestFailure(),(function(ex){
  54395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54396. return $core.withContext(function($ctx3) {
  54397. //>>excludeEnd("ctx");
  54398. return self._addFailure_(aTestCase);
  54399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54400. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)});
  54401. //>>excludeEnd("ctx");
  54402. }));
  54403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54404. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54405. //>>excludeEnd("ctx");
  54406. }))._on_do_($Error(),(function(ex){
  54407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54408. return $core.withContext(function($ctx2) {
  54409. //>>excludeEnd("ctx");
  54410. return self._addError_(aTestCase);
  54411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54412. }, function($ctx2) {$ctx2.fillBlock({ex:ex},$ctx1,4)});
  54413. //>>excludeEnd("ctx");
  54414. }));
  54415. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54416. $ctx1.sendIdx["on:do:"]=1;
  54417. //>>excludeEnd("ctx");
  54418. return self;
  54419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54420. }, function($ctx1) {$ctx1.fill(self,"runCase:",{aTestCase:aTestCase},$globals.TestResult)});
  54421. //>>excludeEnd("ctx");
  54422. },
  54423. //>>excludeStart("ide", pragmas.excludeIdeData);
  54424. args: ["aTestCase"],
  54425. source: "runCase: aTestCase\x0a\x09[ [ self increaseRuns.\x0a\x09\x09aTestCase runCase ]\x0a\x09on: TestFailure do: [ :ex | self addFailure: aTestCase ]]\x0a\x09on: Error do: [ :ex | self addError: aTestCase ]",
  54426. referencedClasses: ["TestFailure", "Error"],
  54427. //>>excludeEnd("ide");
  54428. messageSends: ["on:do:", "increaseRuns", "runCase", "addFailure:", "addError:"]
  54429. }),
  54430. $globals.TestResult);
  54431. $core.addMethod(
  54432. $core.method({
  54433. selector: "runs",
  54434. protocol: 'accessing',
  54435. fn: function (){
  54436. var self=this;
  54437. var $1;
  54438. $1=self["@runs"];
  54439. return $1;
  54440. },
  54441. //>>excludeStart("ide", pragmas.excludeIdeData);
  54442. args: [],
  54443. source: "runs\x0a\x09^ runs",
  54444. referencedClasses: [],
  54445. //>>excludeEnd("ide");
  54446. messageSends: []
  54447. }),
  54448. $globals.TestResult);
  54449. $core.addMethod(
  54450. $core.method({
  54451. selector: "status",
  54452. protocol: 'accessing',
  54453. fn: function (){
  54454. var self=this;
  54455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54456. return $core.withContext(function($ctx1) {
  54457. //>>excludeEnd("ctx");
  54458. var $2,$3,$1;
  54459. $2=$recv(self._errors())._isEmpty();
  54460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54461. $ctx1.sendIdx["isEmpty"]=1;
  54462. //>>excludeEnd("ctx");
  54463. if($core.assert($2)){
  54464. $3=$recv(self._failures())._isEmpty();
  54465. if($core.assert($3)){
  54466. $1="success";
  54467. } else {
  54468. $1="failure";
  54469. };
  54470. } else {
  54471. $1="error";
  54472. };
  54473. return $1;
  54474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54475. }, function($ctx1) {$ctx1.fill(self,"status",{},$globals.TestResult)});
  54476. //>>excludeEnd("ctx");
  54477. },
  54478. //>>excludeStart("ide", pragmas.excludeIdeData);
  54479. args: [],
  54480. source: "status\x0a\x09^ self errors isEmpty\x0a\x09\x09ifTrue: [\x0a\x09\x09\x09self failures isEmpty\x0a\x09\x09\x09\x09ifTrue: [ 'success' ]\x0a\x09\x09\x09\x09ifFalse: [ 'failure' ]]\x0a\x09\x09ifFalse: [ 'error' ]",
  54481. referencedClasses: [],
  54482. //>>excludeEnd("ide");
  54483. messageSends: ["ifTrue:ifFalse:", "isEmpty", "errors", "failures"]
  54484. }),
  54485. $globals.TestResult);
  54486. $core.addMethod(
  54487. $core.method({
  54488. selector: "timestamp",
  54489. protocol: 'accessing',
  54490. fn: function (){
  54491. var self=this;
  54492. var $1;
  54493. $1=self["@timestamp"];
  54494. return $1;
  54495. },
  54496. //>>excludeStart("ide", pragmas.excludeIdeData);
  54497. args: [],
  54498. source: "timestamp\x0a\x09^ timestamp",
  54499. referencedClasses: [],
  54500. //>>excludeEnd("ide");
  54501. messageSends: []
  54502. }),
  54503. $globals.TestResult);
  54504. $core.addMethod(
  54505. $core.method({
  54506. selector: "total",
  54507. protocol: 'accessing',
  54508. fn: function (){
  54509. var self=this;
  54510. var $1;
  54511. $1=self["@total"];
  54512. return $1;
  54513. },
  54514. //>>excludeStart("ide", pragmas.excludeIdeData);
  54515. args: [],
  54516. source: "total\x0a\x09^ total",
  54517. referencedClasses: [],
  54518. //>>excludeEnd("ide");
  54519. messageSends: []
  54520. }),
  54521. $globals.TestResult);
  54522. $core.addMethod(
  54523. $core.method({
  54524. selector: "total:",
  54525. protocol: 'accessing',
  54526. fn: function (aNumber){
  54527. var self=this;
  54528. self["@total"]=aNumber;
  54529. return self;
  54530. },
  54531. //>>excludeStart("ide", pragmas.excludeIdeData);
  54532. args: ["aNumber"],
  54533. source: "total: aNumber\x0a\x09total := aNumber",
  54534. referencedClasses: [],
  54535. //>>excludeEnd("ide");
  54536. messageSends: []
  54537. }),
  54538. $globals.TestResult);
  54539. $core.addClass('TestSuiteRunner', $globals.Object, ['suite', 'result', 'announcer', 'runNextTest'], 'SUnit');
  54540. //>>excludeStart("ide", pragmas.excludeIdeData);
  54541. $globals.TestSuiteRunner.comment="I am responsible for running a collection (`suite`) of tests.\x0a\x0a## API\x0a\x0aInstances should be created using the class-side `#on:` method, taking a collection of tests to run as parameter.\x0aTo run the test suite, use `#run`.";
  54542. //>>excludeEnd("ide");
  54543. $core.addMethod(
  54544. $core.method({
  54545. selector: "announcer",
  54546. protocol: 'accessing',
  54547. fn: function (){
  54548. var self=this;
  54549. var $1;
  54550. $1=self["@announcer"];
  54551. return $1;
  54552. },
  54553. //>>excludeStart("ide", pragmas.excludeIdeData);
  54554. args: [],
  54555. source: "announcer\x0a\x09^ announcer",
  54556. referencedClasses: [],
  54557. //>>excludeEnd("ide");
  54558. messageSends: []
  54559. }),
  54560. $globals.TestSuiteRunner);
  54561. $core.addMethod(
  54562. $core.method({
  54563. selector: "contextOf:",
  54564. protocol: 'private',
  54565. fn: function (anInteger){
  54566. var self=this;
  54567. function $ReportingTestContext(){return $globals.ReportingTestContext||(typeof ReportingTestContext=="undefined"?nil:ReportingTestContext)}
  54568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54569. return $core.withContext(function($ctx1) {
  54570. //>>excludeEnd("ctx");
  54571. var $1;
  54572. $1=$recv($ReportingTestContext())._testCase_result_finished_($recv(self["@suite"])._at_(anInteger),self["@result"],(function(){
  54573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54574. return $core.withContext(function($ctx2) {
  54575. //>>excludeEnd("ctx");
  54576. return self._resume();
  54577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54578. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54579. //>>excludeEnd("ctx");
  54580. }));
  54581. return $1;
  54582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54583. }, function($ctx1) {$ctx1.fill(self,"contextOf:",{anInteger:anInteger},$globals.TestSuiteRunner)});
  54584. //>>excludeEnd("ctx");
  54585. },
  54586. //>>excludeStart("ide", pragmas.excludeIdeData);
  54587. args: ["anInteger"],
  54588. source: "contextOf: anInteger\x0a\x09^ ReportingTestContext testCase: (suite at: anInteger) result: result finished: [ self resume ]",
  54589. referencedClasses: ["ReportingTestContext"],
  54590. //>>excludeEnd("ide");
  54591. messageSends: ["testCase:result:finished:", "at:", "resume"]
  54592. }),
  54593. $globals.TestSuiteRunner);
  54594. $core.addMethod(
  54595. $core.method({
  54596. selector: "initialize",
  54597. protocol: 'initialization',
  54598. fn: function (){
  54599. var self=this;
  54600. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  54601. function $TestResult(){return $globals.TestResult||(typeof TestResult=="undefined"?nil:TestResult)}
  54602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54603. return $core.withContext(function($ctx1) {
  54604. //>>excludeEnd("ctx");
  54605. var $1;
  54606. (
  54607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54608. $ctx1.supercall = true,
  54609. //>>excludeEnd("ctx");
  54610. $globals.TestSuiteRunner.superclass.fn.prototype._initialize.apply($recv(self), []));
  54611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54612. $ctx1.supercall = false;
  54613. //>>excludeEnd("ctx");;
  54614. self["@announcer"]=$recv($Announcer())._new();
  54615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54616. $ctx1.sendIdx["new"]=1;
  54617. //>>excludeEnd("ctx");
  54618. self["@result"]=$recv($TestResult())._new();
  54619. self["@runNextTest"]=(function(){
  54620. var runs;
  54621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54622. return $core.withContext(function($ctx2) {
  54623. //>>excludeEnd("ctx");
  54624. runs=$recv(self["@result"])._runs();
  54625. runs;
  54626. $1=$recv(runs).__lt($recv(self["@result"])._total());
  54627. if($core.assert($1)){
  54628. return $recv(self._contextOf_($recv(runs).__plus((1))))._start();
  54629. };
  54630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54631. }, function($ctx2) {$ctx2.fillBlock({runs:runs},$ctx1,1)});
  54632. //>>excludeEnd("ctx");
  54633. });
  54634. return self;
  54635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54636. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.TestSuiteRunner)});
  54637. //>>excludeEnd("ctx");
  54638. },
  54639. //>>excludeStart("ide", pragmas.excludeIdeData);
  54640. args: [],
  54641. source: "initialize\x0a\x09super initialize.\x0a\x09announcer := Announcer new.\x0a\x09result := TestResult new.\x0a\x09runNextTest := [ | runs | runs := result runs. runs < result total ifTrue: [ (self contextOf: runs + 1) start ] ].",
  54642. referencedClasses: ["Announcer", "TestResult"],
  54643. //>>excludeEnd("ide");
  54644. messageSends: ["initialize", "new", "runs", "ifTrue:", "<", "total", "start", "contextOf:", "+"]
  54645. }),
  54646. $globals.TestSuiteRunner);
  54647. $core.addMethod(
  54648. $core.method({
  54649. selector: "result",
  54650. protocol: 'accessing',
  54651. fn: function (){
  54652. var self=this;
  54653. var $1;
  54654. $1=self["@result"];
  54655. return $1;
  54656. },
  54657. //>>excludeStart("ide", pragmas.excludeIdeData);
  54658. args: [],
  54659. source: "result\x0a\x09^ result",
  54660. referencedClasses: [],
  54661. //>>excludeEnd("ide");
  54662. messageSends: []
  54663. }),
  54664. $globals.TestSuiteRunner);
  54665. $core.addMethod(
  54666. $core.method({
  54667. selector: "resume",
  54668. protocol: 'actions',
  54669. fn: function (){
  54670. var self=this;
  54671. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  54672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54673. return $core.withContext(function($ctx1) {
  54674. //>>excludeEnd("ctx");
  54675. $recv(self["@runNextTest"])._fork();
  54676. $recv(self["@announcer"])._announce_($recv($recv($ResultAnnouncement())._new())._result_(self["@result"]));
  54677. return self;
  54678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54679. }, function($ctx1) {$ctx1.fill(self,"resume",{},$globals.TestSuiteRunner)});
  54680. //>>excludeEnd("ctx");
  54681. },
  54682. //>>excludeStart("ide", pragmas.excludeIdeData);
  54683. args: [],
  54684. source: "resume\x0a\x09runNextTest fork.\x0a\x09announcer announce: (ResultAnnouncement new result: result)",
  54685. referencedClasses: ["ResultAnnouncement"],
  54686. //>>excludeEnd("ide");
  54687. messageSends: ["fork", "announce:", "result:", "new"]
  54688. }),
  54689. $globals.TestSuiteRunner);
  54690. $core.addMethod(
  54691. $core.method({
  54692. selector: "run",
  54693. protocol: 'actions',
  54694. fn: function (){
  54695. var self=this;
  54696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54697. return $core.withContext(function($ctx1) {
  54698. //>>excludeEnd("ctx");
  54699. $recv(self["@result"])._total_($recv(self["@suite"])._size());
  54700. self._resume();
  54701. return self;
  54702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54703. }, function($ctx1) {$ctx1.fill(self,"run",{},$globals.TestSuiteRunner)});
  54704. //>>excludeEnd("ctx");
  54705. },
  54706. //>>excludeStart("ide", pragmas.excludeIdeData);
  54707. args: [],
  54708. source: "run\x0a\x09result total: suite size.\x0a\x09self resume",
  54709. referencedClasses: [],
  54710. //>>excludeEnd("ide");
  54711. messageSends: ["total:", "size", "resume"]
  54712. }),
  54713. $globals.TestSuiteRunner);
  54714. $core.addMethod(
  54715. $core.method({
  54716. selector: "suite:",
  54717. protocol: 'accessing',
  54718. fn: function (aCollection){
  54719. var self=this;
  54720. self["@suite"]=aCollection;
  54721. return self;
  54722. },
  54723. //>>excludeStart("ide", pragmas.excludeIdeData);
  54724. args: ["aCollection"],
  54725. source: "suite: aCollection\x0a\x09suite := aCollection",
  54726. referencedClasses: [],
  54727. //>>excludeEnd("ide");
  54728. messageSends: []
  54729. }),
  54730. $globals.TestSuiteRunner);
  54731. $core.addMethod(
  54732. $core.method({
  54733. selector: "new",
  54734. protocol: 'instance creation',
  54735. fn: function (){
  54736. var self=this;
  54737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54738. return $core.withContext(function($ctx1) {
  54739. //>>excludeEnd("ctx");
  54740. self._shouldNotImplement();
  54741. return self;
  54742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54743. }, function($ctx1) {$ctx1.fill(self,"new",{},$globals.TestSuiteRunner.klass)});
  54744. //>>excludeEnd("ctx");
  54745. },
  54746. //>>excludeStart("ide", pragmas.excludeIdeData);
  54747. args: [],
  54748. source: "new\x0a\x09self shouldNotImplement",
  54749. referencedClasses: [],
  54750. //>>excludeEnd("ide");
  54751. messageSends: ["shouldNotImplement"]
  54752. }),
  54753. $globals.TestSuiteRunner.klass);
  54754. $core.addMethod(
  54755. $core.method({
  54756. selector: "on:",
  54757. protocol: 'instance creation',
  54758. fn: function (aCollection){
  54759. var self=this;
  54760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54761. return $core.withContext(function($ctx1) {
  54762. //>>excludeEnd("ctx");
  54763. var $2,$1;
  54764. $2=(
  54765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54766. $ctx1.supercall = true,
  54767. //>>excludeEnd("ctx");
  54768. $globals.TestSuiteRunner.klass.superclass.fn.prototype._new.apply($recv(self), []));
  54769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54770. $ctx1.supercall = false;
  54771. //>>excludeEnd("ctx");;
  54772. $1=$recv($2)._suite_(aCollection);
  54773. return $1;
  54774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54775. }, function($ctx1) {$ctx1.fill(self,"on:",{aCollection:aCollection},$globals.TestSuiteRunner.klass)});
  54776. //>>excludeEnd("ctx");
  54777. },
  54778. //>>excludeStart("ide", pragmas.excludeIdeData);
  54779. args: ["aCollection"],
  54780. source: "on: aCollection\x0a\x09^ super new suite: aCollection",
  54781. referencedClasses: [],
  54782. //>>excludeEnd("ide");
  54783. messageSends: ["suite:", "new"]
  54784. }),
  54785. $globals.TestSuiteRunner.klass);
  54786. $core.addMethod(
  54787. $core.method({
  54788. selector: "isTestClass",
  54789. protocol: '*SUnit',
  54790. fn: function (){
  54791. var self=this;
  54792. function $TestCase(){return $globals.TestCase||(typeof TestCase=="undefined"?nil:TestCase)}
  54793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54794. return $core.withContext(function($ctx1) {
  54795. //>>excludeEnd("ctx");
  54796. var $1;
  54797. $1=$recv(self._includesBehavior_($TestCase()))._and_((function(){
  54798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54799. return $core.withContext(function($ctx2) {
  54800. //>>excludeEnd("ctx");
  54801. return $recv(self._isAbstract())._not();
  54802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54803. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  54804. //>>excludeEnd("ctx");
  54805. }));
  54806. return $1;
  54807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54808. }, function($ctx1) {$ctx1.fill(self,"isTestClass",{},$globals.Behavior)});
  54809. //>>excludeEnd("ctx");
  54810. },
  54811. //>>excludeStart("ide", pragmas.excludeIdeData);
  54812. args: [],
  54813. source: "isTestClass\x0a\x09^(self includesBehavior: TestCase) and: [ \x0a\x09\x09\x09self isAbstract not ]",
  54814. referencedClasses: ["TestCase"],
  54815. //>>excludeEnd("ide");
  54816. messageSends: ["and:", "includesBehavior:", "not", "isAbstract"]
  54817. }),
  54818. $globals.Behavior);
  54819. $core.addMethod(
  54820. $core.method({
  54821. selector: "isTestPackage",
  54822. protocol: '*SUnit',
  54823. fn: function (){
  54824. var self=this;
  54825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54826. return $core.withContext(function($ctx1) {
  54827. //>>excludeEnd("ctx");
  54828. var $1;
  54829. $1=$recv(self._classes())._anySatisfy_((function(each){
  54830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54831. return $core.withContext(function($ctx2) {
  54832. //>>excludeEnd("ctx");
  54833. return $recv(each)._isTestClass();
  54834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54835. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  54836. //>>excludeEnd("ctx");
  54837. }));
  54838. return $1;
  54839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54840. }, function($ctx1) {$ctx1.fill(self,"isTestPackage",{},$globals.Package)});
  54841. //>>excludeEnd("ctx");
  54842. },
  54843. //>>excludeStart("ide", pragmas.excludeIdeData);
  54844. args: [],
  54845. source: "isTestPackage\x0a\x09^ self classes anySatisfy: [ :each | each isTestClass ]",
  54846. referencedClasses: [],
  54847. //>>excludeEnd("ide");
  54848. messageSends: ["anySatisfy:", "classes", "isTestClass"]
  54849. }),
  54850. $globals.Package);
  54851. });
  54852. define("amber_core/Kernel-ImportExport", ["amber/boot", "amber_core/Kernel-Objects", "amber_core/Kernel-Infrastructure"], function($boot){
  54853. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  54854. var smalltalk=$core,_st=$recv,globals=$globals;
  54855. $core.addPackage('Kernel-ImportExport');
  54856. $core.packages["Kernel-ImportExport"].transport = {"type":"amd","amdNamespace":"amber_core"};
  54857. $core.addClass('AbstractExporter', $globals.Object, [], 'Kernel-ImportExport');
  54858. //>>excludeStart("ide", pragmas.excludeIdeData);
  54859. $globals.AbstractExporter.comment="I am an abstract exporter for Amber source code.\x0a\x0a## API\x0a\x0aUse `#exportPackage:on:` to export a given package on a Stream.";
  54860. //>>excludeEnd("ide");
  54861. $core.addMethod(
  54862. $core.method({
  54863. selector: "chunkEscape:",
  54864. protocol: 'convenience',
  54865. fn: function (aString){
  54866. var self=this;
  54867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54868. return $core.withContext(function($ctx1) {
  54869. //>>excludeEnd("ctx");
  54870. var $1;
  54871. $1=$recv($recv(aString)._replace_with_("!","!!"))._trimBoth();
  54872. return $1;
  54873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54874. }, function($ctx1) {$ctx1.fill(self,"chunkEscape:",{aString:aString},$globals.AbstractExporter)});
  54875. //>>excludeEnd("ctx");
  54876. },
  54877. //>>excludeStart("ide", pragmas.excludeIdeData);
  54878. args: ["aString"],
  54879. source: "chunkEscape: aString\x0a\x09\x22Replace all occurrences of ! with !! and trim at both ends.\x22\x0a\x0a\x09^ (aString replace: '!' with: '!!') trimBoth",
  54880. referencedClasses: [],
  54881. //>>excludeEnd("ide");
  54882. messageSends: ["trimBoth", "replace:with:"]
  54883. }),
  54884. $globals.AbstractExporter);
  54885. $core.addMethod(
  54886. $core.method({
  54887. selector: "classNameFor:",
  54888. protocol: 'convenience',
  54889. fn: function (aClass){
  54890. var self=this;
  54891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54892. return $core.withContext(function($ctx1) {
  54893. //>>excludeEnd("ctx");
  54894. var $2,$3,$4,$1;
  54895. $2=$recv(aClass)._isMetaclass();
  54896. if($core.assert($2)){
  54897. $3=$recv($recv(aClass)._instanceClass())._name();
  54898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54899. $ctx1.sendIdx["name"]=1;
  54900. //>>excludeEnd("ctx");
  54901. $1=$recv($3).__comma(" class");
  54902. } else {
  54903. $4=$recv(aClass)._isNil();
  54904. if($core.assert($4)){
  54905. $1="nil";
  54906. } else {
  54907. $1=$recv(aClass)._name();
  54908. };
  54909. };
  54910. return $1;
  54911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54912. }, function($ctx1) {$ctx1.fill(self,"classNameFor:",{aClass:aClass},$globals.AbstractExporter)});
  54913. //>>excludeEnd("ctx");
  54914. },
  54915. //>>excludeStart("ide", pragmas.excludeIdeData);
  54916. args: ["aClass"],
  54917. source: "classNameFor: aClass\x0a\x09^ aClass isMetaclass\x0a\x09\x09ifTrue: [ aClass instanceClass name, ' class' ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09aClass isNil\x0a\x09\x09\x09\x09ifTrue: [ 'nil' ]\x0a\x09\x09\x09\x09ifFalse: [ aClass name ] ]",
  54918. referencedClasses: [],
  54919. //>>excludeEnd("ide");
  54920. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "name", "instanceClass", "isNil"]
  54921. }),
  54922. $globals.AbstractExporter);
  54923. $core.addMethod(
  54924. $core.method({
  54925. selector: "exportPackage:on:",
  54926. protocol: 'output',
  54927. fn: function (aPackage,aStream){
  54928. var self=this;
  54929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54930. return $core.withContext(function($ctx1) {
  54931. //>>excludeEnd("ctx");
  54932. self._subclassResponsibility();
  54933. return self;
  54934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54935. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.AbstractExporter)});
  54936. //>>excludeEnd("ctx");
  54937. },
  54938. //>>excludeStart("ide", pragmas.excludeIdeData);
  54939. args: ["aPackage", "aStream"],
  54940. source: "exportPackage: aPackage on: aStream\x0a\x09self subclassResponsibility",
  54941. referencedClasses: [],
  54942. //>>excludeEnd("ide");
  54943. messageSends: ["subclassResponsibility"]
  54944. }),
  54945. $globals.AbstractExporter);
  54946. $core.addMethod(
  54947. $core.method({
  54948. selector: "extensionMethodsOfPackage:",
  54949. protocol: 'accessing',
  54950. fn: function (aPackage){
  54951. var self=this;
  54952. var result;
  54953. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  54954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54955. return $core.withContext(function($ctx1) {
  54956. //>>excludeEnd("ctx");
  54957. var $1;
  54958. result=$recv($OrderedCollection())._new();
  54959. $recv(self._extensionProtocolsOfPackage_(aPackage))._do_((function(each){
  54960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54961. return $core.withContext(function($ctx2) {
  54962. //>>excludeEnd("ctx");
  54963. return $recv(result)._addAll_($recv(each)._methods());
  54964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54965. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  54966. //>>excludeEnd("ctx");
  54967. }));
  54968. $1=result;
  54969. return $1;
  54970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54971. }, function($ctx1) {$ctx1.fill(self,"extensionMethodsOfPackage:",{aPackage:aPackage,result:result},$globals.AbstractExporter)});
  54972. //>>excludeEnd("ctx");
  54973. },
  54974. //>>excludeStart("ide", pragmas.excludeIdeData);
  54975. args: ["aPackage"],
  54976. source: "extensionMethodsOfPackage: aPackage\x0a\x09| result |\x0a\x09\x0a\x09result := OrderedCollection new.\x0a\x09\x0a\x09(self extensionProtocolsOfPackage: aPackage) do: [ :each |\x0a\x09\x09result addAll: each methods ].\x0a\x09\x09\x0a\x09^ result",
  54977. referencedClasses: ["OrderedCollection"],
  54978. //>>excludeEnd("ide");
  54979. messageSends: ["new", "do:", "extensionProtocolsOfPackage:", "addAll:", "methods"]
  54980. }),
  54981. $globals.AbstractExporter);
  54982. $core.addMethod(
  54983. $core.method({
  54984. selector: "extensionProtocolsOfPackage:",
  54985. protocol: 'accessing',
  54986. fn: function (aPackage){
  54987. var self=this;
  54988. var extensionName,result;
  54989. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  54990. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  54991. function $ExportMethodProtocol(){return $globals.ExportMethodProtocol||(typeof ExportMethodProtocol=="undefined"?nil:ExportMethodProtocol)}
  54992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54993. return $core.withContext(function($ctx1) {
  54994. //>>excludeEnd("ctx");
  54995. var $1,$2,$3,$4;
  54996. $1=$recv(aPackage)._name();
  54997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54998. $ctx1.sendIdx["name"]=1;
  54999. //>>excludeEnd("ctx");
  55000. extensionName="*".__comma($1);
  55001. result=$recv($OrderedCollection())._new();
  55002. $recv($recv($recv($recv($Smalltalk())._classes())._asArray())._sorted_((function(a,b){
  55003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55004. return $core.withContext(function($ctx2) {
  55005. //>>excludeEnd("ctx");
  55006. $2=$recv(a)._name();
  55007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55008. $ctx2.sendIdx["name"]=2;
  55009. //>>excludeEnd("ctx");
  55010. return $recv($2).__lt($recv(b)._name());
  55011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55012. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  55013. //>>excludeEnd("ctx");
  55014. })))._do_((function(each){
  55015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55016. return $core.withContext(function($ctx2) {
  55017. //>>excludeEnd("ctx");
  55018. return $recv([each,$recv(each)._class()])._do_((function(behavior){
  55019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55020. return $core.withContext(function($ctx3) {
  55021. //>>excludeEnd("ctx");
  55022. $3=$recv($recv(behavior)._protocols())._includes_(extensionName);
  55023. if($core.assert($3)){
  55024. return $recv(result)._add_($recv($ExportMethodProtocol())._name_theClass_(extensionName,behavior));
  55025. };
  55026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55027. }, function($ctx3) {$ctx3.fillBlock({behavior:behavior},$ctx2,3)});
  55028. //>>excludeEnd("ctx");
  55029. }));
  55030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55031. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  55032. //>>excludeEnd("ctx");
  55033. }));
  55034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55035. $ctx1.sendIdx["do:"]=1;
  55036. //>>excludeEnd("ctx");
  55037. $4=result;
  55038. return $4;
  55039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55040. }, function($ctx1) {$ctx1.fill(self,"extensionProtocolsOfPackage:",{aPackage:aPackage,extensionName:extensionName,result:result},$globals.AbstractExporter)});
  55041. //>>excludeEnd("ctx");
  55042. },
  55043. //>>excludeStart("ide", pragmas.excludeIdeData);
  55044. args: ["aPackage"],
  55045. source: "extensionProtocolsOfPackage: aPackage\x0a\x09| extensionName result |\x0a\x09\x0a\x09extensionName := '*', aPackage name.\x0a\x09result := OrderedCollection new.\x0a\x09\x0a\x09\x22The classes must be loaded since it is extensions only.\x0a\x09Therefore topological sorting (dependency resolution) does not matter here.\x0a\x09Not sorting topologically improves the speed by a number of magnitude.\x0a\x09\x0a\x09Not to shuffle diffs, classes are sorted by their name.\x22\x0a\x09\x0a\x09(Smalltalk classes asArray sorted: [ :a :b | a name < b name ]) do: [ :each |\x0a\x09\x09{each. each class} do: [ :behavior |\x0a\x09\x09\x09(behavior protocols includes: extensionName) ifTrue: [\x0a\x09\x09\x09\x09result add: (ExportMethodProtocol name: extensionName theClass: behavior) ] ] ].\x0a\x0a\x09^ result",
  55046. referencedClasses: ["OrderedCollection", "Smalltalk", "ExportMethodProtocol"],
  55047. //>>excludeEnd("ide");
  55048. messageSends: [",", "name", "new", "do:", "sorted:", "asArray", "classes", "<", "class", "ifTrue:", "includes:", "protocols", "add:", "name:theClass:"]
  55049. }),
  55050. $globals.AbstractExporter);
  55051. $core.addClass('ChunkExporter', $globals.AbstractExporter, [], 'Kernel-ImportExport');
  55052. //>>excludeStart("ide", pragmas.excludeIdeData);
  55053. $globals.ChunkExporter.comment="I am an exporter dedicated to outputting Amber source code in the classic Smalltalk chunk format.\x0a\x0aI do not output any compiled code.";
  55054. //>>excludeEnd("ide");
  55055. $core.addMethod(
  55056. $core.method({
  55057. selector: "exportCategoryEpilogueOf:on:",
  55058. protocol: 'output',
  55059. fn: function (aCategory,aStream){
  55060. var self=this;
  55061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55062. return $core.withContext(function($ctx1) {
  55063. //>>excludeEnd("ctx");
  55064. var $1;
  55065. $recv(aStream)._nextPutAll_(" !");
  55066. $recv(aStream)._lf();
  55067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55068. $ctx1.sendIdx["lf"]=1;
  55069. //>>excludeEnd("ctx");
  55070. $1=$recv(aStream)._lf();
  55071. return self;
  55072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55073. }, function($ctx1) {$ctx1.fill(self,"exportCategoryEpilogueOf:on:",{aCategory:aCategory,aStream:aStream},$globals.ChunkExporter)});
  55074. //>>excludeEnd("ctx");
  55075. },
  55076. //>>excludeStart("ide", pragmas.excludeIdeData);
  55077. args: ["aCategory", "aStream"],
  55078. source: "exportCategoryEpilogueOf: aCategory on: aStream\x0a\x09aStream nextPutAll: ' !'; lf; lf",
  55079. referencedClasses: [],
  55080. //>>excludeEnd("ide");
  55081. messageSends: ["nextPutAll:", "lf"]
  55082. }),
  55083. $globals.ChunkExporter);
  55084. $core.addMethod(
  55085. $core.method({
  55086. selector: "exportCategoryPrologueOf:on:",
  55087. protocol: 'output',
  55088. fn: function (aCategory,aStream){
  55089. var self=this;
  55090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55091. return $core.withContext(function($ctx1) {
  55092. //>>excludeEnd("ctx");
  55093. var $1,$3,$2;
  55094. $1="!".__comma(self._classNameFor_($recv(aCategory)._theClass()));
  55095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55096. $ctx1.sendIdx[","]=1;
  55097. //>>excludeEnd("ctx");
  55098. $recv(aStream)._nextPutAll_($1);
  55099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55100. $ctx1.sendIdx["nextPutAll:"]=1;
  55101. //>>excludeEnd("ctx");
  55102. $3=$recv(" methodsFor: '".__comma($recv(aCategory)._name())).__comma("'!");
  55103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55104. $ctx1.sendIdx[","]=2;
  55105. //>>excludeEnd("ctx");
  55106. $2=$recv(aStream)._nextPutAll_($3);
  55107. return self;
  55108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55109. }, function($ctx1) {$ctx1.fill(self,"exportCategoryPrologueOf:on:",{aCategory:aCategory,aStream:aStream},$globals.ChunkExporter)});
  55110. //>>excludeEnd("ctx");
  55111. },
  55112. //>>excludeStart("ide", pragmas.excludeIdeData);
  55113. args: ["aCategory", "aStream"],
  55114. source: "exportCategoryPrologueOf: aCategory on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aCategory theClass);\x0a\x09\x09nextPutAll: ' methodsFor: ''', aCategory name, '''!'",
  55115. referencedClasses: [],
  55116. //>>excludeEnd("ide");
  55117. messageSends: ["nextPutAll:", ",", "classNameFor:", "theClass", "name"]
  55118. }),
  55119. $globals.ChunkExporter);
  55120. $core.addMethod(
  55121. $core.method({
  55122. selector: "exportDefinitionOf:on:",
  55123. protocol: 'output',
  55124. fn: function (aClass,aStream){
  55125. var self=this;
  55126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55127. return $core.withContext(function($ctx1) {
  55128. //>>excludeEnd("ctx");
  55129. var $1,$3,$2,$4,$6,$5,$7,$9,$8,$11,$10,$12;
  55130. $1=self._classNameFor_($recv(aClass)._superclass());
  55131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55132. $ctx1.sendIdx["classNameFor:"]=1;
  55133. //>>excludeEnd("ctx");
  55134. $recv(aStream)._nextPutAll_($1);
  55135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55136. $ctx1.sendIdx["nextPutAll:"]=1;
  55137. //>>excludeEnd("ctx");
  55138. $3=self._classNameFor_(aClass);
  55139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55140. $ctx1.sendIdx["classNameFor:"]=2;
  55141. //>>excludeEnd("ctx");
  55142. $2=" subclass: #".__comma($3);
  55143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55144. $ctx1.sendIdx[","]=1;
  55145. //>>excludeEnd("ctx");
  55146. $recv(aStream)._nextPutAll_($2);
  55147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55148. $ctx1.sendIdx["nextPutAll:"]=2;
  55149. //>>excludeEnd("ctx");
  55150. $recv(aStream)._lf();
  55151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55152. $ctx1.sendIdx["lf"]=1;
  55153. //>>excludeEnd("ctx");
  55154. $recv(aStream)._tab();
  55155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55156. $ctx1.sendIdx["tab"]=1;
  55157. //>>excludeEnd("ctx");
  55158. $4=$recv(aStream)._nextPutAll_("instanceVariableNames: '");
  55159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55160. $ctx1.sendIdx["nextPutAll:"]=3;
  55161. //>>excludeEnd("ctx");
  55162. $recv($recv(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  55163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55164. return $core.withContext(function($ctx2) {
  55165. //>>excludeEnd("ctx");
  55166. return $recv(aStream)._nextPutAll_(each);
  55167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55168. $ctx2.sendIdx["nextPutAll:"]=4;
  55169. //>>excludeEnd("ctx");
  55170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55171. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55172. //>>excludeEnd("ctx");
  55173. }),(function(){
  55174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55175. return $core.withContext(function($ctx2) {
  55176. //>>excludeEnd("ctx");
  55177. return $recv(aStream)._nextPutAll_(" ");
  55178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55179. $ctx2.sendIdx["nextPutAll:"]=5;
  55180. //>>excludeEnd("ctx");
  55181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55182. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  55183. //>>excludeEnd("ctx");
  55184. }));
  55185. $recv(aStream)._nextPutAll_("'");
  55186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55187. $ctx1.sendIdx["nextPutAll:"]=6;
  55188. //>>excludeEnd("ctx");
  55189. $recv(aStream)._lf();
  55190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55191. $ctx1.sendIdx["lf"]=2;
  55192. //>>excludeEnd("ctx");
  55193. $recv(aStream)._tab();
  55194. $6="package: '".__comma($recv(aClass)._category());
  55195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55196. $ctx1.sendIdx[","]=3;
  55197. //>>excludeEnd("ctx");
  55198. $5=$recv($6).__comma("'!");
  55199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55200. $ctx1.sendIdx[","]=2;
  55201. //>>excludeEnd("ctx");
  55202. $recv(aStream)._nextPutAll_($5);
  55203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55204. $ctx1.sendIdx["nextPutAll:"]=7;
  55205. //>>excludeEnd("ctx");
  55206. $7=$recv(aStream)._lf();
  55207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55208. $ctx1.sendIdx["lf"]=3;
  55209. //>>excludeEnd("ctx");
  55210. $9=$recv(aClass)._comment();
  55211. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55212. $ctx1.sendIdx["comment"]=1;
  55213. //>>excludeEnd("ctx");
  55214. $8=$recv($9)._notEmpty();
  55215. if($core.assert($8)){
  55216. $11="!".__comma(self._classNameFor_(aClass));
  55217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55218. $ctx1.sendIdx[","]=5;
  55219. //>>excludeEnd("ctx");
  55220. $10=$recv($11).__comma(" commentStamp!");
  55221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55222. $ctx1.sendIdx[","]=4;
  55223. //>>excludeEnd("ctx");
  55224. $recv(aStream)._nextPutAll_($10);
  55225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55226. $ctx1.sendIdx["nextPutAll:"]=8;
  55227. //>>excludeEnd("ctx");
  55228. $recv(aStream)._lf();
  55229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55230. $ctx1.sendIdx["lf"]=4;
  55231. //>>excludeEnd("ctx");
  55232. $recv(aStream)._nextPutAll_($recv(self._chunkEscape_($recv(aClass)._comment())).__comma("!"));
  55233. $12=$recv(aStream)._lf();
  55234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55235. $ctx1.sendIdx["lf"]=5;
  55236. //>>excludeEnd("ctx");
  55237. $12;
  55238. };
  55239. $recv(aStream)._lf();
  55240. return self;
  55241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55242. }, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.ChunkExporter)});
  55243. //>>excludeEnd("ctx");
  55244. },
  55245. //>>excludeStart("ide", pragmas.excludeIdeData);
  55246. args: ["aClass", "aStream"],
  55247. source: "exportDefinitionOf: aClass on: aStream\x0a\x09\x22Chunk format.\x22\x0a\x0a\x09aStream\x0a\x09\x09nextPutAll: (self classNameFor: aClass superclass);\x0a\x09\x09nextPutAll: ' subclass: #', (self classNameFor: aClass); lf;\x0a\x09\x09tab; nextPutAll: 'instanceVariableNames: '''.\x0a\x09aClass instanceVariableNames\x0a\x09\x09do: [ :each | aStream nextPutAll: each ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09aStream\x0a\x09\x09nextPutAll: ''''; lf;\x0a\x09\x09tab; nextPutAll: 'package: ''', aClass category, '''!'; lf.\x0a\x09aClass comment notEmpty ifTrue: [\x0a\x09\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aClass), ' commentStamp!';lf;\x0a\x09\x09nextPutAll: (self chunkEscape: aClass comment), '!';lf ].\x0a\x09aStream lf",
  55248. referencedClasses: [],
  55249. //>>excludeEnd("ide");
  55250. messageSends: ["nextPutAll:", "classNameFor:", "superclass", ",", "lf", "tab", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "chunkEscape:"]
  55251. }),
  55252. $globals.ChunkExporter);
  55253. $core.addMethod(
  55254. $core.method({
  55255. selector: "exportMetaDefinitionOf:on:",
  55256. protocol: 'output',
  55257. fn: function (aClass,aStream){
  55258. var self=this;
  55259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55260. return $core.withContext(function($ctx1) {
  55261. //>>excludeEnd("ctx");
  55262. var $3,$2,$1,$5,$4,$6,$7;
  55263. $3=$recv(aClass)._class();
  55264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55265. $ctx1.sendIdx["class"]=1;
  55266. //>>excludeEnd("ctx");
  55267. $2=$recv($3)._instanceVariableNames();
  55268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55269. $ctx1.sendIdx["instanceVariableNames"]=1;
  55270. //>>excludeEnd("ctx");
  55271. $1=$recv($2)._isEmpty();
  55272. if(!$core.assert($1)){
  55273. $5=$recv(aClass)._class();
  55274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55275. $ctx1.sendIdx["class"]=2;
  55276. //>>excludeEnd("ctx");
  55277. $4=self._classNameFor_($5);
  55278. $recv(aStream)._nextPutAll_($4);
  55279. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55280. $ctx1.sendIdx["nextPutAll:"]=1;
  55281. //>>excludeEnd("ctx");
  55282. $6=$recv(aStream)._nextPutAll_(" instanceVariableNames: '");
  55283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55284. $ctx1.sendIdx["nextPutAll:"]=2;
  55285. //>>excludeEnd("ctx");
  55286. $6;
  55287. $recv($recv($recv(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  55288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55289. return $core.withContext(function($ctx2) {
  55290. //>>excludeEnd("ctx");
  55291. return $recv(aStream)._nextPutAll_(each);
  55292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55293. $ctx2.sendIdx["nextPutAll:"]=3;
  55294. //>>excludeEnd("ctx");
  55295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55296. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  55297. //>>excludeEnd("ctx");
  55298. }),(function(){
  55299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55300. return $core.withContext(function($ctx2) {
  55301. //>>excludeEnd("ctx");
  55302. return $recv(aStream)._nextPutAll_(" ");
  55303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55304. $ctx2.sendIdx["nextPutAll:"]=4;
  55305. //>>excludeEnd("ctx");
  55306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55307. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  55308. //>>excludeEnd("ctx");
  55309. }));
  55310. $recv(aStream)._nextPutAll_("'!");
  55311. $recv(aStream)._lf();
  55312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55313. $ctx1.sendIdx["lf"]=1;
  55314. //>>excludeEnd("ctx");
  55315. $7=$recv(aStream)._lf();
  55316. $7;
  55317. };
  55318. return self;
  55319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55320. }, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.ChunkExporter)});
  55321. //>>excludeEnd("ctx");
  55322. },
  55323. //>>excludeStart("ide", pragmas.excludeIdeData);
  55324. args: ["aClass", "aStream"],
  55325. source: "exportMetaDefinitionOf: aClass on: aStream\x0a\x0a\x09aClass class instanceVariableNames isEmpty ifFalse: [\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: (self classNameFor: aClass class);\x0a\x09\x09\x09nextPutAll: ' instanceVariableNames: '''.\x0a\x09\x09aClass class instanceVariableNames\x0a\x09\x09\x09do: [ :each | aStream nextPutAll: each ]\x0a\x09\x09\x09separatedBy: [ aStream nextPutAll: ' ' ].\x0a\x09\x09aStream\x0a\x09\x09\x09nextPutAll: '''!'; lf; lf ]",
  55326. referencedClasses: [],
  55327. //>>excludeEnd("ide");
  55328. messageSends: ["ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "classNameFor:", "do:separatedBy:", "lf"]
  55329. }),
  55330. $globals.ChunkExporter);
  55331. $core.addMethod(
  55332. $core.method({
  55333. selector: "exportMethod:on:",
  55334. protocol: 'output',
  55335. fn: function (aMethod,aStream){
  55336. var self=this;
  55337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55338. return $core.withContext(function($ctx1) {
  55339. //>>excludeEnd("ctx");
  55340. var $1;
  55341. $recv(aStream)._lf();
  55342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55343. $ctx1.sendIdx["lf"]=1;
  55344. //>>excludeEnd("ctx");
  55345. $recv(aStream)._lf();
  55346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55347. $ctx1.sendIdx["lf"]=2;
  55348. //>>excludeEnd("ctx");
  55349. $recv(aStream)._nextPutAll_(self._chunkEscape_($recv(aMethod)._source()));
  55350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55351. $ctx1.sendIdx["nextPutAll:"]=1;
  55352. //>>excludeEnd("ctx");
  55353. $recv(aStream)._lf();
  55354. $1=$recv(aStream)._nextPutAll_("!");
  55355. return self;
  55356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55357. }, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},$globals.ChunkExporter)});
  55358. //>>excludeEnd("ctx");
  55359. },
  55360. //>>excludeStart("ide", pragmas.excludeIdeData);
  55361. args: ["aMethod", "aStream"],
  55362. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf;\x0a\x09\x09nextPutAll: '!'",
  55363. referencedClasses: [],
  55364. //>>excludeEnd("ide");
  55365. messageSends: ["lf", "nextPutAll:", "chunkEscape:", "source"]
  55366. }),
  55367. $globals.ChunkExporter);
  55368. $core.addMethod(
  55369. $core.method({
  55370. selector: "exportPackage:on:",
  55371. protocol: 'output',
  55372. fn: function (aPackage,aStream){
  55373. var self=this;
  55374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55375. return $core.withContext(function($ctx1) {
  55376. //>>excludeEnd("ctx");
  55377. var $1;
  55378. self._exportPackageDefinitionOf_on_(aPackage,aStream);
  55379. $recv($recv(aPackage)._sortedClasses())._do_((function(each){
  55380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55381. return $core.withContext(function($ctx2) {
  55382. //>>excludeEnd("ctx");
  55383. self._exportDefinitionOf_on_(each,aStream);
  55384. $1=self._ownMethodProtocolsOfClass_(each);
  55385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55386. $ctx2.sendIdx["ownMethodProtocolsOfClass:"]=1;
  55387. //>>excludeEnd("ctx");
  55388. self._exportProtocols_on_($1,aStream);
  55389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55390. $ctx2.sendIdx["exportProtocols:on:"]=1;
  55391. //>>excludeEnd("ctx");
  55392. self._exportMetaDefinitionOf_on_(each,aStream);
  55393. return self._exportProtocols_on_(self._ownMethodProtocolsOfClass_($recv(each)._class()),aStream);
  55394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55395. $ctx2.sendIdx["exportProtocols:on:"]=2;
  55396. //>>excludeEnd("ctx");
  55397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55398. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55399. //>>excludeEnd("ctx");
  55400. }));
  55401. self._exportProtocols_on_(self._extensionProtocolsOfPackage_(aPackage),aStream);
  55402. return self;
  55403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55404. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.ChunkExporter)});
  55405. //>>excludeEnd("ctx");
  55406. },
  55407. //>>excludeStart("ide", pragmas.excludeIdeData);
  55408. args: ["aPackage", "aStream"],
  55409. source: "exportPackage: aPackage on: aStream\x0a\x0a\x09self exportPackageDefinitionOf: aPackage on: aStream.\x0a\x09\x0a\x09aPackage sortedClasses do: [ :each |\x0a\x09\x09self exportDefinitionOf: each on: aStream.\x0a\x09\x09\x0a\x09\x09self \x0a\x09\x09\x09exportProtocols: (self ownMethodProtocolsOfClass: each)\x0a\x09\x09\x09on: aStream.\x0a\x09\x09\x09\x0a\x09\x09self exportMetaDefinitionOf: each on: aStream.\x0a\x09\x09\x0a\x09\x09self \x0a\x09\x09\x09exportProtocols: (self ownMethodProtocolsOfClass: each class)\x0a\x09\x09\x09on: aStream ].\x0a\x09\x09\x09\x0a\x09self \x0a\x09\x09exportProtocols: (self extensionProtocolsOfPackage: aPackage)\x0a\x09\x09on: aStream",
  55410. referencedClasses: [],
  55411. //>>excludeEnd("ide");
  55412. messageSends: ["exportPackageDefinitionOf:on:", "do:", "sortedClasses", "exportDefinitionOf:on:", "exportProtocols:on:", "ownMethodProtocolsOfClass:", "exportMetaDefinitionOf:on:", "class", "extensionProtocolsOfPackage:"]
  55413. }),
  55414. $globals.ChunkExporter);
  55415. $core.addMethod(
  55416. $core.method({
  55417. selector: "exportPackageDefinitionOf:on:",
  55418. protocol: 'output',
  55419. fn: function (aPackage,aStream){
  55420. var self=this;
  55421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55422. return $core.withContext(function($ctx1) {
  55423. //>>excludeEnd("ctx");
  55424. var $1,$2;
  55425. $1=$recv("Smalltalk createPackage: '".__comma($recv(aPackage)._name())).__comma("'!");
  55426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55427. $ctx1.sendIdx[","]=1;
  55428. //>>excludeEnd("ctx");
  55429. $recv(aStream)._nextPutAll_($1);
  55430. $2=$recv(aStream)._lf();
  55431. return self;
  55432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55433. }, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{aPackage:aPackage,aStream:aStream},$globals.ChunkExporter)});
  55434. //>>excludeEnd("ctx");
  55435. },
  55436. //>>excludeStart("ide", pragmas.excludeIdeData);
  55437. args: ["aPackage", "aStream"],
  55438. source: "exportPackageDefinitionOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'Smalltalk createPackage: ''', aPackage name, '''!';\x0a\x09\x09lf",
  55439. referencedClasses: [],
  55440. //>>excludeEnd("ide");
  55441. messageSends: ["nextPutAll:", ",", "name", "lf"]
  55442. }),
  55443. $globals.ChunkExporter);
  55444. $core.addMethod(
  55445. $core.method({
  55446. selector: "exportProtocol:on:",
  55447. protocol: 'output',
  55448. fn: function (aProtocol,aStream){
  55449. var self=this;
  55450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55451. return $core.withContext(function($ctx1) {
  55452. //>>excludeEnd("ctx");
  55453. self._exportProtocolPrologueOf_on_(aProtocol,aStream);
  55454. $recv($recv(aProtocol)._methods())._do_((function(method){
  55455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55456. return $core.withContext(function($ctx2) {
  55457. //>>excludeEnd("ctx");
  55458. return self._exportMethod_on_(method,aStream);
  55459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55460. }, function($ctx2) {$ctx2.fillBlock({method:method},$ctx1,1)});
  55461. //>>excludeEnd("ctx");
  55462. }));
  55463. self._exportProtocolEpilogueOf_on_(aProtocol,aStream);
  55464. return self;
  55465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55466. }, function($ctx1) {$ctx1.fill(self,"exportProtocol:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  55467. //>>excludeEnd("ctx");
  55468. },
  55469. //>>excludeStart("ide", pragmas.excludeIdeData);
  55470. args: ["aProtocol", "aStream"],
  55471. source: "exportProtocol: aProtocol on: aStream\x0a\x09self exportProtocolPrologueOf: aProtocol on: aStream.\x0a\x09aProtocol methods do: [ :method | \x0a\x09\x09self exportMethod: method on: aStream ].\x0a\x09self exportProtocolEpilogueOf: aProtocol on: aStream",
  55472. referencedClasses: [],
  55473. //>>excludeEnd("ide");
  55474. messageSends: ["exportProtocolPrologueOf:on:", "do:", "methods", "exportMethod:on:", "exportProtocolEpilogueOf:on:"]
  55475. }),
  55476. $globals.ChunkExporter);
  55477. $core.addMethod(
  55478. $core.method({
  55479. selector: "exportProtocolEpilogueOf:on:",
  55480. protocol: 'output',
  55481. fn: function (aProtocol,aStream){
  55482. var self=this;
  55483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55484. return $core.withContext(function($ctx1) {
  55485. //>>excludeEnd("ctx");
  55486. var $1;
  55487. $recv(aStream)._nextPutAll_(" !");
  55488. $recv(aStream)._lf();
  55489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55490. $ctx1.sendIdx["lf"]=1;
  55491. //>>excludeEnd("ctx");
  55492. $1=$recv(aStream)._lf();
  55493. return self;
  55494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55495. }, function($ctx1) {$ctx1.fill(self,"exportProtocolEpilogueOf:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  55496. //>>excludeEnd("ctx");
  55497. },
  55498. //>>excludeStart("ide", pragmas.excludeIdeData);
  55499. args: ["aProtocol", "aStream"],
  55500. source: "exportProtocolEpilogueOf: aProtocol on: aStream\x0a\x09aStream nextPutAll: ' !'; lf; lf",
  55501. referencedClasses: [],
  55502. //>>excludeEnd("ide");
  55503. messageSends: ["nextPutAll:", "lf"]
  55504. }),
  55505. $globals.ChunkExporter);
  55506. $core.addMethod(
  55507. $core.method({
  55508. selector: "exportProtocolPrologueOf:on:",
  55509. protocol: 'output',
  55510. fn: function (aProtocol,aStream){
  55511. var self=this;
  55512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55513. return $core.withContext(function($ctx1) {
  55514. //>>excludeEnd("ctx");
  55515. var $1,$3,$2;
  55516. $1="!".__comma(self._classNameFor_($recv(aProtocol)._theClass()));
  55517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55518. $ctx1.sendIdx[","]=1;
  55519. //>>excludeEnd("ctx");
  55520. $recv(aStream)._nextPutAll_($1);
  55521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55522. $ctx1.sendIdx["nextPutAll:"]=1;
  55523. //>>excludeEnd("ctx");
  55524. $3=$recv(" methodsFor: '".__comma($recv(aProtocol)._name())).__comma("'!");
  55525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55526. $ctx1.sendIdx[","]=2;
  55527. //>>excludeEnd("ctx");
  55528. $2=$recv(aStream)._nextPutAll_($3);
  55529. return self;
  55530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55531. }, function($ctx1) {$ctx1.fill(self,"exportProtocolPrologueOf:on:",{aProtocol:aProtocol,aStream:aStream},$globals.ChunkExporter)});
  55532. //>>excludeEnd("ctx");
  55533. },
  55534. //>>excludeStart("ide", pragmas.excludeIdeData);
  55535. args: ["aProtocol", "aStream"],
  55536. source: "exportProtocolPrologueOf: aProtocol on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '!', (self classNameFor: aProtocol theClass);\x0a\x09\x09nextPutAll: ' methodsFor: ''', aProtocol name, '''!'",
  55537. referencedClasses: [],
  55538. //>>excludeEnd("ide");
  55539. messageSends: ["nextPutAll:", ",", "classNameFor:", "theClass", "name"]
  55540. }),
  55541. $globals.ChunkExporter);
  55542. $core.addMethod(
  55543. $core.method({
  55544. selector: "exportProtocols:on:",
  55545. protocol: 'output',
  55546. fn: function (aCollection,aStream){
  55547. var self=this;
  55548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55549. return $core.withContext(function($ctx1) {
  55550. //>>excludeEnd("ctx");
  55551. $recv(aCollection)._do_((function(each){
  55552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55553. return $core.withContext(function($ctx2) {
  55554. //>>excludeEnd("ctx");
  55555. return self._exportProtocol_on_(each,aStream);
  55556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55557. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55558. //>>excludeEnd("ctx");
  55559. }));
  55560. return self;
  55561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55562. }, function($ctx1) {$ctx1.fill(self,"exportProtocols:on:",{aCollection:aCollection,aStream:aStream},$globals.ChunkExporter)});
  55563. //>>excludeEnd("ctx");
  55564. },
  55565. //>>excludeStart("ide", pragmas.excludeIdeData);
  55566. args: ["aCollection", "aStream"],
  55567. source: "exportProtocols: aCollection on: aStream\x0a\x09aCollection do: [ :each |\x0a\x09\x09self exportProtocol: each on: aStream ]",
  55568. referencedClasses: [],
  55569. //>>excludeEnd("ide");
  55570. messageSends: ["do:", "exportProtocol:on:"]
  55571. }),
  55572. $globals.ChunkExporter);
  55573. $core.addMethod(
  55574. $core.method({
  55575. selector: "extensionCategoriesOfPackage:",
  55576. protocol: 'accessing',
  55577. fn: function (aPackage){
  55578. var self=this;
  55579. var name,map,result;
  55580. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  55581. function $Package(){return $globals.Package||(typeof Package=="undefined"?nil:Package)}
  55582. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  55583. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  55584. function $MethodCategory(){return $globals.MethodCategory||(typeof MethodCategory=="undefined"?nil:MethodCategory)}
  55585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55586. return $core.withContext(function($ctx1) {
  55587. //>>excludeEnd("ctx");
  55588. var $1,$2;
  55589. name=$recv(aPackage)._name();
  55590. result=$recv($OrderedCollection())._new();
  55591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55592. $ctx1.sendIdx["new"]=1;
  55593. //>>excludeEnd("ctx");
  55594. $recv($recv($Package())._sortedClasses_($recv($Smalltalk())._classes()))._do_((function(each){
  55595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55596. return $core.withContext(function($ctx2) {
  55597. //>>excludeEnd("ctx");
  55598. return $recv([each,$recv(each)._class()])._do_((function(aClass){
  55599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55600. return $core.withContext(function($ctx3) {
  55601. //>>excludeEnd("ctx");
  55602. map=$recv($Dictionary())._new();
  55603. map;
  55604. $recv(aClass)._protocolsDo_((function(category,methods){
  55605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55606. return $core.withContext(function($ctx4) {
  55607. //>>excludeEnd("ctx");
  55608. $1=$recv(category).__eq("*".__comma(name));
  55609. if($core.assert($1)){
  55610. return $recv(map)._at_put_(category,methods);
  55611. };
  55612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55613. }, function($ctx4) {$ctx4.fillBlock({category:category,methods:methods},$ctx3,3)});
  55614. //>>excludeEnd("ctx");
  55615. }));
  55616. return $recv(result)._addAll_($recv($recv($recv(map)._keys())._sorted_((function(a,b){
  55617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55618. return $core.withContext(function($ctx4) {
  55619. //>>excludeEnd("ctx");
  55620. return $recv(a).__lt_eq(b);
  55621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55622. }, function($ctx4) {$ctx4.fillBlock({a:a,b:b},$ctx3,5)});
  55623. //>>excludeEnd("ctx");
  55624. })))._collect_((function(category){
  55625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55626. return $core.withContext(function($ctx4) {
  55627. //>>excludeEnd("ctx");
  55628. return $recv($MethodCategory())._name_theClass_methods_(category,aClass,$recv(map)._at_(category));
  55629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55630. }, function($ctx4) {$ctx4.fillBlock({category:category},$ctx3,6)});
  55631. //>>excludeEnd("ctx");
  55632. })));
  55633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55634. }, function($ctx3) {$ctx3.fillBlock({aClass:aClass},$ctx2,2)});
  55635. //>>excludeEnd("ctx");
  55636. }));
  55637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55638. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55639. //>>excludeEnd("ctx");
  55640. }));
  55641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55642. $ctx1.sendIdx["do:"]=1;
  55643. //>>excludeEnd("ctx");
  55644. $2=result;
  55645. return $2;
  55646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55647. }, function($ctx1) {$ctx1.fill(self,"extensionCategoriesOfPackage:",{aPackage:aPackage,name:name,map:map,result:result},$globals.ChunkExporter)});
  55648. //>>excludeEnd("ctx");
  55649. },
  55650. //>>excludeStart("ide", pragmas.excludeIdeData);
  55651. args: ["aPackage"],
  55652. source: "extensionCategoriesOfPackage: aPackage\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| name map result |\x0a\x09name := aPackage name.\x0a\x09result := OrderedCollection new.\x0a\x09(Package sortedClasses: Smalltalk classes) do: [ :each |\x0a\x09\x09{each. each class} do: [ :aClass |\x0a\x09\x09\x09map := Dictionary new.\x0a\x09\x09\x09aClass protocolsDo: [ :category :methods |\x0a\x09\x09\x09\x09category = ('*', name) ifTrue: [ map at: category put: methods ] ].\x0a\x09\x09\x09result addAll: ((map keys sorted: [ :a :b | a <= b ]) collect: [ :category |\x0a\x09\x09\x09\x09MethodCategory name: category theClass: aClass methods: (map at: category) ]) ] ].\x0a\x09^ result",
  55653. referencedClasses: ["OrderedCollection", "Package", "Smalltalk", "Dictionary", "MethodCategory"],
  55654. //>>excludeEnd("ide");
  55655. messageSends: ["name", "new", "do:", "sortedClasses:", "classes", "class", "protocolsDo:", "ifTrue:", "=", ",", "at:put:", "addAll:", "collect:", "sorted:", "keys", "<=", "name:theClass:methods:", "at:"]
  55656. }),
  55657. $globals.ChunkExporter);
  55658. $core.addMethod(
  55659. $core.method({
  55660. selector: "ownCategoriesOfClass:",
  55661. protocol: 'accessing',
  55662. fn: function (aClass){
  55663. var self=this;
  55664. var map;
  55665. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  55666. function $MethodCategory(){return $globals.MethodCategory||(typeof MethodCategory=="undefined"?nil:MethodCategory)}
  55667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55668. return $core.withContext(function($ctx1) {
  55669. //>>excludeEnd("ctx");
  55670. var $1,$2;
  55671. map=$recv($Dictionary())._new();
  55672. $recv(aClass)._protocolsDo_((function(each,methods){
  55673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55674. return $core.withContext(function($ctx2) {
  55675. //>>excludeEnd("ctx");
  55676. $1=$recv(each)._match_("^\x5c*");
  55677. if(!$core.assert($1)){
  55678. return $recv(map)._at_put_(each,methods);
  55679. };
  55680. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55681. }, function($ctx2) {$ctx2.fillBlock({each:each,methods:methods},$ctx1,1)});
  55682. //>>excludeEnd("ctx");
  55683. }));
  55684. $2=$recv($recv($recv(map)._keys())._sorted_((function(a,b){
  55685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55686. return $core.withContext(function($ctx2) {
  55687. //>>excludeEnd("ctx");
  55688. return $recv(a).__lt_eq(b);
  55689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55690. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,3)});
  55691. //>>excludeEnd("ctx");
  55692. })))._collect_((function(each){
  55693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55694. return $core.withContext(function($ctx2) {
  55695. //>>excludeEnd("ctx");
  55696. return $recv($MethodCategory())._name_theClass_methods_(each,aClass,$recv(map)._at_(each));
  55697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55698. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  55699. //>>excludeEnd("ctx");
  55700. }));
  55701. return $2;
  55702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55703. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfClass:",{aClass:aClass,map:map},$globals.ChunkExporter)});
  55704. //>>excludeEnd("ctx");
  55705. },
  55706. //>>excludeStart("ide", pragmas.excludeIdeData);
  55707. args: ["aClass"],
  55708. source: "ownCategoriesOfClass: aClass\x0a\x09\x22Answer the protocols of aClass that are not package extensions\x22\x0a\x09\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09| map |\x0a\x09map := Dictionary new.\x0a\x09aClass protocolsDo: [ :each :methods |\x0a\x09\x09(each match: '^\x5c*') ifFalse: [ map at: each put: methods ] ].\x0a\x09^ (map keys sorted: [ :a :b | a <= b ]) collect: [ :each |\x0a\x09\x09MethodCategory name: each theClass: aClass methods: (map at: each) ]",
  55709. referencedClasses: ["Dictionary", "MethodCategory"],
  55710. //>>excludeEnd("ide");
  55711. messageSends: ["new", "protocolsDo:", "ifFalse:", "match:", "at:put:", "collect:", "sorted:", "keys", "<=", "name:theClass:methods:", "at:"]
  55712. }),
  55713. $globals.ChunkExporter);
  55714. $core.addMethod(
  55715. $core.method({
  55716. selector: "ownCategoriesOfMetaClass:",
  55717. protocol: 'accessing',
  55718. fn: function (aClass){
  55719. var self=this;
  55720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55721. return $core.withContext(function($ctx1) {
  55722. //>>excludeEnd("ctx");
  55723. var $1;
  55724. $1=self._ownCategoriesOfClass_($recv(aClass)._class());
  55725. return $1;
  55726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55727. }, function($ctx1) {$ctx1.fill(self,"ownCategoriesOfMetaClass:",{aClass:aClass},$globals.ChunkExporter)});
  55728. //>>excludeEnd("ctx");
  55729. },
  55730. //>>excludeStart("ide", pragmas.excludeIdeData);
  55731. args: ["aClass"],
  55732. source: "ownCategoriesOfMetaClass: aClass\x0a\x09\x22Issue #143: sort protocol alphabetically\x22\x0a\x0a\x09^ self ownCategoriesOfClass: aClass class",
  55733. referencedClasses: [],
  55734. //>>excludeEnd("ide");
  55735. messageSends: ["ownCategoriesOfClass:", "class"]
  55736. }),
  55737. $globals.ChunkExporter);
  55738. $core.addMethod(
  55739. $core.method({
  55740. selector: "ownMethodProtocolsOfClass:",
  55741. protocol: 'accessing',
  55742. fn: function (aClass){
  55743. var self=this;
  55744. function $ExportMethodProtocol(){return $globals.ExportMethodProtocol||(typeof ExportMethodProtocol=="undefined"?nil:ExportMethodProtocol)}
  55745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55746. return $core.withContext(function($ctx1) {
  55747. //>>excludeEnd("ctx");
  55748. var $1;
  55749. $1=$recv($recv(aClass)._ownProtocols())._collect_((function(each){
  55750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55751. return $core.withContext(function($ctx2) {
  55752. //>>excludeEnd("ctx");
  55753. return $recv($ExportMethodProtocol())._name_theClass_(each,aClass);
  55754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55755. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55756. //>>excludeEnd("ctx");
  55757. }));
  55758. return $1;
  55759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55760. }, function($ctx1) {$ctx1.fill(self,"ownMethodProtocolsOfClass:",{aClass:aClass},$globals.ChunkExporter)});
  55761. //>>excludeEnd("ctx");
  55762. },
  55763. //>>excludeStart("ide", pragmas.excludeIdeData);
  55764. args: ["aClass"],
  55765. source: "ownMethodProtocolsOfClass: aClass\x0a\x09\x22Answer a collection of ExportMethodProtocol object of aClass that are not package extensions\x22\x0a\x09\x0a\x09^ aClass ownProtocols collect: [ :each |\x0a\x09\x09ExportMethodProtocol name: each theClass: aClass ]",
  55766. referencedClasses: ["ExportMethodProtocol"],
  55767. //>>excludeEnd("ide");
  55768. messageSends: ["collect:", "ownProtocols", "name:theClass:"]
  55769. }),
  55770. $globals.ChunkExporter);
  55771. $core.addClass('Exporter', $globals.AbstractExporter, [], 'Kernel-ImportExport');
  55772. //>>excludeStart("ide", pragmas.excludeIdeData);
  55773. $globals.Exporter.comment="I am responsible for outputting Amber code into a JavaScript string.\x0a\x0aThe generated output is enough to reconstruct the exported data, including Smalltalk source code and other metadata.\x0a\x0a## Use case\x0a\x0aI am typically used to save code outside of the Amber runtime (committing to disk, etc.).";
  55774. //>>excludeEnd("ide");
  55775. $core.addMethod(
  55776. $core.method({
  55777. selector: "exportDefinitionOf:on:",
  55778. protocol: 'output',
  55779. fn: function (aClass,aStream){
  55780. var self=this;
  55781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55782. return $core.withContext(function($ctx1) {
  55783. //>>excludeEnd("ctx");
  55784. var $2,$1,$3,$4,$6,$5,$7,$9,$8,$10;
  55785. $recv(aStream)._lf();
  55786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55787. $ctx1.sendIdx["lf"]=1;
  55788. //>>excludeEnd("ctx");
  55789. $recv(aStream)._nextPutAll_("$core.addClass(");
  55790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55791. $ctx1.sendIdx["nextPutAll:"]=1;
  55792. //>>excludeEnd("ctx");
  55793. $2="'".__comma(self._classNameFor_(aClass));
  55794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55795. $ctx1.sendIdx[","]=2;
  55796. //>>excludeEnd("ctx");
  55797. $1=$recv($2).__comma("', ");
  55798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55799. $ctx1.sendIdx[","]=1;
  55800. //>>excludeEnd("ctx");
  55801. $recv(aStream)._nextPutAll_($1);
  55802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55803. $ctx1.sendIdx["nextPutAll:"]=2;
  55804. //>>excludeEnd("ctx");
  55805. $3=self._jsClassNameFor_($recv(aClass)._superclass());
  55806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55807. $ctx1.sendIdx["jsClassNameFor:"]=1;
  55808. //>>excludeEnd("ctx");
  55809. $recv(aStream)._nextPutAll_($3);
  55810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55811. $ctx1.sendIdx["nextPutAll:"]=3;
  55812. //>>excludeEnd("ctx");
  55813. $4=$recv(aStream)._nextPutAll_(", [");
  55814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55815. $ctx1.sendIdx["nextPutAll:"]=4;
  55816. //>>excludeEnd("ctx");
  55817. $recv($recv(aClass)._instanceVariableNames())._do_separatedBy_((function(each){
  55818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55819. return $core.withContext(function($ctx2) {
  55820. //>>excludeEnd("ctx");
  55821. $6="'".__comma(each);
  55822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55823. $ctx2.sendIdx[","]=4;
  55824. //>>excludeEnd("ctx");
  55825. $5=$recv($6).__comma("'");
  55826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55827. $ctx2.sendIdx[","]=3;
  55828. //>>excludeEnd("ctx");
  55829. return $recv(aStream)._nextPutAll_($5);
  55830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55831. $ctx2.sendIdx["nextPutAll:"]=5;
  55832. //>>excludeEnd("ctx");
  55833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55834. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  55835. //>>excludeEnd("ctx");
  55836. }),(function(){
  55837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55838. return $core.withContext(function($ctx2) {
  55839. //>>excludeEnd("ctx");
  55840. return $recv(aStream)._nextPutAll_(", ");
  55841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55842. $ctx2.sendIdx["nextPutAll:"]=6;
  55843. //>>excludeEnd("ctx");
  55844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55845. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  55846. //>>excludeEnd("ctx");
  55847. }));
  55848. $recv(aStream)._nextPutAll_("], '");
  55849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55850. $ctx1.sendIdx["nextPutAll:"]=7;
  55851. //>>excludeEnd("ctx");
  55852. $recv(aStream)._nextPutAll_($recv($recv(aClass)._category()).__comma("'"));
  55853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55854. $ctx1.sendIdx["nextPutAll:"]=8;
  55855. //>>excludeEnd("ctx");
  55856. $7=$recv(aStream)._nextPutAll_(");");
  55857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55858. $ctx1.sendIdx["nextPutAll:"]=9;
  55859. //>>excludeEnd("ctx");
  55860. $9=$recv(aClass)._comment();
  55861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55862. $ctx1.sendIdx["comment"]=1;
  55863. //>>excludeEnd("ctx");
  55864. $8=$recv($9)._notEmpty();
  55865. if($core.assert($8)){
  55866. $recv(aStream)._lf();
  55867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55868. $ctx1.sendIdx["lf"]=2;
  55869. //>>excludeEnd("ctx");
  55870. $recv(aStream)._nextPutAll_("//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);");
  55871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55872. $ctx1.sendIdx["nextPutAll:"]=10;
  55873. //>>excludeEnd("ctx");
  55874. $recv(aStream)._lf();
  55875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55876. $ctx1.sendIdx["lf"]=3;
  55877. //>>excludeEnd("ctx");
  55878. $recv(aStream)._nextPutAll_(self._jsClassNameFor_(aClass));
  55879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55880. $ctx1.sendIdx["nextPutAll:"]=11;
  55881. //>>excludeEnd("ctx");
  55882. $recv(aStream)._nextPutAll_(".comment=");
  55883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55884. $ctx1.sendIdx["nextPutAll:"]=12;
  55885. //>>excludeEnd("ctx");
  55886. $recv(aStream)._nextPutAll_($recv($recv($recv(aClass)._comment())._crlfSanitized())._asJavascript());
  55887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55888. $ctx1.sendIdx["nextPutAll:"]=13;
  55889. //>>excludeEnd("ctx");
  55890. $recv(aStream)._nextPutAll_(";");
  55891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55892. $ctx1.sendIdx["nextPutAll:"]=14;
  55893. //>>excludeEnd("ctx");
  55894. $recv(aStream)._lf();
  55895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55896. $ctx1.sendIdx["lf"]=4;
  55897. //>>excludeEnd("ctx");
  55898. $10=$recv(aStream)._nextPutAll_("//>>excludeEnd(\x22ide\x22);");
  55899. $10;
  55900. };
  55901. $recv(aStream)._lf();
  55902. return self;
  55903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55904. }, function($ctx1) {$ctx1.fill(self,"exportDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.Exporter)});
  55905. //>>excludeEnd("ctx");
  55906. },
  55907. //>>excludeStart("ide", pragmas.excludeIdeData);
  55908. args: ["aClass", "aStream"],
  55909. source: "exportDefinitionOf: aClass on: aStream\x0a\x09aStream\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: '$core.addClass(';\x0a\x09\x09nextPutAll: '''', (self classNameFor: aClass), ''', ';\x0a\x09\x09nextPutAll: (self jsClassNameFor: aClass superclass);\x0a\x09\x09nextPutAll: ', ['.\x0a\x09aClass instanceVariableNames\x0a\x09\x09do: [ :each | aStream nextPutAll: '''', each, '''' ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ', ' ].\x0a\x09aStream\x0a\x09\x09nextPutAll: '], ''';\x0a\x09\x09nextPutAll: aClass category, '''';\x0a\x09\x09nextPutAll: ');'.\x0a\x09aClass comment notEmpty ifTrue: [\x0a\x09\x09aStream\x0a\x09\x09\x09lf;\x0a\x09\x09\x09nextPutAll: '//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);';\x0a\x09\x09\x09lf;\x0a\x09\x09\x09nextPutAll: (self jsClassNameFor: aClass);\x0a\x09\x09\x09nextPutAll: '.comment=';\x0a\x09\x09\x09nextPutAll: aClass comment crlfSanitized asJavascript;\x0a\x09\x09\x09nextPutAll: ';';\x0a\x09\x09\x09lf;\x0a\x09\x09\x09nextPutAll: '//>>excludeEnd(\x22ide\x22);' ].\x0a\x09aStream lf",
  55910. referencedClasses: [],
  55911. //>>excludeEnd("ide");
  55912. messageSends: ["lf", "nextPutAll:", ",", "classNameFor:", "jsClassNameFor:", "superclass", "do:separatedBy:", "instanceVariableNames", "category", "ifTrue:", "notEmpty", "comment", "asJavascript", "crlfSanitized"]
  55913. }),
  55914. $globals.Exporter);
  55915. $core.addMethod(
  55916. $core.method({
  55917. selector: "exportMetaDefinitionOf:on:",
  55918. protocol: 'output',
  55919. fn: function (aClass,aStream){
  55920. var self=this;
  55921. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  55922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55923. return $core.withContext(function($ctx1) {
  55924. //>>excludeEnd("ctx");
  55925. var $3,$2,$1,$5,$4,$6,$8,$7;
  55926. $recv(aStream)._lf();
  55927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55928. $ctx1.sendIdx["lf"]=1;
  55929. //>>excludeEnd("ctx");
  55930. $3=$recv(aClass)._class();
  55931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55932. $ctx1.sendIdx["class"]=1;
  55933. //>>excludeEnd("ctx");
  55934. $2=$recv($3)._instanceVariableNames();
  55935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55936. $ctx1.sendIdx["instanceVariableNames"]=1;
  55937. //>>excludeEnd("ctx");
  55938. $1=$recv($2)._isEmpty();
  55939. if(!$core.assert($1)){
  55940. $5=$recv(aClass)._class();
  55941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55942. $ctx1.sendIdx["class"]=2;
  55943. //>>excludeEnd("ctx");
  55944. $4=self._jsClassNameFor_($5);
  55945. $recv(aStream)._nextPutAll_($4);
  55946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55947. $ctx1.sendIdx["nextPutAll:"]=1;
  55948. //>>excludeEnd("ctx");
  55949. $6=$recv(aStream)._nextPutAll_(".iVarNames = [");
  55950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55951. $ctx1.sendIdx["nextPutAll:"]=2;
  55952. //>>excludeEnd("ctx");
  55953. $6;
  55954. $recv($recv($recv(aClass)._class())._instanceVariableNames())._do_separatedBy_((function(each){
  55955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55956. return $core.withContext(function($ctx2) {
  55957. //>>excludeEnd("ctx");
  55958. $8="'".__comma(each);
  55959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55960. $ctx2.sendIdx[","]=2;
  55961. //>>excludeEnd("ctx");
  55962. $7=$recv($8).__comma("'");
  55963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55964. $ctx2.sendIdx[","]=1;
  55965. //>>excludeEnd("ctx");
  55966. return $recv(aStream)._nextPutAll_($7);
  55967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55968. $ctx2.sendIdx["nextPutAll:"]=3;
  55969. //>>excludeEnd("ctx");
  55970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55971. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  55972. //>>excludeEnd("ctx");
  55973. }),(function(){
  55974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55975. return $core.withContext(function($ctx2) {
  55976. //>>excludeEnd("ctx");
  55977. return $recv(aStream)._nextPutAll_(",");
  55978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55979. $ctx2.sendIdx["nextPutAll:"]=4;
  55980. //>>excludeEnd("ctx");
  55981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55982. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  55983. //>>excludeEnd("ctx");
  55984. }));
  55985. $recv(aStream)._nextPutAll_("];".__comma($recv($String())._lf()));
  55986. };
  55987. return self;
  55988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55989. }, function($ctx1) {$ctx1.fill(self,"exportMetaDefinitionOf:on:",{aClass:aClass,aStream:aStream},$globals.Exporter)});
  55990. //>>excludeEnd("ctx");
  55991. },
  55992. //>>excludeStart("ide", pragmas.excludeIdeData);
  55993. args: ["aClass", "aStream"],
  55994. source: "exportMetaDefinitionOf: aClass on: aStream\x0a\x09aStream lf.\x0a\x09aClass class instanceVariableNames isEmpty ifFalse: [\x0a\x09\x09aStream\x0a\x09\x09nextPutAll: (self jsClassNameFor: aClass class);\x0a\x09\x09nextPutAll: '.iVarNames = ['.\x0a\x09\x09aClass class instanceVariableNames\x0a\x09\x09do: [ :each | aStream nextPutAll: '''', each, '''' ]\x0a\x09\x09separatedBy: [ aStream nextPutAll: ',' ].\x0a\x09\x09aStream nextPutAll: '];', String lf ]",
  55995. referencedClasses: ["String"],
  55996. //>>excludeEnd("ide");
  55997. messageSends: ["lf", "ifFalse:", "isEmpty", "instanceVariableNames", "class", "nextPutAll:", "jsClassNameFor:", "do:separatedBy:", ","]
  55998. }),
  55999. $globals.Exporter);
  56000. $core.addMethod(
  56001. $core.method({
  56002. selector: "exportMethod:on:",
  56003. protocol: 'output',
  56004. fn: function (aMethod,aStream){
  56005. var self=this;
  56006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56007. return $core.withContext(function($ctx1) {
  56008. //>>excludeEnd("ctx");
  56009. var $3,$2,$1,$5,$4,$7,$6,$10,$9,$8,$13,$12,$11,$16,$15,$14,$17;
  56010. $recv(aStream)._nextPutAll_("$core.addMethod(");
  56011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56012. $ctx1.sendIdx["nextPutAll:"]=1;
  56013. //>>excludeEnd("ctx");
  56014. $recv(aStream)._lf();
  56015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56016. $ctx1.sendIdx["lf"]=1;
  56017. //>>excludeEnd("ctx");
  56018. $recv(aStream)._nextPutAll_("$core.method({");
  56019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56020. $ctx1.sendIdx["nextPutAll:"]=2;
  56021. //>>excludeEnd("ctx");
  56022. $recv(aStream)._lf();
  56023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56024. $ctx1.sendIdx["lf"]=2;
  56025. //>>excludeEnd("ctx");
  56026. $3=$recv($recv(aMethod)._selector())._asJavascript();
  56027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56028. $ctx1.sendIdx["asJavascript"]=1;
  56029. //>>excludeEnd("ctx");
  56030. $2="selector: ".__comma($3);
  56031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56032. $ctx1.sendIdx[","]=2;
  56033. //>>excludeEnd("ctx");
  56034. $1=$recv($2).__comma(",");
  56035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56036. $ctx1.sendIdx[","]=1;
  56037. //>>excludeEnd("ctx");
  56038. $recv(aStream)._nextPutAll_($1);
  56039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56040. $ctx1.sendIdx["nextPutAll:"]=3;
  56041. //>>excludeEnd("ctx");
  56042. $recv(aStream)._lf();
  56043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56044. $ctx1.sendIdx["lf"]=3;
  56045. //>>excludeEnd("ctx");
  56046. $5="protocol: '".__comma($recv(aMethod)._protocol());
  56047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56048. $ctx1.sendIdx[","]=4;
  56049. //>>excludeEnd("ctx");
  56050. $4=$recv($5).__comma("',");
  56051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56052. $ctx1.sendIdx[","]=3;
  56053. //>>excludeEnd("ctx");
  56054. $recv(aStream)._nextPutAll_($4);
  56055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56056. $ctx1.sendIdx["nextPutAll:"]=4;
  56057. //>>excludeEnd("ctx");
  56058. $recv(aStream)._lf();
  56059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56060. $ctx1.sendIdx["lf"]=4;
  56061. //>>excludeEnd("ctx");
  56062. $7="fn: ".__comma($recv($recv(aMethod)._fn())._compiledSource());
  56063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56064. $ctx1.sendIdx[","]=6;
  56065. //>>excludeEnd("ctx");
  56066. $6=$recv($7).__comma(",");
  56067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56068. $ctx1.sendIdx[","]=5;
  56069. //>>excludeEnd("ctx");
  56070. $recv(aStream)._nextPutAll_($6);
  56071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56072. $ctx1.sendIdx["nextPutAll:"]=5;
  56073. //>>excludeEnd("ctx");
  56074. $recv(aStream)._lf();
  56075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56076. $ctx1.sendIdx["lf"]=5;
  56077. //>>excludeEnd("ctx");
  56078. $recv(aStream)._nextPutAll_("//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);");
  56079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56080. $ctx1.sendIdx["nextPutAll:"]=6;
  56081. //>>excludeEnd("ctx");
  56082. $recv(aStream)._lf();
  56083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56084. $ctx1.sendIdx["lf"]=6;
  56085. //>>excludeEnd("ctx");
  56086. $10=$recv($recv(aMethod)._arguments())._asJavascript();
  56087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56088. $ctx1.sendIdx["asJavascript"]=2;
  56089. //>>excludeEnd("ctx");
  56090. $9="args: ".__comma($10);
  56091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56092. $ctx1.sendIdx[","]=8;
  56093. //>>excludeEnd("ctx");
  56094. $8=$recv($9).__comma(",");
  56095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56096. $ctx1.sendIdx[","]=7;
  56097. //>>excludeEnd("ctx");
  56098. $recv(aStream)._nextPutAll_($8);
  56099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56100. $ctx1.sendIdx["nextPutAll:"]=7;
  56101. //>>excludeEnd("ctx");
  56102. $recv(aStream)._lf();
  56103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56104. $ctx1.sendIdx["lf"]=7;
  56105. //>>excludeEnd("ctx");
  56106. $13=$recv($recv(aMethod)._source())._asJavascript();
  56107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56108. $ctx1.sendIdx["asJavascript"]=3;
  56109. //>>excludeEnd("ctx");
  56110. $12="source: ".__comma($13);
  56111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56112. $ctx1.sendIdx[","]=10;
  56113. //>>excludeEnd("ctx");
  56114. $11=$recv($12).__comma(",");
  56115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56116. $ctx1.sendIdx[","]=9;
  56117. //>>excludeEnd("ctx");
  56118. $recv(aStream)._nextPutAll_($11);
  56119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56120. $ctx1.sendIdx["nextPutAll:"]=8;
  56121. //>>excludeEnd("ctx");
  56122. $recv(aStream)._lf();
  56123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56124. $ctx1.sendIdx["lf"]=8;
  56125. //>>excludeEnd("ctx");
  56126. $16=$recv($recv(aMethod)._referencedClasses())._asJavascript();
  56127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56128. $ctx1.sendIdx["asJavascript"]=4;
  56129. //>>excludeEnd("ctx");
  56130. $15="referencedClasses: ".__comma($16);
  56131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56132. $ctx1.sendIdx[","]=12;
  56133. //>>excludeEnd("ctx");
  56134. $14=$recv($15).__comma(",");
  56135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56136. $ctx1.sendIdx[","]=11;
  56137. //>>excludeEnd("ctx");
  56138. $recv(aStream)._nextPutAll_($14);
  56139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56140. $ctx1.sendIdx["nextPutAll:"]=9;
  56141. //>>excludeEnd("ctx");
  56142. $recv(aStream)._lf();
  56143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56144. $ctx1.sendIdx["lf"]=9;
  56145. //>>excludeEnd("ctx");
  56146. $recv(aStream)._nextPutAll_("//>>excludeEnd(\x22ide\x22);");
  56147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56148. $ctx1.sendIdx["nextPutAll:"]=10;
  56149. //>>excludeEnd("ctx");
  56150. $recv(aStream)._lf();
  56151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56152. $ctx1.sendIdx["lf"]=10;
  56153. //>>excludeEnd("ctx");
  56154. $recv(aStream)._nextPutAll_("messageSends: ".__comma($recv($recv(aMethod)._messageSends())._asJavascript()));
  56155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56156. $ctx1.sendIdx["nextPutAll:"]=11;
  56157. //>>excludeEnd("ctx");
  56158. $recv(aStream)._lf();
  56159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56160. $ctx1.sendIdx["lf"]=11;
  56161. //>>excludeEnd("ctx");
  56162. $recv(aStream)._nextPutAll_("}),");
  56163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56164. $ctx1.sendIdx["nextPutAll:"]=12;
  56165. //>>excludeEnd("ctx");
  56166. $recv(aStream)._lf();
  56167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56168. $ctx1.sendIdx["lf"]=12;
  56169. //>>excludeEnd("ctx");
  56170. $recv(aStream)._nextPutAll_(self._jsClassNameFor_($recv(aMethod)._methodClass()));
  56171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56172. $ctx1.sendIdx["nextPutAll:"]=13;
  56173. //>>excludeEnd("ctx");
  56174. $recv(aStream)._nextPutAll_(");");
  56175. $recv(aStream)._lf();
  56176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56177. $ctx1.sendIdx["lf"]=13;
  56178. //>>excludeEnd("ctx");
  56179. $17=$recv(aStream)._lf();
  56180. return self;
  56181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56182. }, function($ctx1) {$ctx1.fill(self,"exportMethod:on:",{aMethod:aMethod,aStream:aStream},$globals.Exporter)});
  56183. //>>excludeEnd("ctx");
  56184. },
  56185. //>>excludeStart("ide", pragmas.excludeIdeData);
  56186. args: ["aMethod", "aStream"],
  56187. source: "exportMethod: aMethod on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '$core.addMethod(';lf;\x0a\x09\x09nextPutAll: '$core.method({';lf;\x0a\x09\x09nextPutAll: 'selector: ', aMethod selector asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'protocol: ''', aMethod protocol, ''',';lf;\x0a\x09\x09nextPutAll: 'fn: ', aMethod fn compiledSource, ',';lf;\x0a\x09\x09nextPutAll: '//>>excludeStart(\x22ide\x22, pragmas.excludeIdeData);';lf;\x0a\x09\x09nextPutAll: 'args: ', aMethod arguments asJavascript, ','; lf;\x0a\x09\x09nextPutAll: 'source: ', aMethod source asJavascript, ',';lf;\x0a\x09\x09nextPutAll: 'referencedClasses: ', aMethod referencedClasses asJavascript, ',';lf;\x0a\x09\x09nextPutAll: '//>>excludeEnd(\x22ide\x22);';lf;\x0a\x09\x09nextPutAll: 'messageSends: ', aMethod messageSends asJavascript;lf;\x0a\x09\x09nextPutAll: '}),';lf;\x0a\x09\x09nextPutAll: (self jsClassNameFor: aMethod methodClass);\x0a\x09\x09nextPutAll: ');';lf;lf",
  56188. referencedClasses: [],
  56189. //>>excludeEnd("ide");
  56190. messageSends: ["nextPutAll:", "lf", ",", "asJavascript", "selector", "protocol", "compiledSource", "fn", "arguments", "source", "referencedClasses", "messageSends", "jsClassNameFor:", "methodClass"]
  56191. }),
  56192. $globals.Exporter);
  56193. $core.addMethod(
  56194. $core.method({
  56195. selector: "exportPackage:on:",
  56196. protocol: 'output',
  56197. fn: function (aPackage,aStream){
  56198. var self=this;
  56199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56200. return $core.withContext(function($ctx1) {
  56201. //>>excludeEnd("ctx");
  56202. var $1,$2;
  56203. self._exportPackagePrologueOf_on_(aPackage,aStream);
  56204. self._exportPackageDefinitionOf_on_(aPackage,aStream);
  56205. $1=self._exportPackageTransportOf_on_(aPackage,aStream);
  56206. $recv($recv(aPackage)._sortedClasses())._do_((function(each){
  56207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56208. return $core.withContext(function($ctx2) {
  56209. //>>excludeEnd("ctx");
  56210. self._exportDefinitionOf_on_(each,aStream);
  56211. $2=$recv(each)._ownMethods();
  56212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56213. $ctx2.sendIdx["ownMethods"]=1;
  56214. //>>excludeEnd("ctx");
  56215. $recv($2)._do_((function(method){
  56216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56217. return $core.withContext(function($ctx3) {
  56218. //>>excludeEnd("ctx");
  56219. return self._exportMethod_on_(method,aStream);
  56220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56221. $ctx3.sendIdx["exportMethod:on:"]=1;
  56222. //>>excludeEnd("ctx");
  56223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56224. }, function($ctx3) {$ctx3.fillBlock({method:method},$ctx2,2)});
  56225. //>>excludeEnd("ctx");
  56226. }));
  56227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56228. $ctx2.sendIdx["do:"]=2;
  56229. //>>excludeEnd("ctx");
  56230. self._exportMetaDefinitionOf_on_(each,aStream);
  56231. return $recv($recv($recv(each)._class())._ownMethods())._do_((function(method){
  56232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56233. return $core.withContext(function($ctx3) {
  56234. //>>excludeEnd("ctx");
  56235. return self._exportMethod_on_(method,aStream);
  56236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56237. $ctx3.sendIdx["exportMethod:on:"]=2;
  56238. //>>excludeEnd("ctx");
  56239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56240. }, function($ctx3) {$ctx3.fillBlock({method:method},$ctx2,3)});
  56241. //>>excludeEnd("ctx");
  56242. }));
  56243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56244. $ctx2.sendIdx["do:"]=3;
  56245. //>>excludeEnd("ctx");
  56246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56247. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56248. //>>excludeEnd("ctx");
  56249. }));
  56250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56251. $ctx1.sendIdx["do:"]=1;
  56252. //>>excludeEnd("ctx");
  56253. $recv(self._extensionMethodsOfPackage_(aPackage))._do_((function(each){
  56254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56255. return $core.withContext(function($ctx2) {
  56256. //>>excludeEnd("ctx");
  56257. return self._exportMethod_on_(each,aStream);
  56258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56259. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  56260. //>>excludeEnd("ctx");
  56261. }));
  56262. self._exportPackageEpilogueOf_on_(aPackage,aStream);
  56263. return self;
  56264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56265. }, function($ctx1) {$ctx1.fill(self,"exportPackage:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  56266. //>>excludeEnd("ctx");
  56267. },
  56268. //>>excludeStart("ide", pragmas.excludeIdeData);
  56269. args: ["aPackage", "aStream"],
  56270. source: "exportPackage: aPackage on: aStream\x0a\x09\x0a\x09self \x0a\x09\x09exportPackagePrologueOf: aPackage on: aStream;\x0a\x09\x09exportPackageDefinitionOf: aPackage on: aStream;\x0a\x09\x09exportPackageTransportOf: aPackage on: aStream.\x0a\x09\x0a\x09aPackage sortedClasses do: [ :each |\x0a\x09\x09self exportDefinitionOf: each on: aStream.\x0a\x09\x09each ownMethods do: [ :method |\x0a\x09\x09\x09self exportMethod: method on: aStream ].\x0a\x09\x09\x09\x0a\x09\x09self exportMetaDefinitionOf: each on: aStream.\x0a\x09\x09each class ownMethods do: [ :method |\x0a\x09\x09\x09self exportMethod: method on: aStream ] ].\x0a\x09\x09\x09\x0a\x09(self extensionMethodsOfPackage: aPackage) do: [ :each |\x0a\x09\x09self exportMethod: each on: aStream ].\x0a\x09\x09\x0a\x09self exportPackageEpilogueOf: aPackage on: aStream",
  56271. referencedClasses: [],
  56272. //>>excludeEnd("ide");
  56273. messageSends: ["exportPackagePrologueOf:on:", "exportPackageDefinitionOf:on:", "exportPackageTransportOf:on:", "do:", "sortedClasses", "exportDefinitionOf:on:", "ownMethods", "exportMethod:on:", "exportMetaDefinitionOf:on:", "class", "extensionMethodsOfPackage:", "exportPackageEpilogueOf:on:"]
  56274. }),
  56275. $globals.Exporter);
  56276. $core.addMethod(
  56277. $core.method({
  56278. selector: "exportPackageDefinitionOf:on:",
  56279. protocol: 'output',
  56280. fn: function (aPackage,aStream){
  56281. var self=this;
  56282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56283. return $core.withContext(function($ctx1) {
  56284. //>>excludeEnd("ctx");
  56285. var $1,$2;
  56286. $recv(aStream)._nextPutAll_("$core.addPackage(");
  56287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56288. $ctx1.sendIdx["nextPutAll:"]=1;
  56289. //>>excludeEnd("ctx");
  56290. $1=$recv("'".__comma($recv(aPackage)._name())).__comma("');");
  56291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56292. $ctx1.sendIdx[","]=1;
  56293. //>>excludeEnd("ctx");
  56294. $recv(aStream)._nextPutAll_($1);
  56295. $2=$recv(aStream)._lf();
  56296. return self;
  56297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56298. }, function($ctx1) {$ctx1.fill(self,"exportPackageDefinitionOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  56299. //>>excludeEnd("ctx");
  56300. },
  56301. //>>excludeStart("ide", pragmas.excludeIdeData);
  56302. args: ["aPackage", "aStream"],
  56303. source: "exportPackageDefinitionOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '$core.addPackage(';\x0a\x09\x09nextPutAll: '''', aPackage name, ''');';\x0a\x09\x09lf",
  56304. referencedClasses: [],
  56305. //>>excludeEnd("ide");
  56306. messageSends: ["nextPutAll:", ",", "name", "lf"]
  56307. }),
  56308. $globals.Exporter);
  56309. $core.addMethod(
  56310. $core.method({
  56311. selector: "exportPackageEpilogueOf:on:",
  56312. protocol: 'output',
  56313. fn: function (aPackage,aStream){
  56314. var self=this;
  56315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56316. return $core.withContext(function($ctx1) {
  56317. //>>excludeEnd("ctx");
  56318. var $1;
  56319. $recv(aStream)._nextPutAll_("})(global_smalltalk,global_nil,global__st);");
  56320. $1=$recv(aStream)._lf();
  56321. return self;
  56322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56323. }, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  56324. //>>excludeEnd("ctx");
  56325. },
  56326. //>>excludeStart("ide", pragmas.excludeIdeData);
  56327. args: ["aPackage", "aStream"],
  56328. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '})(global_smalltalk,global_nil,global__st);';\x0a\x09\x09lf",
  56329. referencedClasses: [],
  56330. //>>excludeEnd("ide");
  56331. messageSends: ["nextPutAll:", "lf"]
  56332. }),
  56333. $globals.Exporter);
  56334. $core.addMethod(
  56335. $core.method({
  56336. selector: "exportPackagePrologueOf:on:",
  56337. protocol: 'output',
  56338. fn: function (aPackage,aStream){
  56339. var self=this;
  56340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56341. return $core.withContext(function($ctx1) {
  56342. //>>excludeEnd("ctx");
  56343. var $1;
  56344. $recv(aStream)._nextPutAll_("(function(smalltalk,nil,_st){");
  56345. $1=$recv(aStream)._lf();
  56346. return self;
  56347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56348. }, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  56349. //>>excludeEnd("ctx");
  56350. },
  56351. //>>excludeStart("ide", pragmas.excludeIdeData);
  56352. args: ["aPackage", "aStream"],
  56353. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '(function(smalltalk,nil,_st){';\x0a\x09\x09lf",
  56354. referencedClasses: [],
  56355. //>>excludeEnd("ide");
  56356. messageSends: ["nextPutAll:", "lf"]
  56357. }),
  56358. $globals.Exporter);
  56359. $core.addMethod(
  56360. $core.method({
  56361. selector: "exportPackageTransportOf:on:",
  56362. protocol: 'output',
  56363. fn: function (aPackage,aStream){
  56364. var self=this;
  56365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56366. return $core.withContext(function($ctx1) {
  56367. //>>excludeEnd("ctx");
  56368. var $1;
  56369. $recv(aStream)._nextPutAll_("$core.packages[");
  56370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56371. $ctx1.sendIdx["nextPutAll:"]=1;
  56372. //>>excludeEnd("ctx");
  56373. $recv(aStream)._nextPutAll_($recv($recv(aPackage)._name())._asJavascript());
  56374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56375. $ctx1.sendIdx["nextPutAll:"]=2;
  56376. //>>excludeEnd("ctx");
  56377. $recv(aStream)._nextPutAll_("].transport = ");
  56378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56379. $ctx1.sendIdx["nextPutAll:"]=3;
  56380. //>>excludeEnd("ctx");
  56381. $recv(aStream)._nextPutAll_($recv($recv(aPackage)._transport())._asJSONString());
  56382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56383. $ctx1.sendIdx["nextPutAll:"]=4;
  56384. //>>excludeEnd("ctx");
  56385. $recv(aStream)._nextPutAll_(";");
  56386. $1=$recv(aStream)._lf();
  56387. return self;
  56388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56389. }, function($ctx1) {$ctx1.fill(self,"exportPackageTransportOf:on:",{aPackage:aPackage,aStream:aStream},$globals.Exporter)});
  56390. //>>excludeEnd("ctx");
  56391. },
  56392. //>>excludeStart("ide", pragmas.excludeIdeData);
  56393. args: ["aPackage", "aStream"],
  56394. source: "exportPackageTransportOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '$core.packages[';\x0a\x09\x09nextPutAll: aPackage name asJavascript;\x0a\x09\x09nextPutAll: '].transport = ';\x0a\x09\x09nextPutAll: aPackage transport asJSONString;\x0a\x09\x09nextPutAll: ';';\x0a\x09\x09lf",
  56395. referencedClasses: [],
  56396. //>>excludeEnd("ide");
  56397. messageSends: ["nextPutAll:", "asJavascript", "name", "asJSONString", "transport", "lf"]
  56398. }),
  56399. $globals.Exporter);
  56400. $core.addMethod(
  56401. $core.method({
  56402. selector: "jsClassNameFor:",
  56403. protocol: 'convenience',
  56404. fn: function (aClass){
  56405. var self=this;
  56406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56407. return $core.withContext(function($ctx1) {
  56408. //>>excludeEnd("ctx");
  56409. var $2,$1,$receiver;
  56410. $2=$recv(aClass)._isMetaclass();
  56411. if($core.assert($2)){
  56412. $1=$recv(self._jsClassNameFor_($recv(aClass)._instanceClass())).__comma(".klass");
  56413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56414. $ctx1.sendIdx[","]=1;
  56415. //>>excludeEnd("ctx");
  56416. } else {
  56417. if(($receiver = aClass) == null || $receiver.isNil){
  56418. $1="null";
  56419. } else {
  56420. $1="$globals.".__comma($recv(aClass)._name());
  56421. };
  56422. };
  56423. return $1;
  56424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56425. }, function($ctx1) {$ctx1.fill(self,"jsClassNameFor:",{aClass:aClass},$globals.Exporter)});
  56426. //>>excludeEnd("ctx");
  56427. },
  56428. //>>excludeStart("ide", pragmas.excludeIdeData);
  56429. args: ["aClass"],
  56430. source: "jsClassNameFor: aClass\x0a\x09^ aClass isMetaclass\x0a\x09\x09ifTrue: [ (self jsClassNameFor: aClass instanceClass), '.klass' ]\x0a\x09\x09ifFalse: [\x0a\x09\x09\x09aClass\x0a\x09\x09\x09\x09ifNil: [ 'null' ]\x0a\x09\x09\x09\x09ifNotNil: [ '$globals.', aClass name ] ]",
  56431. referencedClasses: [],
  56432. //>>excludeEnd("ide");
  56433. messageSends: ["ifTrue:ifFalse:", "isMetaclass", ",", "jsClassNameFor:", "instanceClass", "ifNil:ifNotNil:", "name"]
  56434. }),
  56435. $globals.Exporter);
  56436. $core.addMethod(
  56437. $core.method({
  56438. selector: "ownMethodsOfClass:",
  56439. protocol: 'accessing',
  56440. fn: function (aClass){
  56441. var self=this;
  56442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56443. return $core.withContext(function($ctx1) {
  56444. //>>excludeEnd("ctx");
  56445. var $2,$1;
  56446. $1=$recv($recv($recv($recv(aClass)._methodDictionary())._values())._sorted_((function(a,b){
  56447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56448. return $core.withContext(function($ctx2) {
  56449. //>>excludeEnd("ctx");
  56450. $2=$recv(a)._selector();
  56451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56452. $ctx2.sendIdx["selector"]=1;
  56453. //>>excludeEnd("ctx");
  56454. return $recv($2).__lt_eq($recv(b)._selector());
  56455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56456. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  56457. //>>excludeEnd("ctx");
  56458. })))._reject_((function(each){
  56459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56460. return $core.withContext(function($ctx2) {
  56461. //>>excludeEnd("ctx");
  56462. return $recv($recv(each)._protocol())._match_("^\x5c*");
  56463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56464. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  56465. //>>excludeEnd("ctx");
  56466. }));
  56467. return $1;
  56468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56469. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfClass:",{aClass:aClass},$globals.Exporter)});
  56470. //>>excludeEnd("ctx");
  56471. },
  56472. //>>excludeStart("ide", pragmas.excludeIdeData);
  56473. args: ["aClass"],
  56474. source: "ownMethodsOfClass: aClass\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^ ((aClass methodDictionary values) sorted: [ :a :b | a selector <= b selector ])\x0a\x09\x09reject: [ :each | (each protocol match: '^\x5c*') ]",
  56475. referencedClasses: [],
  56476. //>>excludeEnd("ide");
  56477. messageSends: ["reject:", "sorted:", "values", "methodDictionary", "<=", "selector", "match:", "protocol"]
  56478. }),
  56479. $globals.Exporter);
  56480. $core.addMethod(
  56481. $core.method({
  56482. selector: "ownMethodsOfMetaClass:",
  56483. protocol: 'accessing',
  56484. fn: function (aClass){
  56485. var self=this;
  56486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56487. return $core.withContext(function($ctx1) {
  56488. //>>excludeEnd("ctx");
  56489. var $1;
  56490. $1=self._ownMethodsOfClass_($recv(aClass)._class());
  56491. return $1;
  56492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56493. }, function($ctx1) {$ctx1.fill(self,"ownMethodsOfMetaClass:",{aClass:aClass},$globals.Exporter)});
  56494. //>>excludeEnd("ctx");
  56495. },
  56496. //>>excludeStart("ide", pragmas.excludeIdeData);
  56497. args: ["aClass"],
  56498. source: "ownMethodsOfMetaClass: aClass\x0a\x09\x22Issue #143: sort methods alphabetically\x22\x0a\x0a\x09^ self ownMethodsOfClass: aClass class",
  56499. referencedClasses: [],
  56500. //>>excludeEnd("ide");
  56501. messageSends: ["ownMethodsOfClass:", "class"]
  56502. }),
  56503. $globals.Exporter);
  56504. $core.addClass('AmdExporter', $globals.Exporter, ['namespace'], 'Kernel-ImportExport');
  56505. //>>excludeStart("ide", pragmas.excludeIdeData);
  56506. $globals.AmdExporter.comment="I am used to export Packages in an AMD (Asynchronous Module Definition) JavaScript format.";
  56507. //>>excludeEnd("ide");
  56508. $core.addMethod(
  56509. $core.method({
  56510. selector: "amdNamesOfPackages:",
  56511. protocol: 'private',
  56512. fn: function (anArray){
  56513. var self=this;
  56514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56515. return $core.withContext(function($ctx1) {
  56516. //>>excludeEnd("ctx");
  56517. var $2,$1;
  56518. $1=$recv($recv(anArray)._select_((function(each){
  56519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56520. return $core.withContext(function($ctx2) {
  56521. //>>excludeEnd("ctx");
  56522. $2=self._amdNamespaceOfPackage_(each);
  56523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56524. $ctx2.sendIdx["amdNamespaceOfPackage:"]=1;
  56525. //>>excludeEnd("ctx");
  56526. return $recv($2)._notNil();
  56527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56528. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  56529. //>>excludeEnd("ctx");
  56530. })))._collect_((function(each){
  56531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56532. return $core.withContext(function($ctx2) {
  56533. //>>excludeEnd("ctx");
  56534. return $recv($recv(self._amdNamespaceOfPackage_(each)).__comma("/")).__comma($recv(each)._name());
  56535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56536. $ctx2.sendIdx[","]=1;
  56537. //>>excludeEnd("ctx");
  56538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56539. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  56540. //>>excludeEnd("ctx");
  56541. }));
  56542. return $1;
  56543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56544. }, function($ctx1) {$ctx1.fill(self,"amdNamesOfPackages:",{anArray:anArray},$globals.AmdExporter)});
  56545. //>>excludeEnd("ctx");
  56546. },
  56547. //>>excludeStart("ide", pragmas.excludeIdeData);
  56548. args: ["anArray"],
  56549. source: "amdNamesOfPackages: anArray\x0a\x09^ (anArray\x0a\x09\x09select: [ :each | (self amdNamespaceOfPackage: each) notNil ])\x0a\x09\x09collect: [ :each | (self amdNamespaceOfPackage: each), '/', each name ]",
  56550. referencedClasses: [],
  56551. //>>excludeEnd("ide");
  56552. messageSends: ["collect:", "select:", "notNil", "amdNamespaceOfPackage:", ",", "name"]
  56553. }),
  56554. $globals.AmdExporter);
  56555. $core.addMethod(
  56556. $core.method({
  56557. selector: "amdNamespaceOfPackage:",
  56558. protocol: 'private',
  56559. fn: function (aPackage){
  56560. var self=this;
  56561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56562. return $core.withContext(function($ctx1) {
  56563. //>>excludeEnd("ctx");
  56564. var $4,$3,$2,$1;
  56565. $4=$recv(aPackage)._transport();
  56566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56567. $ctx1.sendIdx["transport"]=1;
  56568. //>>excludeEnd("ctx");
  56569. $3=$recv($4)._type();
  56570. $2=$recv($3).__eq("amd");
  56571. if($core.assert($2)){
  56572. $1=$recv($recv(aPackage)._transport())._namespace();
  56573. } else {
  56574. $1=nil;
  56575. };
  56576. return $1;
  56577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56578. }, function($ctx1) {$ctx1.fill(self,"amdNamespaceOfPackage:",{aPackage:aPackage},$globals.AmdExporter)});
  56579. //>>excludeEnd("ctx");
  56580. },
  56581. //>>excludeStart("ide", pragmas.excludeIdeData);
  56582. args: ["aPackage"],
  56583. source: "amdNamespaceOfPackage: aPackage\x0a\x09^ (aPackage transport type = 'amd')\x0a\x09\x09ifTrue: [ aPackage transport namespace ]\x0a\x09\x09ifFalse: [ nil ]",
  56584. referencedClasses: [],
  56585. //>>excludeEnd("ide");
  56586. messageSends: ["ifTrue:ifFalse:", "=", "type", "transport", "namespace"]
  56587. }),
  56588. $globals.AmdExporter);
  56589. $core.addMethod(
  56590. $core.method({
  56591. selector: "exportPackageEpilogueOf:on:",
  56592. protocol: 'output',
  56593. fn: function (aPackage,aStream){
  56594. var self=this;
  56595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56596. return $core.withContext(function($ctx1) {
  56597. //>>excludeEnd("ctx");
  56598. var $1;
  56599. $recv(aStream)._nextPutAll_("});");
  56600. $1=$recv(aStream)._lf();
  56601. return self;
  56602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56603. }, function($ctx1) {$ctx1.fill(self,"exportPackageEpilogueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.AmdExporter)});
  56604. //>>excludeEnd("ctx");
  56605. },
  56606. //>>excludeStart("ide", pragmas.excludeIdeData);
  56607. args: ["aPackage", "aStream"],
  56608. source: "exportPackageEpilogueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: '});';\x0a\x09\x09lf",
  56609. referencedClasses: [],
  56610. //>>excludeEnd("ide");
  56611. messageSends: ["nextPutAll:", "lf"]
  56612. }),
  56613. $globals.AmdExporter);
  56614. $core.addMethod(
  56615. $core.method({
  56616. selector: "exportPackagePrologueOf:on:",
  56617. protocol: 'output',
  56618. fn: function (aPackage,aStream){
  56619. var self=this;
  56620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56621. return $core.withContext(function($ctx1) {
  56622. //>>excludeEnd("ctx");
  56623. var $1;
  56624. $recv(aStream)._nextPutAll_("define(\x22");
  56625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56626. $ctx1.sendIdx["nextPutAll:"]=1;
  56627. //>>excludeEnd("ctx");
  56628. $recv(aStream)._nextPutAll_(self._amdNamespaceOfPackage_(aPackage));
  56629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56630. $ctx1.sendIdx["nextPutAll:"]=2;
  56631. //>>excludeEnd("ctx");
  56632. $recv(aStream)._nextPutAll_("/");
  56633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56634. $ctx1.sendIdx["nextPutAll:"]=3;
  56635. //>>excludeEnd("ctx");
  56636. $recv(aStream)._nextPutAll_($recv(aPackage)._name());
  56637. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56638. $ctx1.sendIdx["nextPutAll:"]=4;
  56639. //>>excludeEnd("ctx");
  56640. $recv(aStream)._nextPutAll_("\x22, ");
  56641. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56642. $ctx1.sendIdx["nextPutAll:"]=5;
  56643. //>>excludeEnd("ctx");
  56644. $recv(aStream)._nextPutAll_($recv(["amber/boot"].__comma(self._amdNamesOfPackages_($recv(aPackage)._loadDependencies())))._asJavascript());
  56645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56646. $ctx1.sendIdx["nextPutAll:"]=6;
  56647. //>>excludeEnd("ctx");
  56648. $recv(aStream)._nextPutAll_(", function($boot){");
  56649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56650. $ctx1.sendIdx["nextPutAll:"]=7;
  56651. //>>excludeEnd("ctx");
  56652. $recv(aStream)._lf();
  56653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56654. $ctx1.sendIdx["lf"]=1;
  56655. //>>excludeEnd("ctx");
  56656. $recv(aStream)._nextPutAll_("var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;");
  56657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56658. $ctx1.sendIdx["nextPutAll:"]=8;
  56659. //>>excludeEnd("ctx");
  56660. $recv(aStream)._lf();
  56661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56662. $ctx1.sendIdx["lf"]=2;
  56663. //>>excludeEnd("ctx");
  56664. $recv(aStream)._nextPutAll_("var smalltalk=$core,_st=$recv,globals=$globals;");
  56665. $1=$recv(aStream)._lf();
  56666. return self;
  56667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56668. }, function($ctx1) {$ctx1.fill(self,"exportPackagePrologueOf:on:",{aPackage:aPackage,aStream:aStream},$globals.AmdExporter)});
  56669. //>>excludeEnd("ctx");
  56670. },
  56671. //>>excludeStart("ide", pragmas.excludeIdeData);
  56672. args: ["aPackage", "aStream"],
  56673. source: "exportPackagePrologueOf: aPackage on: aStream\x0a\x09aStream\x0a\x09\x09nextPutAll: 'define(\x22';\x0a\x09\x09nextPutAll: (self amdNamespaceOfPackage: aPackage);\x0a\x09\x09nextPutAll: '/';\x0a\x09\x09nextPutAll: aPackage name;\x0a\x09\x09nextPutAll: '\x22, ';\x0a\x09\x09nextPutAll: (#('amber/boot'), (self amdNamesOfPackages: aPackage loadDependencies)) asJavascript;\x0a\x09\x09nextPutAll: ', function($boot){';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;';\x0a\x09\x09lf;\x0a\x09\x09nextPutAll: 'var smalltalk=$core,_st=$recv,globals=$globals;';\x0a\x09\x09lf",
  56674. referencedClasses: [],
  56675. //>>excludeEnd("ide");
  56676. messageSends: ["nextPutAll:", "amdNamespaceOfPackage:", "name", "asJavascript", ",", "amdNamesOfPackages:", "loadDependencies", "lf"]
  56677. }),
  56678. $globals.AmdExporter);
  56679. $core.addClass('ChunkParser', $globals.Object, ['stream', 'last'], 'Kernel-ImportExport');
  56680. //>>excludeStart("ide", pragmas.excludeIdeData);
  56681. $globals.ChunkParser.comment="I am responsible for parsing aStream contents in the chunk format.\x0a\x0a## API\x0a\x0a ChunkParser new\x0a stream: aStream;\x0a nextChunk";
  56682. //>>excludeEnd("ide");
  56683. $core.addMethod(
  56684. $core.method({
  56685. selector: "last",
  56686. protocol: 'accessing',
  56687. fn: function (){
  56688. var self=this;
  56689. var $1;
  56690. $1=self["@last"];
  56691. return $1;
  56692. },
  56693. //>>excludeStart("ide", pragmas.excludeIdeData);
  56694. args: [],
  56695. source: "last\x0a\x09^ last",
  56696. referencedClasses: [],
  56697. //>>excludeEnd("ide");
  56698. messageSends: []
  56699. }),
  56700. $globals.ChunkParser);
  56701. $core.addMethod(
  56702. $core.method({
  56703. selector: "nextChunk",
  56704. protocol: 'reading',
  56705. fn: function (){
  56706. var self=this;
  56707. var char,result,chunk;
  56708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56709. return $core.withContext(function($ctx1) {
  56710. //>>excludeEnd("ctx");
  56711. var $1,$2,$3,$4;
  56712. var $early={};
  56713. try {
  56714. result=""._writeStream();
  56715. $recv((function(){
  56716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56717. return $core.withContext(function($ctx2) {
  56718. //>>excludeEnd("ctx");
  56719. char=$recv(self["@stream"])._next();
  56720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56721. $ctx2.sendIdx["next"]=1;
  56722. //>>excludeEnd("ctx");
  56723. char;
  56724. return $recv(char)._notNil();
  56725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56726. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  56727. //>>excludeEnd("ctx");
  56728. }))._whileTrue_((function(){
  56729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56730. return $core.withContext(function($ctx2) {
  56731. //>>excludeEnd("ctx");
  56732. $1=$recv(char).__eq("!");
  56733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56734. $ctx2.sendIdx["="]=1;
  56735. //>>excludeEnd("ctx");
  56736. if($core.assert($1)){
  56737. $2=$recv($recv(self["@stream"])._peek()).__eq("!");
  56738. if($core.assert($2)){
  56739. $recv(self["@stream"])._next();
  56740. } else {
  56741. self["@last"]=$recv($recv(result)._contents())._trimBoth();
  56742. $3=self["@last"];
  56743. throw $early=[$3];
  56744. };
  56745. };
  56746. return $recv(result)._nextPut_(char);
  56747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56748. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  56749. //>>excludeEnd("ctx");
  56750. }));
  56751. self["@last"]=nil;
  56752. $4=self["@last"];
  56753. return $4;
  56754. }
  56755. catch(e) {if(e===$early)return e[0]; throw e}
  56756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56757. }, function($ctx1) {$ctx1.fill(self,"nextChunk",{char:char,result:result,chunk:chunk},$globals.ChunkParser)});
  56758. //>>excludeEnd("ctx");
  56759. },
  56760. //>>excludeStart("ide", pragmas.excludeIdeData);
  56761. args: [],
  56762. source: "nextChunk\x0a\x09\x22The chunk format (Smalltalk Interchange Format or Fileout format)\x0a\x09is a trivial format but can be a bit tricky to understand:\x0a\x09\x09- Uses the exclamation mark as delimiter of chunks.\x0a\x09\x09- Inside a chunk a normal exclamation mark must be doubled.\x0a\x09\x09- A non empty chunk must be a valid Smalltalk expression.\x0a\x09\x09- A chunk on top level with a preceding empty chunk is an instruction chunk:\x0a\x09\x09\x09- The object created by the expression then takes over reading chunks.\x0a\x0a\x09This method returns next chunk as a String (trimmed), empty String (all whitespace) or nil.\x22\x0a\x0a\x09| char result chunk |\x0a\x09result := '' writeStream.\x0a\x09\x09[ char := stream next.\x0a\x09\x09char notNil ] whileTrue: [\x0a\x09\x09\x09\x09char = '!' ifTrue: [\x0a\x09\x09\x09\x09\x09\x09stream peek = '!'\x0a\x09\x09\x09\x09\x09\x09\x09\x09ifTrue: [ stream next \x22skipping the escape double\x22 ]\x0a\x09\x09\x09\x09\x09\x09\x09\x09ifFalse: [ ^ last := result contents trimBoth \x22chunk end marker found\x22 ]].\x0a\x09\x09\x09\x09result nextPut: char ].\x0a\x09^ last := nil \x22a chunk needs to end with !\x22",
  56763. referencedClasses: [],
  56764. //>>excludeEnd("ide");
  56765. messageSends: ["writeStream", "whileTrue:", "next", "notNil", "ifTrue:", "=", "ifTrue:ifFalse:", "peek", "trimBoth", "contents", "nextPut:"]
  56766. }),
  56767. $globals.ChunkParser);
  56768. $core.addMethod(
  56769. $core.method({
  56770. selector: "stream:",
  56771. protocol: 'accessing',
  56772. fn: function (aStream){
  56773. var self=this;
  56774. self["@stream"]=aStream;
  56775. return self;
  56776. },
  56777. //>>excludeStart("ide", pragmas.excludeIdeData);
  56778. args: ["aStream"],
  56779. source: "stream: aStream\x0a\x09stream := aStream",
  56780. referencedClasses: [],
  56781. //>>excludeEnd("ide");
  56782. messageSends: []
  56783. }),
  56784. $globals.ChunkParser);
  56785. $core.addMethod(
  56786. $core.method({
  56787. selector: "on:",
  56788. protocol: 'instance creation',
  56789. fn: function (aStream){
  56790. var self=this;
  56791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56792. return $core.withContext(function($ctx1) {
  56793. //>>excludeEnd("ctx");
  56794. var $1;
  56795. $1=$recv(self._new())._stream_(aStream);
  56796. return $1;
  56797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56798. }, function($ctx1) {$ctx1.fill(self,"on:",{aStream:aStream},$globals.ChunkParser.klass)});
  56799. //>>excludeEnd("ctx");
  56800. },
  56801. //>>excludeStart("ide", pragmas.excludeIdeData);
  56802. args: ["aStream"],
  56803. source: "on: aStream\x0a\x09^ self new stream: aStream",
  56804. referencedClasses: [],
  56805. //>>excludeEnd("ide");
  56806. messageSends: ["stream:", "new"]
  56807. }),
  56808. $globals.ChunkParser.klass);
  56809. $core.addClass('ExportMethodProtocol', $globals.Object, ['name', 'theClass'], 'Kernel-ImportExport');
  56810. //>>excludeStart("ide", pragmas.excludeIdeData);
  56811. $globals.ExportMethodProtocol.comment="I am an abstraction for a method protocol in a class / metaclass.\x0a\x0aI know of my class, name and methods.\x0aI am used when exporting a package.";
  56812. //>>excludeEnd("ide");
  56813. $core.addMethod(
  56814. $core.method({
  56815. selector: "methods",
  56816. protocol: 'accessing',
  56817. fn: function (){
  56818. var self=this;
  56819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56820. return $core.withContext(function($ctx1) {
  56821. //>>excludeEnd("ctx");
  56822. var $2,$1;
  56823. $1=$recv($recv(self._theClass())._methodsInProtocol_(self._name()))._sorted_((function(a,b){
  56824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56825. return $core.withContext(function($ctx2) {
  56826. //>>excludeEnd("ctx");
  56827. $2=$recv(a)._selector();
  56828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56829. $ctx2.sendIdx["selector"]=1;
  56830. //>>excludeEnd("ctx");
  56831. return $recv($2).__lt_eq($recv(b)._selector());
  56832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56833. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,1)});
  56834. //>>excludeEnd("ctx");
  56835. }));
  56836. return $1;
  56837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56838. }, function($ctx1) {$ctx1.fill(self,"methods",{},$globals.ExportMethodProtocol)});
  56839. //>>excludeEnd("ctx");
  56840. },
  56841. //>>excludeStart("ide", pragmas.excludeIdeData);
  56842. args: [],
  56843. source: "methods\x0a\x09^ (self theClass methodsInProtocol: self name)\x0a\x09\x09sorted: [ :a :b | a selector <= b selector ]",
  56844. referencedClasses: [],
  56845. //>>excludeEnd("ide");
  56846. messageSends: ["sorted:", "methodsInProtocol:", "theClass", "name", "<=", "selector"]
  56847. }),
  56848. $globals.ExportMethodProtocol);
  56849. $core.addMethod(
  56850. $core.method({
  56851. selector: "name",
  56852. protocol: 'accessing',
  56853. fn: function (){
  56854. var self=this;
  56855. var $1;
  56856. $1=self["@name"];
  56857. return $1;
  56858. },
  56859. //>>excludeStart("ide", pragmas.excludeIdeData);
  56860. args: [],
  56861. source: "name\x0a\x09^ name",
  56862. referencedClasses: [],
  56863. //>>excludeEnd("ide");
  56864. messageSends: []
  56865. }),
  56866. $globals.ExportMethodProtocol);
  56867. $core.addMethod(
  56868. $core.method({
  56869. selector: "name:",
  56870. protocol: 'accessing',
  56871. fn: function (aString){
  56872. var self=this;
  56873. self["@name"]=aString;
  56874. return self;
  56875. },
  56876. //>>excludeStart("ide", pragmas.excludeIdeData);
  56877. args: ["aString"],
  56878. source: "name: aString\x0a\x09name := aString",
  56879. referencedClasses: [],
  56880. //>>excludeEnd("ide");
  56881. messageSends: []
  56882. }),
  56883. $globals.ExportMethodProtocol);
  56884. $core.addMethod(
  56885. $core.method({
  56886. selector: "theClass",
  56887. protocol: 'accessing',
  56888. fn: function (){
  56889. var self=this;
  56890. var $1;
  56891. $1=self["@theClass"];
  56892. return $1;
  56893. },
  56894. //>>excludeStart("ide", pragmas.excludeIdeData);
  56895. args: [],
  56896. source: "theClass\x0a\x09^ theClass",
  56897. referencedClasses: [],
  56898. //>>excludeEnd("ide");
  56899. messageSends: []
  56900. }),
  56901. $globals.ExportMethodProtocol);
  56902. $core.addMethod(
  56903. $core.method({
  56904. selector: "theClass:",
  56905. protocol: 'accessing',
  56906. fn: function (aClass){
  56907. var self=this;
  56908. self["@theClass"]=aClass;
  56909. return self;
  56910. },
  56911. //>>excludeStart("ide", pragmas.excludeIdeData);
  56912. args: ["aClass"],
  56913. source: "theClass: aClass\x0a\x09theClass := aClass",
  56914. referencedClasses: [],
  56915. //>>excludeEnd("ide");
  56916. messageSends: []
  56917. }),
  56918. $globals.ExportMethodProtocol);
  56919. $core.addMethod(
  56920. $core.method({
  56921. selector: "name:theClass:",
  56922. protocol: 'instance creation',
  56923. fn: function (aString,aClass){
  56924. var self=this;
  56925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56926. return $core.withContext(function($ctx1) {
  56927. //>>excludeEnd("ctx");
  56928. var $2,$3,$1;
  56929. $2=self._new();
  56930. $recv($2)._name_(aString);
  56931. $recv($2)._theClass_(aClass);
  56932. $3=$recv($2)._yourself();
  56933. $1=$3;
  56934. return $1;
  56935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56936. }, function($ctx1) {$ctx1.fill(self,"name:theClass:",{aString:aString,aClass:aClass},$globals.ExportMethodProtocol.klass)});
  56937. //>>excludeEnd("ctx");
  56938. },
  56939. //>>excludeStart("ide", pragmas.excludeIdeData);
  56940. args: ["aString", "aClass"],
  56941. source: "name: aString theClass: aClass\x0a\x09^ self new\x0a\x09\x09name: aString;\x0a\x09\x09theClass: aClass;\x0a\x09\x09yourself",
  56942. referencedClasses: [],
  56943. //>>excludeEnd("ide");
  56944. messageSends: ["name:", "new", "theClass:", "yourself"]
  56945. }),
  56946. $globals.ExportMethodProtocol.klass);
  56947. $core.addClass('Importer', $globals.Object, ['lastSection', 'lastChunk'], 'Kernel-ImportExport');
  56948. //>>excludeStart("ide", pragmas.excludeIdeData);
  56949. $globals.Importer.comment="I can import Amber code from a string in the chunk format.\x0a\x0a## API\x0a\x0a Importer new import: aString";
  56950. //>>excludeEnd("ide");
  56951. $core.addMethod(
  56952. $core.method({
  56953. selector: "import:",
  56954. protocol: 'fileIn',
  56955. fn: function (aStream){
  56956. var self=this;
  56957. var chunk,result,parser,lastEmpty;
  56958. function $ChunkParser(){return $globals.ChunkParser||(typeof ChunkParser=="undefined"?nil:ChunkParser)}
  56959. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  56960. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  56961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56962. return $core.withContext(function($ctx1) {
  56963. //>>excludeEnd("ctx");
  56964. var $1,$2;
  56965. parser=$recv($ChunkParser())._on_(aStream);
  56966. lastEmpty=false;
  56967. self["@lastSection"]="n/a, not started";
  56968. self["@lastChunk"]=nil;
  56969. $recv((function(){
  56970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56971. return $core.withContext(function($ctx2) {
  56972. //>>excludeEnd("ctx");
  56973. $recv((function(){
  56974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56975. return $core.withContext(function($ctx3) {
  56976. //>>excludeEnd("ctx");
  56977. chunk=$recv(parser)._nextChunk();
  56978. chunk;
  56979. return $recv(chunk)._isNil();
  56980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56981. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  56982. //>>excludeEnd("ctx");
  56983. }))._whileFalse_((function(){
  56984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  56985. return $core.withContext(function($ctx3) {
  56986. //>>excludeEnd("ctx");
  56987. $1=$recv(chunk)._isEmpty();
  56988. if($core.assert($1)){
  56989. lastEmpty=true;
  56990. return lastEmpty;
  56991. } else {
  56992. self["@lastSection"]=chunk;
  56993. self["@lastSection"];
  56994. result=$recv($recv($Compiler())._new())._evaluateExpression_(chunk);
  56995. result;
  56996. $2=lastEmpty;
  56997. if($core.assert($2)){
  56998. lastEmpty=false;
  56999. lastEmpty;
  57000. return $recv(result)._scanFrom_(parser);
  57001. };
  57002. };
  57003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57004. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  57005. //>>excludeEnd("ctx");
  57006. }));
  57007. self["@lastSection"]="n/a, finished";
  57008. return self["@lastSection"];
  57009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57010. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  57011. //>>excludeEnd("ctx");
  57012. }))._on_do_($Error(),(function(e){
  57013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57014. return $core.withContext(function($ctx2) {
  57015. //>>excludeEnd("ctx");
  57016. self["@lastChunk"]=$recv(parser)._last();
  57017. self["@lastChunk"];
  57018. return $recv(e)._signal();
  57019. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57020. }, function($ctx2) {$ctx2.fillBlock({e:e},$ctx1,7)});
  57021. //>>excludeEnd("ctx");
  57022. }));
  57023. return self;
  57024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57025. }, function($ctx1) {$ctx1.fill(self,"import:",{aStream:aStream,chunk:chunk,result:result,parser:parser,lastEmpty:lastEmpty},$globals.Importer)});
  57026. //>>excludeEnd("ctx");
  57027. },
  57028. //>>excludeStart("ide", pragmas.excludeIdeData);
  57029. args: ["aStream"],
  57030. source: "import: aStream\x0a\x09| chunk result parser lastEmpty |\x0a\x09parser := ChunkParser on: aStream.\x0a\x09lastEmpty := false.\x0a\x09lastSection := 'n/a, not started'.\x0a\x09lastChunk := nil.\x0a\x09[\x0a\x09[ chunk := parser nextChunk.\x0a\x09chunk isNil ] whileFalse: [\x0a\x09\x09chunk isEmpty\x0a\x09\x09\x09ifTrue: [ lastEmpty := true ]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09lastSection := chunk.\x0a\x09\x09\x09\x09result := Compiler new evaluateExpression: chunk.\x0a\x09\x09\x09\x09lastEmpty\x0a\x09\x09\x09\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09lastEmpty := false.\x0a\x09\x09\x09\x09\x09\x09\x09\x09\x09result scanFrom: parser ]] ].\x0a\x09lastSection := 'n/a, finished'\x0a\x09] on: Error do: [:e | lastChunk := parser last. e signal ].",
  57031. referencedClasses: ["ChunkParser", "Compiler", "Error"],
  57032. //>>excludeEnd("ide");
  57033. messageSends: ["on:", "on:do:", "whileFalse:", "nextChunk", "isNil", "ifTrue:ifFalse:", "isEmpty", "evaluateExpression:", "new", "ifTrue:", "scanFrom:", "last", "signal"]
  57034. }),
  57035. $globals.Importer);
  57036. $core.addMethod(
  57037. $core.method({
  57038. selector: "lastChunk",
  57039. protocol: 'accessing',
  57040. fn: function (){
  57041. var self=this;
  57042. var $1;
  57043. $1=self["@lastChunk"];
  57044. return $1;
  57045. },
  57046. //>>excludeStart("ide", pragmas.excludeIdeData);
  57047. args: [],
  57048. source: "lastChunk\x0a\x09^ lastChunk",
  57049. referencedClasses: [],
  57050. //>>excludeEnd("ide");
  57051. messageSends: []
  57052. }),
  57053. $globals.Importer);
  57054. $core.addMethod(
  57055. $core.method({
  57056. selector: "lastSection",
  57057. protocol: 'accessing',
  57058. fn: function (){
  57059. var self=this;
  57060. var $1;
  57061. $1=self["@lastSection"];
  57062. return $1;
  57063. },
  57064. //>>excludeStart("ide", pragmas.excludeIdeData);
  57065. args: [],
  57066. source: "lastSection\x0a\x09^ lastSection",
  57067. referencedClasses: [],
  57068. //>>excludeEnd("ide");
  57069. messageSends: []
  57070. }),
  57071. $globals.Importer);
  57072. $core.addClass('PackageHandler', $globals.InterfacingObject, [], 'Kernel-ImportExport');
  57073. //>>excludeStart("ide", pragmas.excludeIdeData);
  57074. $globals.PackageHandler.comment="I am responsible for handling package loading and committing.\x0a\x0aI should not be used directly. Instead, use the corresponding `Package` methods.";
  57075. //>>excludeEnd("ide");
  57076. $core.addMethod(
  57077. $core.method({
  57078. selector: "ajaxPutAt:data:onSuccess:onError:",
  57079. protocol: 'private',
  57080. fn: function (aURL,aString,aBlock,anotherBlock){
  57081. var self=this;
  57082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57083. return $core.withContext(function($ctx1) {
  57084. //>>excludeEnd("ctx");
  57085. self._ajax_($globals.HashedCollection._newFromPairs_(["url",aURL,"type","PUT","data",aString,"contentType","text/plain;charset=UTF-8","success",aBlock,"error",anotherBlock]));
  57086. return self;
  57087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57088. }, function($ctx1) {$ctx1.fill(self,"ajaxPutAt:data:onSuccess:onError:",{aURL:aURL,aString:aString,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  57089. //>>excludeEnd("ctx");
  57090. },
  57091. //>>excludeStart("ide", pragmas.excludeIdeData);
  57092. args: ["aURL", "aString", "aBlock", "anotherBlock"],
  57093. source: "ajaxPutAt: aURL data: aString onSuccess: aBlock onError: anotherBlock\x0a\x09self\x0a\x09\x09ajax: #{\x0a\x09\x09\x09'url' -> aURL.\x0a\x09\x09\x09'type' -> 'PUT'.\x0a\x09\x09\x09'data' -> aString.\x0a\x09\x09\x09'contentType' -> 'text/plain;charset=UTF-8'.\x0a\x09\x09\x09'success' -> aBlock.\x0a\x09\x09\x09'error' -> anotherBlock\x0a\x09\x09}",
  57094. referencedClasses: [],
  57095. //>>excludeEnd("ide");
  57096. messageSends: ["ajax:"]
  57097. }),
  57098. $globals.PackageHandler);
  57099. $core.addMethod(
  57100. $core.method({
  57101. selector: "chunkContentsFor:",
  57102. protocol: 'accessing',
  57103. fn: function (aPackage){
  57104. var self=this;
  57105. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  57106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57107. return $core.withContext(function($ctx1) {
  57108. //>>excludeEnd("ctx");
  57109. var $1;
  57110. $1=$recv($String())._streamContents_((function(str){
  57111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57112. return $core.withContext(function($ctx2) {
  57113. //>>excludeEnd("ctx");
  57114. return $recv(self._chunkExporter())._exportPackage_on_(aPackage,str);
  57115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57116. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  57117. //>>excludeEnd("ctx");
  57118. }));
  57119. return $1;
  57120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57121. }, function($ctx1) {$ctx1.fill(self,"chunkContentsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  57122. //>>excludeEnd("ctx");
  57123. },
  57124. //>>excludeStart("ide", pragmas.excludeIdeData);
  57125. args: ["aPackage"],
  57126. source: "chunkContentsFor: aPackage\x0a\x09^ String streamContents: [ :str |\x0a\x09\x09self chunkExporter exportPackage: aPackage on: str ]",
  57127. referencedClasses: ["String"],
  57128. //>>excludeEnd("ide");
  57129. messageSends: ["streamContents:", "exportPackage:on:", "chunkExporter"]
  57130. }),
  57131. $globals.PackageHandler);
  57132. $core.addMethod(
  57133. $core.method({
  57134. selector: "chunkExporter",
  57135. protocol: 'factory',
  57136. fn: function (){
  57137. var self=this;
  57138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57139. return $core.withContext(function($ctx1) {
  57140. //>>excludeEnd("ctx");
  57141. var $1;
  57142. $1=$recv(self._chunkExporterClass())._new();
  57143. return $1;
  57144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57145. }, function($ctx1) {$ctx1.fill(self,"chunkExporter",{},$globals.PackageHandler)});
  57146. //>>excludeEnd("ctx");
  57147. },
  57148. //>>excludeStart("ide", pragmas.excludeIdeData);
  57149. args: [],
  57150. source: "chunkExporter\x0a\x09^ self chunkExporterClass new",
  57151. referencedClasses: [],
  57152. //>>excludeEnd("ide");
  57153. messageSends: ["new", "chunkExporterClass"]
  57154. }),
  57155. $globals.PackageHandler);
  57156. $core.addMethod(
  57157. $core.method({
  57158. selector: "chunkExporterClass",
  57159. protocol: 'accessing',
  57160. fn: function (){
  57161. var self=this;
  57162. function $ChunkExporter(){return $globals.ChunkExporter||(typeof ChunkExporter=="undefined"?nil:ChunkExporter)}
  57163. return $ChunkExporter();
  57164. },
  57165. //>>excludeStart("ide", pragmas.excludeIdeData);
  57166. args: [],
  57167. source: "chunkExporterClass\x0a\x09^ ChunkExporter",
  57168. referencedClasses: ["ChunkExporter"],
  57169. //>>excludeEnd("ide");
  57170. messageSends: []
  57171. }),
  57172. $globals.PackageHandler);
  57173. $core.addMethod(
  57174. $core.method({
  57175. selector: "commit:",
  57176. protocol: 'committing',
  57177. fn: function (aPackage){
  57178. var self=this;
  57179. function $PackageCommitError(){return $globals.PackageCommitError||(typeof PackageCommitError=="undefined"?nil:PackageCommitError)}
  57180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57181. return $core.withContext(function($ctx1) {
  57182. //>>excludeEnd("ctx");
  57183. var $1,$2,$3,$4;
  57184. self._commit_onSuccess_onError_(aPackage,(function(){
  57185. }),(function(error){
  57186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57187. return $core.withContext(function($ctx2) {
  57188. //>>excludeEnd("ctx");
  57189. $1=$recv($PackageCommitError())._new();
  57190. $2=$1;
  57191. $3=$recv("Commiting failed with reason: \x22".__comma($recv(error)._responseText())).__comma("\x22");
  57192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57193. $ctx2.sendIdx[","]=1;
  57194. //>>excludeEnd("ctx");
  57195. $recv($2)._messageText_($3);
  57196. $4=$recv($1)._signal();
  57197. return $4;
  57198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57199. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  57200. //>>excludeEnd("ctx");
  57201. }));
  57202. return self;
  57203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57204. }, function($ctx1) {$ctx1.fill(self,"commit:",{aPackage:aPackage},$globals.PackageHandler)});
  57205. //>>excludeEnd("ctx");
  57206. },
  57207. //>>excludeStart("ide", pragmas.excludeIdeData);
  57208. args: ["aPackage"],
  57209. source: "commit: aPackage\x0a\x09self \x0a\x09\x09commit: aPackage\x0a\x09\x09onSuccess: []\x0a\x09\x09onError: [ :error |\x0a\x09\x09\x09PackageCommitError new\x0a\x09\x09\x09\x09messageText: 'Commiting failed with reason: \x22' , (error responseText) , '\x22';\x0a\x09\x09\x09\x09signal ]",
  57210. referencedClasses: ["PackageCommitError"],
  57211. //>>excludeEnd("ide");
  57212. messageSends: ["commit:onSuccess:onError:", "messageText:", "new", ",", "responseText", "signal"]
  57213. }),
  57214. $globals.PackageHandler);
  57215. $core.addMethod(
  57216. $core.method({
  57217. selector: "commit:onSuccess:onError:",
  57218. protocol: 'committing',
  57219. fn: function (aPackage,aBlock,anotherBlock){
  57220. var self=this;
  57221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57222. return $core.withContext(function($ctx1) {
  57223. //>>excludeEnd("ctx");
  57224. self._commitJsFileFor_onSuccess_onError_(aPackage,(function(){
  57225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57226. return $core.withContext(function($ctx2) {
  57227. //>>excludeEnd("ctx");
  57228. return self._commitStFileFor_onSuccess_onError_(aPackage,(function(){
  57229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57230. return $core.withContext(function($ctx3) {
  57231. //>>excludeEnd("ctx");
  57232. $recv(aPackage)._beClean();
  57233. return $recv(aBlock)._value();
  57234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57235. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  57236. //>>excludeEnd("ctx");
  57237. }),anotherBlock);
  57238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57239. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  57240. //>>excludeEnd("ctx");
  57241. }),anotherBlock);
  57242. return self;
  57243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57244. }, function($ctx1) {$ctx1.fill(self,"commit:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  57245. //>>excludeEnd("ctx");
  57246. },
  57247. //>>excludeStart("ide", pragmas.excludeIdeData);
  57248. args: ["aPackage", "aBlock", "anotherBlock"],
  57249. source: "commit: aPackage onSuccess: aBlock onError: anotherBlock\x0a\x09self \x0a\x09\x09commitJsFileFor: aPackage \x0a\x09\x09onSuccess: [\x0a\x09\x09\x09self \x0a\x09\x09\x09\x09commitStFileFor: aPackage \x0a\x09\x09\x09\x09onSuccess: [ aPackage beClean. aBlock value ]\x0a\x09\x09\x09\x09onError: anotherBlock ] \x0a\x09\x09onError: anotherBlock",
  57250. referencedClasses: [],
  57251. //>>excludeEnd("ide");
  57252. messageSends: ["commitJsFileFor:onSuccess:onError:", "commitStFileFor:onSuccess:onError:", "beClean", "value"]
  57253. }),
  57254. $globals.PackageHandler);
  57255. $core.addMethod(
  57256. $core.method({
  57257. selector: "commitJsFileFor:onSuccess:onError:",
  57258. protocol: 'committing',
  57259. fn: function (aPackage,aBlock,anotherBlock){
  57260. var self=this;
  57261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57262. return $core.withContext(function($ctx1) {
  57263. //>>excludeEnd("ctx");
  57264. var $2,$1;
  57265. $2=$recv($recv(self._commitPathJsFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  57266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57267. $ctx1.sendIdx[","]=2;
  57268. //>>excludeEnd("ctx");
  57269. $1=$recv($2).__comma(".js");
  57270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57271. $ctx1.sendIdx[","]=1;
  57272. //>>excludeEnd("ctx");
  57273. self._ajaxPutAt_data_onSuccess_onError_($1,self._contentsFor_(aPackage),aBlock,anotherBlock);
  57274. return self;
  57275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57276. }, function($ctx1) {$ctx1.fill(self,"commitJsFileFor:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  57277. //>>excludeEnd("ctx");
  57278. },
  57279. //>>excludeStart("ide", pragmas.excludeIdeData);
  57280. args: ["aPackage", "aBlock", "anotherBlock"],
  57281. source: "commitJsFileFor: aPackage onSuccess: aBlock onError: anotherBlock\x0a\x09self \x0a\x09\x09ajaxPutAt: (self commitPathJsFor: aPackage), '/', aPackage name, '.js'\x0a\x09\x09data: (self contentsFor: aPackage)\x0a\x09\x09onSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  57282. referencedClasses: [],
  57283. //>>excludeEnd("ide");
  57284. messageSends: ["ajaxPutAt:data:onSuccess:onError:", ",", "commitPathJsFor:", "name", "contentsFor:"]
  57285. }),
  57286. $globals.PackageHandler);
  57287. $core.addMethod(
  57288. $core.method({
  57289. selector: "commitPathJsFor:",
  57290. protocol: 'accessing',
  57291. fn: function (aPackage){
  57292. var self=this;
  57293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57294. return $core.withContext(function($ctx1) {
  57295. //>>excludeEnd("ctx");
  57296. self._subclassResponsibility();
  57297. return self;
  57298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57299. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  57300. //>>excludeEnd("ctx");
  57301. },
  57302. //>>excludeStart("ide", pragmas.excludeIdeData);
  57303. args: ["aPackage"],
  57304. source: "commitPathJsFor: aPackage\x0a\x09self subclassResponsibility",
  57305. referencedClasses: [],
  57306. //>>excludeEnd("ide");
  57307. messageSends: ["subclassResponsibility"]
  57308. }),
  57309. $globals.PackageHandler);
  57310. $core.addMethod(
  57311. $core.method({
  57312. selector: "commitPathStFor:",
  57313. protocol: 'accessing',
  57314. fn: function (aPackage){
  57315. var self=this;
  57316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57317. return $core.withContext(function($ctx1) {
  57318. //>>excludeEnd("ctx");
  57319. self._subclassResponsibility();
  57320. return self;
  57321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57322. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage},$globals.PackageHandler)});
  57323. //>>excludeEnd("ctx");
  57324. },
  57325. //>>excludeStart("ide", pragmas.excludeIdeData);
  57326. args: ["aPackage"],
  57327. source: "commitPathStFor: aPackage\x0a\x09self subclassResponsibility",
  57328. referencedClasses: [],
  57329. //>>excludeEnd("ide");
  57330. messageSends: ["subclassResponsibility"]
  57331. }),
  57332. $globals.PackageHandler);
  57333. $core.addMethod(
  57334. $core.method({
  57335. selector: "commitStFileFor:onSuccess:onError:",
  57336. protocol: 'committing',
  57337. fn: function (aPackage,aBlock,anotherBlock){
  57338. var self=this;
  57339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57340. return $core.withContext(function($ctx1) {
  57341. //>>excludeEnd("ctx");
  57342. var $2,$1;
  57343. $2=$recv($recv(self._commitPathStFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  57344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57345. $ctx1.sendIdx[","]=2;
  57346. //>>excludeEnd("ctx");
  57347. $1=$recv($2).__comma(".st");
  57348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57349. $ctx1.sendIdx[","]=1;
  57350. //>>excludeEnd("ctx");
  57351. self._ajaxPutAt_data_onSuccess_onError_($1,self._chunkContentsFor_(aPackage),aBlock,anotherBlock);
  57352. return self;
  57353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57354. }, function($ctx1) {$ctx1.fill(self,"commitStFileFor:onSuccess:onError:",{aPackage:aPackage,aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageHandler)});
  57355. //>>excludeEnd("ctx");
  57356. },
  57357. //>>excludeStart("ide", pragmas.excludeIdeData);
  57358. args: ["aPackage", "aBlock", "anotherBlock"],
  57359. source: "commitStFileFor: aPackage onSuccess: aBlock onError: anotherBlock\x0a\x09self \x0a\x09\x09ajaxPutAt: (self commitPathStFor: aPackage), '/', aPackage name, '.st'\x0a\x09\x09data: (self chunkContentsFor: aPackage)\x0a\x09\x09onSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  57360. referencedClasses: [],
  57361. //>>excludeEnd("ide");
  57362. messageSends: ["ajaxPutAt:data:onSuccess:onError:", ",", "commitPathStFor:", "name", "chunkContentsFor:"]
  57363. }),
  57364. $globals.PackageHandler);
  57365. $core.addMethod(
  57366. $core.method({
  57367. selector: "contentsFor:",
  57368. protocol: 'accessing',
  57369. fn: function (aPackage){
  57370. var self=this;
  57371. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  57372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57373. return $core.withContext(function($ctx1) {
  57374. //>>excludeEnd("ctx");
  57375. var $1;
  57376. $1=$recv($String())._streamContents_((function(str){
  57377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57378. return $core.withContext(function($ctx2) {
  57379. //>>excludeEnd("ctx");
  57380. return $recv(self._exporter())._exportPackage_on_(aPackage,str);
  57381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57382. }, function($ctx2) {$ctx2.fillBlock({str:str},$ctx1,1)});
  57383. //>>excludeEnd("ctx");
  57384. }));
  57385. return $1;
  57386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57387. }, function($ctx1) {$ctx1.fill(self,"contentsFor:",{aPackage:aPackage},$globals.PackageHandler)});
  57388. //>>excludeEnd("ctx");
  57389. },
  57390. //>>excludeStart("ide", pragmas.excludeIdeData);
  57391. args: ["aPackage"],
  57392. source: "contentsFor: aPackage\x0a\x09^ String streamContents: [ :str |\x0a\x09\x09self exporter exportPackage: aPackage on: str ]",
  57393. referencedClasses: ["String"],
  57394. //>>excludeEnd("ide");
  57395. messageSends: ["streamContents:", "exportPackage:on:", "exporter"]
  57396. }),
  57397. $globals.PackageHandler);
  57398. $core.addMethod(
  57399. $core.method({
  57400. selector: "exporter",
  57401. protocol: 'factory',
  57402. fn: function (){
  57403. var self=this;
  57404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57405. return $core.withContext(function($ctx1) {
  57406. //>>excludeEnd("ctx");
  57407. var $1;
  57408. $1=$recv(self._exporterClass())._new();
  57409. return $1;
  57410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57411. }, function($ctx1) {$ctx1.fill(self,"exporter",{},$globals.PackageHandler)});
  57412. //>>excludeEnd("ctx");
  57413. },
  57414. //>>excludeStart("ide", pragmas.excludeIdeData);
  57415. args: [],
  57416. source: "exporter\x0a\x09^ self exporterClass new",
  57417. referencedClasses: [],
  57418. //>>excludeEnd("ide");
  57419. messageSends: ["new", "exporterClass"]
  57420. }),
  57421. $globals.PackageHandler);
  57422. $core.addMethod(
  57423. $core.method({
  57424. selector: "exporterClass",
  57425. protocol: 'accessing',
  57426. fn: function (){
  57427. var self=this;
  57428. function $Exporter(){return $globals.Exporter||(typeof Exporter=="undefined"?nil:Exporter)}
  57429. return $Exporter();
  57430. },
  57431. //>>excludeStart("ide", pragmas.excludeIdeData);
  57432. args: [],
  57433. source: "exporterClass\x0a\x09^ Exporter",
  57434. referencedClasses: ["Exporter"],
  57435. //>>excludeEnd("ide");
  57436. messageSends: []
  57437. }),
  57438. $globals.PackageHandler);
  57439. $core.addMethod(
  57440. $core.method({
  57441. selector: "load:",
  57442. protocol: 'loading',
  57443. fn: function (aPackage){
  57444. var self=this;
  57445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57446. return $core.withContext(function($ctx1) {
  57447. //>>excludeEnd("ctx");
  57448. self._subclassResponsibility();
  57449. return self;
  57450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57451. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackage:aPackage},$globals.PackageHandler)});
  57452. //>>excludeEnd("ctx");
  57453. },
  57454. //>>excludeStart("ide", pragmas.excludeIdeData);
  57455. args: ["aPackage"],
  57456. source: "load: aPackage\x0a\x09self subclassResponsibility",
  57457. referencedClasses: [],
  57458. //>>excludeEnd("ide");
  57459. messageSends: ["subclassResponsibility"]
  57460. }),
  57461. $globals.PackageHandler);
  57462. $core.addMethod(
  57463. $core.method({
  57464. selector: "onCommitError:",
  57465. protocol: 'error handling',
  57466. fn: function (anError){
  57467. var self=this;
  57468. function $PackageCommitError(){return $globals.PackageCommitError||(typeof PackageCommitError=="undefined"?nil:PackageCommitError)}
  57469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57470. return $core.withContext(function($ctx1) {
  57471. //>>excludeEnd("ctx");
  57472. var $1,$2,$3,$4;
  57473. $1=$recv($PackageCommitError())._new();
  57474. $2=$1;
  57475. $3=$recv("Commiting failed with reason: \x22".__comma($recv(anError)._responseText())).__comma("\x22");
  57476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57477. $ctx1.sendIdx[","]=1;
  57478. //>>excludeEnd("ctx");
  57479. $recv($2)._messageText_($3);
  57480. $4=$recv($1)._signal();
  57481. return self;
  57482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57483. }, function($ctx1) {$ctx1.fill(self,"onCommitError:",{anError:anError},$globals.PackageHandler)});
  57484. //>>excludeEnd("ctx");
  57485. },
  57486. //>>excludeStart("ide", pragmas.excludeIdeData);
  57487. args: ["anError"],
  57488. source: "onCommitError: anError\x0a\x09PackageCommitError new\x0a\x09\x09messageText: 'Commiting failed with reason: \x22' , (anError responseText) , '\x22';\x0a\x09\x09signal",
  57489. referencedClasses: ["PackageCommitError"],
  57490. //>>excludeEnd("ide");
  57491. messageSends: ["messageText:", "new", ",", "responseText", "signal"]
  57492. }),
  57493. $globals.PackageHandler);
  57494. $core.addClass('AmdPackageHandler', $globals.PackageHandler, [], 'Kernel-ImportExport');
  57495. //>>excludeStart("ide", pragmas.excludeIdeData);
  57496. $globals.AmdPackageHandler.comment="I am responsible for handling package loading and committing.\x0a\x0aI should not be used directly. Instead, use the corresponding `Package` methods.";
  57497. //>>excludeEnd("ide");
  57498. $core.addMethod(
  57499. $core.method({
  57500. selector: "commitPathJsFor:",
  57501. protocol: 'accessing',
  57502. fn: function (aPackage){
  57503. var self=this;
  57504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57505. return $core.withContext(function($ctx1) {
  57506. //>>excludeEnd("ctx");
  57507. var $1;
  57508. $1=self._toUrl_(self._namespaceFor_(aPackage));
  57509. return $1;
  57510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57511. }, function($ctx1) {$ctx1.fill(self,"commitPathJsFor:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  57512. //>>excludeEnd("ctx");
  57513. },
  57514. //>>excludeStart("ide", pragmas.excludeIdeData);
  57515. args: ["aPackage"],
  57516. source: "commitPathJsFor: aPackage\x0a\x09^ self toUrl: (self namespaceFor: aPackage)",
  57517. referencedClasses: [],
  57518. //>>excludeEnd("ide");
  57519. messageSends: ["toUrl:", "namespaceFor:"]
  57520. }),
  57521. $globals.AmdPackageHandler);
  57522. $core.addMethod(
  57523. $core.method({
  57524. selector: "commitPathStFor:",
  57525. protocol: 'accessing',
  57526. fn: function (aPackage){
  57527. var self=this;
  57528. var path,pathWithout;
  57529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57530. return $core.withContext(function($ctx1) {
  57531. //>>excludeEnd("ctx");
  57532. var $1,$3,$2;
  57533. $1=$recv(self._namespaceFor_(aPackage)).__comma("/_source");
  57534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57535. $ctx1.sendIdx[","]=1;
  57536. //>>excludeEnd("ctx");
  57537. path=self._toUrl_($1);
  57538. pathWithout=self._commitPathJsFor_(aPackage);
  57539. $3=$recv(path).__eq($recv(pathWithout).__comma("/_source"));
  57540. if($core.assert($3)){
  57541. $2=pathWithout;
  57542. } else {
  57543. $2=path;
  57544. };
  57545. return $2;
  57546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57547. }, function($ctx1) {$ctx1.fill(self,"commitPathStFor:",{aPackage:aPackage,path:path,pathWithout:pathWithout},$globals.AmdPackageHandler)});
  57548. //>>excludeEnd("ctx");
  57549. },
  57550. //>>excludeStart("ide", pragmas.excludeIdeData);
  57551. args: ["aPackage"],
  57552. source: "commitPathStFor: aPackage\x0a\x09\x22If _source is not mapped, .st will be committed to .js path.\x0a\x09It is recommended not to use _source as it can be deprecated.\x22\x0a\x09\x0a\x09| path pathWithout |\x0a\x09path := self toUrl: (self namespaceFor: aPackage), '/_source'.\x0a\x09pathWithout := self commitPathJsFor: aPackage.\x0a\x09^ path = (pathWithout, '/_source') ifTrue: [ pathWithout ] ifFalse: [ path ]",
  57553. referencedClasses: [],
  57554. //>>excludeEnd("ide");
  57555. messageSends: ["toUrl:", ",", "namespaceFor:", "commitPathJsFor:", "ifTrue:ifFalse:", "="]
  57556. }),
  57557. $globals.AmdPackageHandler);
  57558. $core.addMethod(
  57559. $core.method({
  57560. selector: "exporterClass",
  57561. protocol: 'accessing',
  57562. fn: function (){
  57563. var self=this;
  57564. function $AmdExporter(){return $globals.AmdExporter||(typeof AmdExporter=="undefined"?nil:AmdExporter)}
  57565. return $AmdExporter();
  57566. },
  57567. //>>excludeStart("ide", pragmas.excludeIdeData);
  57568. args: [],
  57569. source: "exporterClass\x0a\x09^ AmdExporter",
  57570. referencedClasses: ["AmdExporter"],
  57571. //>>excludeEnd("ide");
  57572. messageSends: []
  57573. }),
  57574. $globals.AmdPackageHandler);
  57575. $core.addMethod(
  57576. $core.method({
  57577. selector: "load:",
  57578. protocol: 'loading',
  57579. fn: function (aPackage){
  57580. var self=this;
  57581. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  57582. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  57583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57584. return $core.withContext(function($ctx1) {
  57585. //>>excludeEnd("ctx");
  57586. var $1,$3,$2,$receiver;
  57587. $1=$recv($Smalltalk())._amdRequire();
  57588. if(($receiver = $1) == null || $receiver.isNil){
  57589. self._error_("AMD loader not present");
  57590. } else {
  57591. var require;
  57592. require=$receiver;
  57593. $3=$recv($recv(self._namespaceFor_(aPackage)).__comma("/")).__comma($recv(aPackage)._name());
  57594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57595. $ctx1.sendIdx[","]=1;
  57596. //>>excludeEnd("ctx");
  57597. $2=$recv($Array())._with_($3);
  57598. $recv(require)._value_($2);
  57599. };
  57600. return self;
  57601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57602. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  57603. //>>excludeEnd("ctx");
  57604. },
  57605. //>>excludeStart("ide", pragmas.excludeIdeData);
  57606. args: ["aPackage"],
  57607. source: "load: aPackage\x0a\x09Smalltalk amdRequire\x0a\x09\x09ifNil: [ self error: 'AMD loader not present' ]\x0a\x09\x09ifNotNil: [ :require |\x0a\x09\x09\x09require value: (Array with: (self namespaceFor: aPackage), '/', aPackage name ) ]",
  57608. referencedClasses: ["Smalltalk", "Array"],
  57609. //>>excludeEnd("ide");
  57610. messageSends: ["ifNil:ifNotNil:", "amdRequire", "error:", "value:", "with:", ",", "namespaceFor:", "name"]
  57611. }),
  57612. $globals.AmdPackageHandler);
  57613. $core.addMethod(
  57614. $core.method({
  57615. selector: "namespaceFor:",
  57616. protocol: 'committing',
  57617. fn: function (aPackage){
  57618. var self=this;
  57619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57620. return $core.withContext(function($ctx1) {
  57621. //>>excludeEnd("ctx");
  57622. var $1;
  57623. $1=$recv($recv(aPackage)._transport())._namespace();
  57624. return $1;
  57625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57626. }, function($ctx1) {$ctx1.fill(self,"namespaceFor:",{aPackage:aPackage},$globals.AmdPackageHandler)});
  57627. //>>excludeEnd("ctx");
  57628. },
  57629. //>>excludeStart("ide", pragmas.excludeIdeData);
  57630. args: ["aPackage"],
  57631. source: "namespaceFor: aPackage\x0a\x09^ aPackage transport namespace",
  57632. referencedClasses: [],
  57633. //>>excludeEnd("ide");
  57634. messageSends: ["namespace", "transport"]
  57635. }),
  57636. $globals.AmdPackageHandler);
  57637. $core.addMethod(
  57638. $core.method({
  57639. selector: "toUrl:",
  57640. protocol: 'private',
  57641. fn: function (aString){
  57642. var self=this;
  57643. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  57644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57645. return $core.withContext(function($ctx1) {
  57646. //>>excludeEnd("ctx");
  57647. var $2,$1,$receiver;
  57648. $2=$recv($Smalltalk())._amdRequire();
  57649. if(($receiver = $2) == null || $receiver.isNil){
  57650. $1=self._error_("AMD loader not present");
  57651. } else {
  57652. var require;
  57653. require=$receiver;
  57654. $1=$recv($recv(require)._basicAt_("toUrl"))._value_(aString);
  57655. };
  57656. return $1;
  57657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57658. }, function($ctx1) {$ctx1.fill(self,"toUrl:",{aString:aString},$globals.AmdPackageHandler)});
  57659. //>>excludeEnd("ctx");
  57660. },
  57661. //>>excludeStart("ide", pragmas.excludeIdeData);
  57662. args: ["aString"],
  57663. source: "toUrl: aString\x0a\x09^ Smalltalk amdRequire\x0a\x09\x09ifNil: [ self error: 'AMD loader not present' ]\x0a\x09\x09ifNotNil: [ :require | (require basicAt: 'toUrl') value: aString ]",
  57664. referencedClasses: ["Smalltalk"],
  57665. //>>excludeEnd("ide");
  57666. messageSends: ["ifNil:ifNotNil:", "amdRequire", "error:", "value:", "basicAt:"]
  57667. }),
  57668. $globals.AmdPackageHandler);
  57669. $core.addMethod(
  57670. $core.method({
  57671. selector: "defaultNamespace",
  57672. protocol: 'commit paths',
  57673. fn: function (){
  57674. var self=this;
  57675. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  57676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57677. return $core.withContext(function($ctx1) {
  57678. //>>excludeEnd("ctx");
  57679. var $1;
  57680. $1=$recv($Smalltalk())._defaultAmdNamespace();
  57681. return $1;
  57682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57683. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace",{},$globals.AmdPackageHandler.klass)});
  57684. //>>excludeEnd("ctx");
  57685. },
  57686. //>>excludeStart("ide", pragmas.excludeIdeData);
  57687. args: [],
  57688. source: "defaultNamespace\x0a\x09^ Smalltalk defaultAmdNamespace",
  57689. referencedClasses: ["Smalltalk"],
  57690. //>>excludeEnd("ide");
  57691. messageSends: ["defaultAmdNamespace"]
  57692. }),
  57693. $globals.AmdPackageHandler.klass);
  57694. $core.addMethod(
  57695. $core.method({
  57696. selector: "defaultNamespace:",
  57697. protocol: 'commit paths',
  57698. fn: function (aString){
  57699. var self=this;
  57700. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  57701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57702. return $core.withContext(function($ctx1) {
  57703. //>>excludeEnd("ctx");
  57704. $recv($Smalltalk())._defaultAmdNamespace_(aString);
  57705. return self;
  57706. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57707. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace:",{aString:aString},$globals.AmdPackageHandler.klass)});
  57708. //>>excludeEnd("ctx");
  57709. },
  57710. //>>excludeStart("ide", pragmas.excludeIdeData);
  57711. args: ["aString"],
  57712. source: "defaultNamespace: aString\x0a\x09Smalltalk defaultAmdNamespace: aString",
  57713. referencedClasses: ["Smalltalk"],
  57714. //>>excludeEnd("ide");
  57715. messageSends: ["defaultAmdNamespace:"]
  57716. }),
  57717. $globals.AmdPackageHandler.klass);
  57718. $core.addClass('PackageTransport', $globals.Object, ['package'], 'Kernel-ImportExport');
  57719. //>>excludeStart("ide", pragmas.excludeIdeData);
  57720. $globals.PackageTransport.comment="I represent the transport mechanism used to commit a package.\x0a\x0aMy concrete subclasses have a `#handler` to which committing is delegated.";
  57721. //>>excludeEnd("ide");
  57722. $core.addMethod(
  57723. $core.method({
  57724. selector: "asJSON",
  57725. protocol: 'converting',
  57726. fn: function (){
  57727. var self=this;
  57728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57729. return $core.withContext(function($ctx1) {
  57730. //>>excludeEnd("ctx");
  57731. var $1;
  57732. $1=$globals.HashedCollection._newFromPairs_(["type",self._type()]);
  57733. return $1;
  57734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57735. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.PackageTransport)});
  57736. //>>excludeEnd("ctx");
  57737. },
  57738. //>>excludeStart("ide", pragmas.excludeIdeData);
  57739. args: [],
  57740. source: "asJSON\x0a\x09^ #{ 'type' -> self type }",
  57741. referencedClasses: [],
  57742. //>>excludeEnd("ide");
  57743. messageSends: ["type"]
  57744. }),
  57745. $globals.PackageTransport);
  57746. $core.addMethod(
  57747. $core.method({
  57748. selector: "commit",
  57749. protocol: 'committing',
  57750. fn: function (){
  57751. var self=this;
  57752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57753. return $core.withContext(function($ctx1) {
  57754. //>>excludeEnd("ctx");
  57755. $recv(self._commitHandler())._commit_(self._package());
  57756. return self;
  57757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57758. }, function($ctx1) {$ctx1.fill(self,"commit",{},$globals.PackageTransport)});
  57759. //>>excludeEnd("ctx");
  57760. },
  57761. //>>excludeStart("ide", pragmas.excludeIdeData);
  57762. args: [],
  57763. source: "commit\x0a\x09self commitHandler commit: self package",
  57764. referencedClasses: [],
  57765. //>>excludeEnd("ide");
  57766. messageSends: ["commit:", "commitHandler", "package"]
  57767. }),
  57768. $globals.PackageTransport);
  57769. $core.addMethod(
  57770. $core.method({
  57771. selector: "commitHandler",
  57772. protocol: 'factory',
  57773. fn: function (){
  57774. var self=this;
  57775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57776. return $core.withContext(function($ctx1) {
  57777. //>>excludeEnd("ctx");
  57778. var $1;
  57779. $1=$recv(self._commitHandlerClass())._new();
  57780. return $1;
  57781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57782. }, function($ctx1) {$ctx1.fill(self,"commitHandler",{},$globals.PackageTransport)});
  57783. //>>excludeEnd("ctx");
  57784. },
  57785. //>>excludeStart("ide", pragmas.excludeIdeData);
  57786. args: [],
  57787. source: "commitHandler\x0a\x09^ self commitHandlerClass new",
  57788. referencedClasses: [],
  57789. //>>excludeEnd("ide");
  57790. messageSends: ["new", "commitHandlerClass"]
  57791. }),
  57792. $globals.PackageTransport);
  57793. $core.addMethod(
  57794. $core.method({
  57795. selector: "commitHandlerClass",
  57796. protocol: 'accessing',
  57797. fn: function (){
  57798. var self=this;
  57799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57800. return $core.withContext(function($ctx1) {
  57801. //>>excludeEnd("ctx");
  57802. self._subclassResponsibility();
  57803. return self;
  57804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57805. }, function($ctx1) {$ctx1.fill(self,"commitHandlerClass",{},$globals.PackageTransport)});
  57806. //>>excludeEnd("ctx");
  57807. },
  57808. //>>excludeStart("ide", pragmas.excludeIdeData);
  57809. args: [],
  57810. source: "commitHandlerClass\x0a\x09self subclassResponsibility",
  57811. referencedClasses: [],
  57812. //>>excludeEnd("ide");
  57813. messageSends: ["subclassResponsibility"]
  57814. }),
  57815. $globals.PackageTransport);
  57816. $core.addMethod(
  57817. $core.method({
  57818. selector: "commitOnSuccess:onError:",
  57819. protocol: 'committing',
  57820. fn: function (aBlock,anotherBlock){
  57821. var self=this;
  57822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57823. return $core.withContext(function($ctx1) {
  57824. //>>excludeEnd("ctx");
  57825. $recv(self._commitHandler())._commit_onSuccess_onError_(self._package(),aBlock,anotherBlock);
  57826. return self;
  57827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57828. }, function($ctx1) {$ctx1.fill(self,"commitOnSuccess:onError:",{aBlock:aBlock,anotherBlock:anotherBlock},$globals.PackageTransport)});
  57829. //>>excludeEnd("ctx");
  57830. },
  57831. //>>excludeStart("ide", pragmas.excludeIdeData);
  57832. args: ["aBlock", "anotherBlock"],
  57833. source: "commitOnSuccess: aBlock onError: anotherBlock\x0a\x09self commitHandler \x0a\x09\x09commit: self package\x0a\x09\x09onSuccess: aBlock\x0a\x09\x09onError: anotherBlock",
  57834. referencedClasses: [],
  57835. //>>excludeEnd("ide");
  57836. messageSends: ["commit:onSuccess:onError:", "commitHandler", "package"]
  57837. }),
  57838. $globals.PackageTransport);
  57839. $core.addMethod(
  57840. $core.method({
  57841. selector: "definition",
  57842. protocol: 'accessing',
  57843. fn: function (){
  57844. var self=this;
  57845. return "";
  57846. },
  57847. //>>excludeStart("ide", pragmas.excludeIdeData);
  57848. args: [],
  57849. source: "definition\x0a\x09^ ''",
  57850. referencedClasses: [],
  57851. //>>excludeEnd("ide");
  57852. messageSends: []
  57853. }),
  57854. $globals.PackageTransport);
  57855. $core.addMethod(
  57856. $core.method({
  57857. selector: "load",
  57858. protocol: 'loading',
  57859. fn: function (){
  57860. var self=this;
  57861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57862. return $core.withContext(function($ctx1) {
  57863. //>>excludeEnd("ctx");
  57864. $recv(self._commitHandler())._load_(self._package());
  57865. return self;
  57866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57867. }, function($ctx1) {$ctx1.fill(self,"load",{},$globals.PackageTransport)});
  57868. //>>excludeEnd("ctx");
  57869. },
  57870. //>>excludeStart("ide", pragmas.excludeIdeData);
  57871. args: [],
  57872. source: "load\x0a\x09self commitHandler load: self package",
  57873. referencedClasses: [],
  57874. //>>excludeEnd("ide");
  57875. messageSends: ["load:", "commitHandler", "package"]
  57876. }),
  57877. $globals.PackageTransport);
  57878. $core.addMethod(
  57879. $core.method({
  57880. selector: "package",
  57881. protocol: 'accessing',
  57882. fn: function (){
  57883. var self=this;
  57884. var $1;
  57885. $1=self["@package"];
  57886. return $1;
  57887. },
  57888. //>>excludeStart("ide", pragmas.excludeIdeData);
  57889. args: [],
  57890. source: "package\x0a\x09^ package",
  57891. referencedClasses: [],
  57892. //>>excludeEnd("ide");
  57893. messageSends: []
  57894. }),
  57895. $globals.PackageTransport);
  57896. $core.addMethod(
  57897. $core.method({
  57898. selector: "package:",
  57899. protocol: 'accessing',
  57900. fn: function (aPackage){
  57901. var self=this;
  57902. self["@package"]=aPackage;
  57903. return self;
  57904. },
  57905. //>>excludeStart("ide", pragmas.excludeIdeData);
  57906. args: ["aPackage"],
  57907. source: "package: aPackage\x0a\x09package := aPackage",
  57908. referencedClasses: [],
  57909. //>>excludeEnd("ide");
  57910. messageSends: []
  57911. }),
  57912. $globals.PackageTransport);
  57913. $core.addMethod(
  57914. $core.method({
  57915. selector: "setupFromJson:",
  57916. protocol: 'initialization',
  57917. fn: function (anObject){
  57918. var self=this;
  57919. return self;
  57920. },
  57921. //>>excludeStart("ide", pragmas.excludeIdeData);
  57922. args: ["anObject"],
  57923. source: "setupFromJson: anObject\x0a\x09\x22no op. override if needed in subclasses\x22",
  57924. referencedClasses: [],
  57925. //>>excludeEnd("ide");
  57926. messageSends: []
  57927. }),
  57928. $globals.PackageTransport);
  57929. $core.addMethod(
  57930. $core.method({
  57931. selector: "type",
  57932. protocol: 'accessing',
  57933. fn: function (){
  57934. var self=this;
  57935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57936. return $core.withContext(function($ctx1) {
  57937. //>>excludeEnd("ctx");
  57938. var $1;
  57939. $1=$recv(self._class())._type();
  57940. return $1;
  57941. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57942. }, function($ctx1) {$ctx1.fill(self,"type",{},$globals.PackageTransport)});
  57943. //>>excludeEnd("ctx");
  57944. },
  57945. //>>excludeStart("ide", pragmas.excludeIdeData);
  57946. args: [],
  57947. source: "type\x0a\x09^ self class type",
  57948. referencedClasses: [],
  57949. //>>excludeEnd("ide");
  57950. messageSends: ["type", "class"]
  57951. }),
  57952. $globals.PackageTransport);
  57953. $globals.PackageTransport.klass.iVarNames = ['registry'];
  57954. $core.addMethod(
  57955. $core.method({
  57956. selector: "classRegisteredFor:",
  57957. protocol: 'accessing',
  57958. fn: function (aString){
  57959. var self=this;
  57960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57961. return $core.withContext(function($ctx1) {
  57962. //>>excludeEnd("ctx");
  57963. var $1;
  57964. $1=$recv(self["@registry"])._at_(aString);
  57965. return $1;
  57966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57967. }, function($ctx1) {$ctx1.fill(self,"classRegisteredFor:",{aString:aString},$globals.PackageTransport.klass)});
  57968. //>>excludeEnd("ctx");
  57969. },
  57970. //>>excludeStart("ide", pragmas.excludeIdeData);
  57971. args: ["aString"],
  57972. source: "classRegisteredFor: aString\x0a\x09^ registry at: aString",
  57973. referencedClasses: [],
  57974. //>>excludeEnd("ide");
  57975. messageSends: ["at:"]
  57976. }),
  57977. $globals.PackageTransport.klass);
  57978. $core.addMethod(
  57979. $core.method({
  57980. selector: "defaultType",
  57981. protocol: 'accessing',
  57982. fn: function (){
  57983. var self=this;
  57984. function $AmdPackageTransport(){return $globals.AmdPackageTransport||(typeof AmdPackageTransport=="undefined"?nil:AmdPackageTransport)}
  57985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57986. return $core.withContext(function($ctx1) {
  57987. //>>excludeEnd("ctx");
  57988. var $1;
  57989. $1=$recv($AmdPackageTransport())._type();
  57990. return $1;
  57991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  57992. }, function($ctx1) {$ctx1.fill(self,"defaultType",{},$globals.PackageTransport.klass)});
  57993. //>>excludeEnd("ctx");
  57994. },
  57995. //>>excludeStart("ide", pragmas.excludeIdeData);
  57996. args: [],
  57997. source: "defaultType\x0a\x09^ AmdPackageTransport type",
  57998. referencedClasses: ["AmdPackageTransport"],
  57999. //>>excludeEnd("ide");
  58000. messageSends: ["type"]
  58001. }),
  58002. $globals.PackageTransport.klass);
  58003. $core.addMethod(
  58004. $core.method({
  58005. selector: "for:",
  58006. protocol: 'instance creation',
  58007. fn: function (aString){
  58008. var self=this;
  58009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58010. return $core.withContext(function($ctx1) {
  58011. //>>excludeEnd("ctx");
  58012. var $1;
  58013. $1=$recv(self._classRegisteredFor_(aString))._new();
  58014. return $1;
  58015. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58016. }, function($ctx1) {$ctx1.fill(self,"for:",{aString:aString},$globals.PackageTransport.klass)});
  58017. //>>excludeEnd("ctx");
  58018. },
  58019. //>>excludeStart("ide", pragmas.excludeIdeData);
  58020. args: ["aString"],
  58021. source: "for: aString\x0a\x09^ (self classRegisteredFor: aString) new",
  58022. referencedClasses: [],
  58023. //>>excludeEnd("ide");
  58024. messageSends: ["new", "classRegisteredFor:"]
  58025. }),
  58026. $globals.PackageTransport.klass);
  58027. $core.addMethod(
  58028. $core.method({
  58029. selector: "fromJson:",
  58030. protocol: 'instance creation',
  58031. fn: function (anObject){
  58032. var self=this;
  58033. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58034. return $core.withContext(function($ctx1) {
  58035. //>>excludeEnd("ctx");
  58036. var $1,$3,$4,$2,$receiver;
  58037. if(($receiver = anObject) == null || $receiver.isNil){
  58038. $1=self._for_(self._defaultType());
  58039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58040. $ctx1.sendIdx["for:"]=1;
  58041. //>>excludeEnd("ctx");
  58042. return $1;
  58043. } else {
  58044. anObject;
  58045. };
  58046. $3=self._for_($recv(anObject)._type());
  58047. $recv($3)._setupFromJson_(anObject);
  58048. $4=$recv($3)._yourself();
  58049. $2=$4;
  58050. return $2;
  58051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58052. }, function($ctx1) {$ctx1.fill(self,"fromJson:",{anObject:anObject},$globals.PackageTransport.klass)});
  58053. //>>excludeEnd("ctx");
  58054. },
  58055. //>>excludeStart("ide", pragmas.excludeIdeData);
  58056. args: ["anObject"],
  58057. source: "fromJson: anObject\x0a\x09anObject ifNil: [ ^ self for: self defaultType ].\x0a\x09\x0a\x09^ (self for: anObject type)\x0a\x09\x09setupFromJson: anObject;\x0a\x09\x09yourself",
  58058. referencedClasses: [],
  58059. //>>excludeEnd("ide");
  58060. messageSends: ["ifNil:", "for:", "defaultType", "setupFromJson:", "type", "yourself"]
  58061. }),
  58062. $globals.PackageTransport.klass);
  58063. $core.addMethod(
  58064. $core.method({
  58065. selector: "initialize",
  58066. protocol: 'initialization',
  58067. fn: function (){
  58068. var self=this;
  58069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58070. return $core.withContext(function($ctx1) {
  58071. //>>excludeEnd("ctx");
  58072. (
  58073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58074. $ctx1.supercall = true,
  58075. //>>excludeEnd("ctx");
  58076. $globals.PackageTransport.klass.superclass.fn.prototype._initialize.apply($recv(self), []));
  58077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58078. $ctx1.supercall = false;
  58079. //>>excludeEnd("ctx");;
  58080. self["@registry"]=$globals.HashedCollection._newFromPairs_([]);
  58081. self._register();
  58082. return self;
  58083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58084. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.PackageTransport.klass)});
  58085. //>>excludeEnd("ctx");
  58086. },
  58087. //>>excludeStart("ide", pragmas.excludeIdeData);
  58088. args: [],
  58089. source: "initialize\x0a\x09super initialize.\x0a\x09registry := #{}.\x0a\x09self register",
  58090. referencedClasses: [],
  58091. //>>excludeEnd("ide");
  58092. messageSends: ["initialize", "register"]
  58093. }),
  58094. $globals.PackageTransport.klass);
  58095. $core.addMethod(
  58096. $core.method({
  58097. selector: "register",
  58098. protocol: 'registration',
  58099. fn: function (){
  58100. var self=this;
  58101. function $PackageTransport(){return $globals.PackageTransport||(typeof PackageTransport=="undefined"?nil:PackageTransport)}
  58102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58103. return $core.withContext(function($ctx1) {
  58104. //>>excludeEnd("ctx");
  58105. $recv($PackageTransport())._register_(self);
  58106. return self;
  58107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58108. }, function($ctx1) {$ctx1.fill(self,"register",{},$globals.PackageTransport.klass)});
  58109. //>>excludeEnd("ctx");
  58110. },
  58111. //>>excludeStart("ide", pragmas.excludeIdeData);
  58112. args: [],
  58113. source: "register\x0a\x09PackageTransport register: self",
  58114. referencedClasses: ["PackageTransport"],
  58115. //>>excludeEnd("ide");
  58116. messageSends: ["register:"]
  58117. }),
  58118. $globals.PackageTransport.klass);
  58119. $core.addMethod(
  58120. $core.method({
  58121. selector: "register:",
  58122. protocol: 'registration',
  58123. fn: function (aClass){
  58124. var self=this;
  58125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58126. return $core.withContext(function($ctx1) {
  58127. //>>excludeEnd("ctx");
  58128. var $1,$receiver;
  58129. $1=$recv(aClass)._type();
  58130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58131. $ctx1.sendIdx["type"]=1;
  58132. //>>excludeEnd("ctx");
  58133. if(($receiver = $1) == null || $receiver.isNil){
  58134. $1;
  58135. } else {
  58136. $recv(self["@registry"])._at_put_($recv(aClass)._type(),aClass);
  58137. };
  58138. return self;
  58139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58140. }, function($ctx1) {$ctx1.fill(self,"register:",{aClass:aClass},$globals.PackageTransport.klass)});
  58141. //>>excludeEnd("ctx");
  58142. },
  58143. //>>excludeStart("ide", pragmas.excludeIdeData);
  58144. args: ["aClass"],
  58145. source: "register: aClass\x0a\x09aClass type ifNotNil: [\x0a\x09\x09registry at: aClass type put: aClass ]",
  58146. referencedClasses: [],
  58147. //>>excludeEnd("ide");
  58148. messageSends: ["ifNotNil:", "type", "at:put:"]
  58149. }),
  58150. $globals.PackageTransport.klass);
  58151. $core.addMethod(
  58152. $core.method({
  58153. selector: "type",
  58154. protocol: 'accessing',
  58155. fn: function (){
  58156. var self=this;
  58157. return nil;
  58158. },
  58159. //>>excludeStart("ide", pragmas.excludeIdeData);
  58160. args: [],
  58161. source: "type\x0a\x09\x22Override in subclasses\x22\x0a\x09^ nil",
  58162. referencedClasses: [],
  58163. //>>excludeEnd("ide");
  58164. messageSends: []
  58165. }),
  58166. $globals.PackageTransport.klass);
  58167. $core.addClass('AmdPackageTransport', $globals.PackageTransport, ['namespace'], 'Kernel-ImportExport');
  58168. //>>excludeStart("ide", pragmas.excludeIdeData);
  58169. $globals.AmdPackageTransport.comment="I am the default transport for committing packages.\x0a\x0aSee `AmdExporter` and `AmdPackageHandler`.";
  58170. //>>excludeEnd("ide");
  58171. $core.addMethod(
  58172. $core.method({
  58173. selector: "asJSON",
  58174. protocol: 'converting',
  58175. fn: function (){
  58176. var self=this;
  58177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58178. return $core.withContext(function($ctx1) {
  58179. //>>excludeEnd("ctx");
  58180. var $2,$3,$1;
  58181. $2=(
  58182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58183. $ctx1.supercall = true,
  58184. //>>excludeEnd("ctx");
  58185. $globals.AmdPackageTransport.superclass.fn.prototype._asJSON.apply($recv(self), []));
  58186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58187. $ctx1.supercall = false;
  58188. //>>excludeEnd("ctx");;
  58189. $recv($2)._at_put_("amdNamespace",self._namespace());
  58190. $3=$recv($2)._yourself();
  58191. $1=$3;
  58192. return $1;
  58193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58194. }, function($ctx1) {$ctx1.fill(self,"asJSON",{},$globals.AmdPackageTransport)});
  58195. //>>excludeEnd("ctx");
  58196. },
  58197. //>>excludeStart("ide", pragmas.excludeIdeData);
  58198. args: [],
  58199. source: "asJSON\x0a\x09^ super asJSON\x0a\x09\x09at: 'amdNamespace' put: self namespace;\x0a\x09\x09yourself",
  58200. referencedClasses: [],
  58201. //>>excludeEnd("ide");
  58202. messageSends: ["at:put:", "asJSON", "namespace", "yourself"]
  58203. }),
  58204. $globals.AmdPackageTransport);
  58205. $core.addMethod(
  58206. $core.method({
  58207. selector: "commitHandlerClass",
  58208. protocol: 'accessing',
  58209. fn: function (){
  58210. var self=this;
  58211. function $AmdPackageHandler(){return $globals.AmdPackageHandler||(typeof AmdPackageHandler=="undefined"?nil:AmdPackageHandler)}
  58212. return $AmdPackageHandler();
  58213. },
  58214. //>>excludeStart("ide", pragmas.excludeIdeData);
  58215. args: [],
  58216. source: "commitHandlerClass\x0a\x09^ AmdPackageHandler",
  58217. referencedClasses: ["AmdPackageHandler"],
  58218. //>>excludeEnd("ide");
  58219. messageSends: []
  58220. }),
  58221. $globals.AmdPackageTransport);
  58222. $core.addMethod(
  58223. $core.method({
  58224. selector: "defaultNamespace",
  58225. protocol: 'defaults',
  58226. fn: function (){
  58227. var self=this;
  58228. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  58229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58230. return $core.withContext(function($ctx1) {
  58231. //>>excludeEnd("ctx");
  58232. var $1;
  58233. $1=$recv($Smalltalk())._defaultAmdNamespace();
  58234. return $1;
  58235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58236. }, function($ctx1) {$ctx1.fill(self,"defaultNamespace",{},$globals.AmdPackageTransport)});
  58237. //>>excludeEnd("ctx");
  58238. },
  58239. //>>excludeStart("ide", pragmas.excludeIdeData);
  58240. args: [],
  58241. source: "defaultNamespace\x0a\x09^ Smalltalk defaultAmdNamespace",
  58242. referencedClasses: ["Smalltalk"],
  58243. //>>excludeEnd("ide");
  58244. messageSends: ["defaultAmdNamespace"]
  58245. }),
  58246. $globals.AmdPackageTransport);
  58247. $core.addMethod(
  58248. $core.method({
  58249. selector: "definition",
  58250. protocol: 'accessing',
  58251. fn: function (){
  58252. var self=this;
  58253. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  58254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58255. return $core.withContext(function($ctx1) {
  58256. //>>excludeEnd("ctx");
  58257. var $3,$2,$1;
  58258. $1=$recv($String())._streamContents_((function(stream){
  58259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58260. return $core.withContext(function($ctx2) {
  58261. //>>excludeEnd("ctx");
  58262. $recv(stream)._nextPutAll_($recv(self._class())._name());
  58263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58264. $ctx2.sendIdx["nextPutAll:"]=1;
  58265. //>>excludeEnd("ctx");
  58266. $recv(stream)._nextPutAll_(" namespace: ");
  58267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58268. $ctx2.sendIdx["nextPutAll:"]=2;
  58269. //>>excludeEnd("ctx");
  58270. $3=$recv("'".__comma(self._namespace())).__comma("'");
  58271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58272. $ctx2.sendIdx[","]=1;
  58273. //>>excludeEnd("ctx");
  58274. $2=$recv(stream)._nextPutAll_($3);
  58275. return $2;
  58276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58277. }, function($ctx2) {$ctx2.fillBlock({stream:stream},$ctx1,1)});
  58278. //>>excludeEnd("ctx");
  58279. }));
  58280. return $1;
  58281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58282. }, function($ctx1) {$ctx1.fill(self,"definition",{},$globals.AmdPackageTransport)});
  58283. //>>excludeEnd("ctx");
  58284. },
  58285. //>>excludeStart("ide", pragmas.excludeIdeData);
  58286. args: [],
  58287. source: "definition\x0a\x09^ String streamContents: [ :stream |\x0a\x09\x09stream \x0a\x09\x09\x09nextPutAll: self class name;\x0a\x09\x09\x09nextPutAll: ' namespace: ';\x0a\x09\x09\x09nextPutAll: '''', self namespace, '''' ]",
  58288. referencedClasses: ["String"],
  58289. //>>excludeEnd("ide");
  58290. messageSends: ["streamContents:", "nextPutAll:", "name", "class", ",", "namespace"]
  58291. }),
  58292. $globals.AmdPackageTransport);
  58293. $core.addMethod(
  58294. $core.method({
  58295. selector: "namespace",
  58296. protocol: 'accessing',
  58297. fn: function (){
  58298. var self=this;
  58299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58300. return $core.withContext(function($ctx1) {
  58301. //>>excludeEnd("ctx");
  58302. var $2,$1,$receiver;
  58303. $2=self["@namespace"];
  58304. if(($receiver = $2) == null || $receiver.isNil){
  58305. $1=self._defaultNamespace();
  58306. } else {
  58307. $1=$2;
  58308. };
  58309. return $1;
  58310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58311. }, function($ctx1) {$ctx1.fill(self,"namespace",{},$globals.AmdPackageTransport)});
  58312. //>>excludeEnd("ctx");
  58313. },
  58314. //>>excludeStart("ide", pragmas.excludeIdeData);
  58315. args: [],
  58316. source: "namespace\x0a\x09^ namespace ifNil: [ self defaultNamespace ]",
  58317. referencedClasses: [],
  58318. //>>excludeEnd("ide");
  58319. messageSends: ["ifNil:", "defaultNamespace"]
  58320. }),
  58321. $globals.AmdPackageTransport);
  58322. $core.addMethod(
  58323. $core.method({
  58324. selector: "namespace:",
  58325. protocol: 'accessing',
  58326. fn: function (aString){
  58327. var self=this;
  58328. self["@namespace"]=aString;
  58329. return self;
  58330. },
  58331. //>>excludeStart("ide", pragmas.excludeIdeData);
  58332. args: ["aString"],
  58333. source: "namespace: aString\x0a\x09namespace := aString",
  58334. referencedClasses: [],
  58335. //>>excludeEnd("ide");
  58336. messageSends: []
  58337. }),
  58338. $globals.AmdPackageTransport);
  58339. $core.addMethod(
  58340. $core.method({
  58341. selector: "printOn:",
  58342. protocol: 'printing',
  58343. fn: function (aStream){
  58344. var self=this;
  58345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58346. return $core.withContext(function($ctx1) {
  58347. //>>excludeEnd("ctx");
  58348. var $1;
  58349. (
  58350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58351. $ctx1.supercall = true,
  58352. //>>excludeEnd("ctx");
  58353. $globals.AmdPackageTransport.superclass.fn.prototype._printOn_.apply($recv(self), [aStream]));
  58354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58355. $ctx1.supercall = false;
  58356. //>>excludeEnd("ctx");;
  58357. $recv(aStream)._nextPutAll_(" (AMD Namespace: ");
  58358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58359. $ctx1.sendIdx["nextPutAll:"]=1;
  58360. //>>excludeEnd("ctx");
  58361. $recv(aStream)._nextPutAll_(self._namespace());
  58362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58363. $ctx1.sendIdx["nextPutAll:"]=2;
  58364. //>>excludeEnd("ctx");
  58365. $1=$recv(aStream)._nextPutAll_(")");
  58366. return self;
  58367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58368. }, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},$globals.AmdPackageTransport)});
  58369. //>>excludeEnd("ctx");
  58370. },
  58371. //>>excludeStart("ide", pragmas.excludeIdeData);
  58372. args: ["aStream"],
  58373. source: "printOn: aStream\x0a\x09super printOn: aStream.\x0a\x09aStream\x0a\x09\x09nextPutAll: ' (AMD Namespace: ';\x0a\x09\x09nextPutAll: self namespace;\x0a\x09\x09nextPutAll: ')'",
  58374. referencedClasses: [],
  58375. //>>excludeEnd("ide");
  58376. messageSends: ["printOn:", "nextPutAll:", "namespace"]
  58377. }),
  58378. $globals.AmdPackageTransport);
  58379. $core.addMethod(
  58380. $core.method({
  58381. selector: "setPath:",
  58382. protocol: 'actions',
  58383. fn: function (aString){
  58384. var self=this;
  58385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58386. return $core.withContext(function($ctx1) {
  58387. //>>excludeEnd("ctx");
  58388. $recv($recv(require)._basicAt_("config"))._value_($globals.HashedCollection._newFromPairs_(["paths",$globals.HashedCollection._newFromPairs_([self._namespace(),aString])]));
  58389. return self;
  58390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58391. }, function($ctx1) {$ctx1.fill(self,"setPath:",{aString:aString},$globals.AmdPackageTransport)});
  58392. //>>excludeEnd("ctx");
  58393. },
  58394. //>>excludeStart("ide", pragmas.excludeIdeData);
  58395. args: ["aString"],
  58396. source: "setPath: aString\x0a\x09\x22Set the path the the receiver's `namespace`\x22\x0a\x09\x0a\x09(require basicAt: 'config') value: #{\x0a\x09\x09'paths' -> #{\x0a\x09\x09\x09self namespace -> aString\x0a\x09\x09}\x0a\x09}.",
  58397. referencedClasses: [],
  58398. //>>excludeEnd("ide");
  58399. messageSends: ["value:", "basicAt:", "namespace"]
  58400. }),
  58401. $globals.AmdPackageTransport);
  58402. $core.addMethod(
  58403. $core.method({
  58404. selector: "setupFromJson:",
  58405. protocol: 'initialization',
  58406. fn: function (anObject){
  58407. var self=this;
  58408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58409. return $core.withContext(function($ctx1) {
  58410. //>>excludeEnd("ctx");
  58411. self._namespace_($recv(anObject)._at_("amdNamespace"));
  58412. return self;
  58413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58414. }, function($ctx1) {$ctx1.fill(self,"setupFromJson:",{anObject:anObject},$globals.AmdPackageTransport)});
  58415. //>>excludeEnd("ctx");
  58416. },
  58417. //>>excludeStart("ide", pragmas.excludeIdeData);
  58418. args: ["anObject"],
  58419. source: "setupFromJson: anObject\x0a\x09self namespace: (anObject at: 'amdNamespace')",
  58420. referencedClasses: [],
  58421. //>>excludeEnd("ide");
  58422. messageSends: ["namespace:", "at:"]
  58423. }),
  58424. $globals.AmdPackageTransport);
  58425. $core.addMethod(
  58426. $core.method({
  58427. selector: "namespace:",
  58428. protocol: 'instance creation',
  58429. fn: function (aString){
  58430. var self=this;
  58431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58432. return $core.withContext(function($ctx1) {
  58433. //>>excludeEnd("ctx");
  58434. var $2,$3,$1;
  58435. $2=self._new();
  58436. $recv($2)._namespace_(aString);
  58437. $3=$recv($2)._yourself();
  58438. $1=$3;
  58439. return $1;
  58440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58441. }, function($ctx1) {$ctx1.fill(self,"namespace:",{aString:aString},$globals.AmdPackageTransport.klass)});
  58442. //>>excludeEnd("ctx");
  58443. },
  58444. //>>excludeStart("ide", pragmas.excludeIdeData);
  58445. args: ["aString"],
  58446. source: "namespace: aString\x0a\x09^ self new\x0a\x09\x09namespace: aString;\x0a\x09\x09yourself",
  58447. referencedClasses: [],
  58448. //>>excludeEnd("ide");
  58449. messageSends: ["namespace:", "new", "yourself"]
  58450. }),
  58451. $globals.AmdPackageTransport.klass);
  58452. $core.addMethod(
  58453. $core.method({
  58454. selector: "type",
  58455. protocol: 'accessing',
  58456. fn: function (){
  58457. var self=this;
  58458. return "amd";
  58459. },
  58460. //>>excludeStart("ide", pragmas.excludeIdeData);
  58461. args: [],
  58462. source: "type\x0a\x09^ 'amd'",
  58463. referencedClasses: [],
  58464. //>>excludeEnd("ide");
  58465. messageSends: []
  58466. }),
  58467. $globals.AmdPackageTransport.klass);
  58468. $core.addMethod(
  58469. $core.method({
  58470. selector: "commit",
  58471. protocol: '*Kernel-ImportExport',
  58472. fn: function (){
  58473. var self=this;
  58474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58475. return $core.withContext(function($ctx1) {
  58476. //>>excludeEnd("ctx");
  58477. var $1;
  58478. $1=$recv(self._transport())._commit();
  58479. return $1;
  58480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58481. }, function($ctx1) {$ctx1.fill(self,"commit",{},$globals.Package)});
  58482. //>>excludeEnd("ctx");
  58483. },
  58484. //>>excludeStart("ide", pragmas.excludeIdeData);
  58485. args: [],
  58486. source: "commit\x0a\x09^ self transport commit",
  58487. referencedClasses: [],
  58488. //>>excludeEnd("ide");
  58489. messageSends: ["commit", "transport"]
  58490. }),
  58491. $globals.Package);
  58492. $core.addMethod(
  58493. $core.method({
  58494. selector: "load",
  58495. protocol: '*Kernel-ImportExport',
  58496. fn: function (){
  58497. var self=this;
  58498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58499. return $core.withContext(function($ctx1) {
  58500. //>>excludeEnd("ctx");
  58501. var $1;
  58502. $1=$recv(self._transport())._load();
  58503. return $1;
  58504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58505. }, function($ctx1) {$ctx1.fill(self,"load",{},$globals.Package)});
  58506. //>>excludeEnd("ctx");
  58507. },
  58508. //>>excludeStart("ide", pragmas.excludeIdeData);
  58509. args: [],
  58510. source: "load\x0a\x09^ self transport load",
  58511. referencedClasses: [],
  58512. //>>excludeEnd("ide");
  58513. messageSends: ["load", "transport"]
  58514. }),
  58515. $globals.Package);
  58516. $core.addMethod(
  58517. $core.method({
  58518. selector: "loadFromNamespace:",
  58519. protocol: '*Kernel-ImportExport',
  58520. fn: function (aString){
  58521. var self=this;
  58522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58523. return $core.withContext(function($ctx1) {
  58524. //>>excludeEnd("ctx");
  58525. var $2,$3,$1;
  58526. $2=self._transport();
  58527. $recv($2)._namespace_(aString);
  58528. $3=$recv($2)._load();
  58529. $1=$3;
  58530. return $1;
  58531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58532. }, function($ctx1) {$ctx1.fill(self,"loadFromNamespace:",{aString:aString},$globals.Package)});
  58533. //>>excludeEnd("ctx");
  58534. },
  58535. //>>excludeStart("ide", pragmas.excludeIdeData);
  58536. args: ["aString"],
  58537. source: "loadFromNamespace: aString\x0a\x09^ self transport\x0a\x09\x09namespace: aString;\x0a\x09\x09load",
  58538. referencedClasses: [],
  58539. //>>excludeEnd("ide");
  58540. messageSends: ["namespace:", "transport", "load"]
  58541. }),
  58542. $globals.Package);
  58543. $core.addMethod(
  58544. $core.method({
  58545. selector: "load:",
  58546. protocol: '*Kernel-ImportExport',
  58547. fn: function (aPackageName){
  58548. var self=this;
  58549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58550. return $core.withContext(function($ctx1) {
  58551. //>>excludeEnd("ctx");
  58552. $recv(self._named_(aPackageName))._load();
  58553. return self;
  58554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58555. }, function($ctx1) {$ctx1.fill(self,"load:",{aPackageName:aPackageName},$globals.Package.klass)});
  58556. //>>excludeEnd("ctx");
  58557. },
  58558. //>>excludeStart("ide", pragmas.excludeIdeData);
  58559. args: ["aPackageName"],
  58560. source: "load: aPackageName\x0a\x09(self named: aPackageName) load",
  58561. referencedClasses: [],
  58562. //>>excludeEnd("ide");
  58563. messageSends: ["load", "named:"]
  58564. }),
  58565. $globals.Package.klass);
  58566. $core.addMethod(
  58567. $core.method({
  58568. selector: "load:fromNamespace:",
  58569. protocol: '*Kernel-ImportExport',
  58570. fn: function (aPackageName,aString){
  58571. var self=this;
  58572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58573. return $core.withContext(function($ctx1) {
  58574. //>>excludeEnd("ctx");
  58575. $recv(self._named_(aPackageName))._loadFromNamespace_(aString);
  58576. return self;
  58577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58578. }, function($ctx1) {$ctx1.fill(self,"load:fromNamespace:",{aPackageName:aPackageName,aString:aString},$globals.Package.klass)});
  58579. //>>excludeEnd("ctx");
  58580. },
  58581. //>>excludeStart("ide", pragmas.excludeIdeData);
  58582. args: ["aPackageName", "aString"],
  58583. source: "load: aPackageName fromNamespace: aString\x0a\x09(self named: aPackageName) loadFromNamespace: aString",
  58584. referencedClasses: [],
  58585. //>>excludeEnd("ide");
  58586. messageSends: ["loadFromNamespace:", "named:"]
  58587. }),
  58588. $globals.Package.klass);
  58589. });
  58590. define("amber_core/Kernel-Tests", ["amber/boot", "amber_core/SUnit", "amber_core/Kernel-Objects"], function($boot){
  58591. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  58592. var smalltalk=$core,_st=$recv,globals=$globals;
  58593. $core.addPackage('Kernel-Tests');
  58594. $core.packages["Kernel-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  58595. $core.addClass('AnnouncementSubscriptionTest', $globals.TestCase, [], 'Kernel-Tests');
  58596. $core.addMethod(
  58597. $core.method({
  58598. selector: "testAddExtensionMethod",
  58599. protocol: 'tests',
  58600. fn: function (){
  58601. var self=this;
  58602. var method,dirty;
  58603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58604. return $core.withContext(function($ctx1) {
  58605. //>>excludeEnd("ctx");
  58606. var $2,$1,$4,$3,$5,$8,$7,$6,$9,$10;
  58607. $2=self._class();
  58608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58609. $ctx1.sendIdx["class"]=1;
  58610. //>>excludeEnd("ctx");
  58611. $1=$recv($2)._package();
  58612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58613. $ctx1.sendIdx["package"]=1;
  58614. //>>excludeEnd("ctx");
  58615. dirty=$recv($1)._isDirty();
  58616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58617. $ctx1.sendIdx["isDirty"]=1;
  58618. //>>excludeEnd("ctx");
  58619. $4=self._class();
  58620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58621. $ctx1.sendIdx["class"]=2;
  58622. //>>excludeEnd("ctx");
  58623. $3=$recv($4)._package();
  58624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58625. $ctx1.sendIdx["package"]=2;
  58626. //>>excludeEnd("ctx");
  58627. $recv($3)._beClean();
  58628. $5=self._class();
  58629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58630. $ctx1.sendIdx["class"]=3;
  58631. //>>excludeEnd("ctx");
  58632. method=$recv($5)._compile_protocol_("doNothing","**not-a-package");
  58633. $8=self._class();
  58634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58635. $ctx1.sendIdx["class"]=4;
  58636. //>>excludeEnd("ctx");
  58637. $7=$recv($8)._package();
  58638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58639. $ctx1.sendIdx["package"]=3;
  58640. //>>excludeEnd("ctx");
  58641. $6=$recv($7)._isDirty();
  58642. self._deny_($6);
  58643. $9=self._class();
  58644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58645. $ctx1.sendIdx["class"]=5;
  58646. //>>excludeEnd("ctx");
  58647. $recv($9)._removeCompiledMethod_(method);
  58648. $10=dirty;
  58649. if($core.assert($10)){
  58650. $recv($recv(self._class())._package())._beDirty();
  58651. };
  58652. return self;
  58653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58654. }, function($ctx1) {$ctx1.fill(self,"testAddExtensionMethod",{method:method,dirty:dirty},$globals.AnnouncementSubscriptionTest)});
  58655. //>>excludeEnd("ctx");
  58656. },
  58657. //>>excludeStart("ide", pragmas.excludeIdeData);
  58658. args: [],
  58659. source: "testAddExtensionMethod\x0a\x09| method dirty |\x0a\x09dirty := self class package isDirty.\x0a\x09self class package beClean.\x0a\x09method := self class compile: 'doNothing' protocol: '**not-a-package'.\x0a\x09self deny: self class package isDirty.\x0a\x09\x0a\x09self class removeCompiledMethod: method.\x0a\x09dirty ifTrue: [ self class package beDirty ]",
  58660. referencedClasses: [],
  58661. //>>excludeEnd("ide");
  58662. messageSends: ["isDirty", "package", "class", "beClean", "compile:protocol:", "deny:", "removeCompiledMethod:", "ifTrue:", "beDirty"]
  58663. }),
  58664. $globals.AnnouncementSubscriptionTest);
  58665. $core.addMethod(
  58666. $core.method({
  58667. selector: "testHandlesAnnouncement",
  58668. protocol: 'tests',
  58669. fn: function (){
  58670. var self=this;
  58671. var subscription,announcementClass1,announcementClass2,classBuilder;
  58672. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  58673. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  58674. function $AnnouncementSubscription(){return $globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  58675. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  58676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58677. return $core.withContext(function($ctx1) {
  58678. //>>excludeEnd("ctx");
  58679. var $1,$2;
  58680. classBuilder=$recv($ClassBuilder())._new();
  58681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58682. $ctx1.sendIdx["new"]=1;
  58683. //>>excludeEnd("ctx");
  58684. announcementClass1=$recv(classBuilder)._basicAddSubclassOf_named_instanceVariableNames_package_($SystemAnnouncement(),"TestAnnouncement1",[],"Kernel-Tests");
  58685. subscription=$recv($recv($AnnouncementSubscription())._new())._announcementClass_($SystemAnnouncement());
  58686. $1=$recv(subscription)._handlesAnnouncement_($SystemAnnouncement());
  58687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58688. $ctx1.sendIdx["handlesAnnouncement:"]=1;
  58689. //>>excludeEnd("ctx");
  58690. self._assert_equals_($1,true);
  58691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58692. $ctx1.sendIdx["assert:equals:"]=1;
  58693. //>>excludeEnd("ctx");
  58694. $2=$recv(subscription)._handlesAnnouncement_(announcementClass1);
  58695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58696. $ctx1.sendIdx["handlesAnnouncement:"]=2;
  58697. //>>excludeEnd("ctx");
  58698. self._assert_equals_($2,true);
  58699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58700. $ctx1.sendIdx["assert:equals:"]=2;
  58701. //>>excludeEnd("ctx");
  58702. self._assert_equals_($recv(subscription)._handlesAnnouncement_($Object()),false);
  58703. $recv(classBuilder)._basicRemoveClass_(announcementClass1);
  58704. return self;
  58705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58706. }, function($ctx1) {$ctx1.fill(self,"testHandlesAnnouncement",{subscription:subscription,announcementClass1:announcementClass1,announcementClass2:announcementClass2,classBuilder:classBuilder},$globals.AnnouncementSubscriptionTest)});
  58707. //>>excludeEnd("ctx");
  58708. },
  58709. //>>excludeStart("ide", pragmas.excludeIdeData);
  58710. args: [],
  58711. source: "testHandlesAnnouncement\x0a\x09| subscription announcementClass1 announcementClass2 classBuilder |\x0a\x09\x0a\x09classBuilder := ClassBuilder new.\x0a\x09announcementClass1 := classBuilder basicAddSubclassOf: SystemAnnouncement named: 'TestAnnouncement1' instanceVariableNames: #() package: 'Kernel-Tests'.\x0a\x09\x0a\x09subscription := AnnouncementSubscription new announcementClass: SystemAnnouncement.\x0a\x09\x22Test whether the same class triggers the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: SystemAnnouncement) equals: true.\x0a\x09\x22Test whether a subclass triggers the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: announcementClass1) equals: true.\x0a\x09\x22Test whether an unrelated class does not trigger the announcement\x22\x0a\x09self assert: (subscription handlesAnnouncement: Object) equals: false.\x0a\x09\x0a\x09classBuilder basicRemoveClass: announcementClass1.",
  58712. referencedClasses: ["ClassBuilder", "SystemAnnouncement", "AnnouncementSubscription", "Object"],
  58713. //>>excludeEnd("ide");
  58714. messageSends: ["new", "basicAddSubclassOf:named:instanceVariableNames:package:", "announcementClass:", "assert:equals:", "handlesAnnouncement:", "basicRemoveClass:"]
  58715. }),
  58716. $globals.AnnouncementSubscriptionTest);
  58717. $core.addClass('AnnouncerTest', $globals.TestCase, [], 'Kernel-Tests');
  58718. $core.addMethod(
  58719. $core.method({
  58720. selector: "testOnDo",
  58721. protocol: 'tests',
  58722. fn: function (){
  58723. var self=this;
  58724. var counter,announcer;
  58725. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  58726. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  58727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58728. return $core.withContext(function($ctx1) {
  58729. //>>excludeEnd("ctx");
  58730. var $1,$2;
  58731. counter=(0);
  58732. announcer=$recv($Announcer())._new();
  58733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58734. $ctx1.sendIdx["new"]=1;
  58735. //>>excludeEnd("ctx");
  58736. $recv(announcer)._on_do_($SystemAnnouncement(),(function(){
  58737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58738. return $core.withContext(function($ctx2) {
  58739. //>>excludeEnd("ctx");
  58740. counter=$recv(counter).__plus((1));
  58741. return counter;
  58742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58743. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58744. //>>excludeEnd("ctx");
  58745. }));
  58746. $1=announcer;
  58747. $2=$recv($SystemAnnouncement())._new();
  58748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58749. $ctx1.sendIdx["new"]=2;
  58750. //>>excludeEnd("ctx");
  58751. $recv($1)._announce_($2);
  58752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58753. $ctx1.sendIdx["announce:"]=1;
  58754. //>>excludeEnd("ctx");
  58755. self._assert_equals_(counter,(1));
  58756. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58757. $ctx1.sendIdx["assert:equals:"]=1;
  58758. //>>excludeEnd("ctx");
  58759. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  58760. self._assert_equals_(counter,(2));
  58761. return self;
  58762. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58763. }, function($ctx1) {$ctx1.fill(self,"testOnDo",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  58764. //>>excludeEnd("ctx");
  58765. },
  58766. //>>excludeStart("ide", pragmas.excludeIdeData);
  58767. args: [],
  58768. source: "testOnDo\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement do: [ counter := counter + 1 ].\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.",
  58769. referencedClasses: ["Announcer", "SystemAnnouncement"],
  58770. //>>excludeEnd("ide");
  58771. messageSends: ["new", "on:do:", "+", "announce:", "assert:equals:"]
  58772. }),
  58773. $globals.AnnouncerTest);
  58774. $core.addMethod(
  58775. $core.method({
  58776. selector: "testOnDoFor",
  58777. protocol: 'tests',
  58778. fn: function (){
  58779. var self=this;
  58780. var counter,announcer;
  58781. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  58782. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  58783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58784. return $core.withContext(function($ctx1) {
  58785. //>>excludeEnd("ctx");
  58786. var $1,$2,$3,$4;
  58787. counter=(0);
  58788. announcer=$recv($Announcer())._new();
  58789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58790. $ctx1.sendIdx["new"]=1;
  58791. //>>excludeEnd("ctx");
  58792. $recv(announcer)._on_do_for_($SystemAnnouncement(),(function(){
  58793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58794. return $core.withContext(function($ctx2) {
  58795. //>>excludeEnd("ctx");
  58796. counter=$recv(counter).__plus((1));
  58797. return counter;
  58798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58799. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58800. //>>excludeEnd("ctx");
  58801. }),self);
  58802. $1=announcer;
  58803. $2=$recv($SystemAnnouncement())._new();
  58804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58805. $ctx1.sendIdx["new"]=2;
  58806. //>>excludeEnd("ctx");
  58807. $recv($1)._announce_($2);
  58808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58809. $ctx1.sendIdx["announce:"]=1;
  58810. //>>excludeEnd("ctx");
  58811. self._assert_equals_(counter,(1));
  58812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58813. $ctx1.sendIdx["assert:equals:"]=1;
  58814. //>>excludeEnd("ctx");
  58815. $3=announcer;
  58816. $4=$recv($SystemAnnouncement())._new();
  58817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58818. $ctx1.sendIdx["new"]=3;
  58819. //>>excludeEnd("ctx");
  58820. $recv($3)._announce_($4);
  58821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58822. $ctx1.sendIdx["announce:"]=2;
  58823. //>>excludeEnd("ctx");
  58824. self._assert_equals_(counter,(2));
  58825. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58826. $ctx1.sendIdx["assert:equals:"]=2;
  58827. //>>excludeEnd("ctx");
  58828. $recv(announcer)._unsubscribe_(self);
  58829. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  58830. self._assert_equals_(counter,(2));
  58831. return self;
  58832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58833. }, function($ctx1) {$ctx1.fill(self,"testOnDoFor",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  58834. //>>excludeEnd("ctx");
  58835. },
  58836. //>>excludeStart("ide", pragmas.excludeIdeData);
  58837. args: [],
  58838. source: "testOnDoFor\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement do: [ counter := counter + 1 ] for: self.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.\x0a\x09\x0a\x09announcer unsubscribe: self.\x0a\x09\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 2.",
  58839. referencedClasses: ["Announcer", "SystemAnnouncement"],
  58840. //>>excludeEnd("ide");
  58841. messageSends: ["new", "on:do:for:", "+", "announce:", "assert:equals:", "unsubscribe:"]
  58842. }),
  58843. $globals.AnnouncerTest);
  58844. $core.addMethod(
  58845. $core.method({
  58846. selector: "testOnDoOnce",
  58847. protocol: 'tests',
  58848. fn: function (){
  58849. var self=this;
  58850. var counter,announcer;
  58851. function $Announcer(){return $globals.Announcer||(typeof Announcer=="undefined"?nil:Announcer)}
  58852. function $SystemAnnouncement(){return $globals.SystemAnnouncement||(typeof SystemAnnouncement=="undefined"?nil:SystemAnnouncement)}
  58853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58854. return $core.withContext(function($ctx1) {
  58855. //>>excludeEnd("ctx");
  58856. var $1,$2;
  58857. counter=(0);
  58858. announcer=$recv($Announcer())._new();
  58859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58860. $ctx1.sendIdx["new"]=1;
  58861. //>>excludeEnd("ctx");
  58862. $recv(announcer)._on_doOnce_($SystemAnnouncement(),(function(){
  58863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58864. return $core.withContext(function($ctx2) {
  58865. //>>excludeEnd("ctx");
  58866. counter=$recv(counter).__plus((1));
  58867. return counter;
  58868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58869. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58870. //>>excludeEnd("ctx");
  58871. }));
  58872. $1=announcer;
  58873. $2=$recv($SystemAnnouncement())._new();
  58874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58875. $ctx1.sendIdx["new"]=2;
  58876. //>>excludeEnd("ctx");
  58877. $recv($1)._announce_($2);
  58878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58879. $ctx1.sendIdx["announce:"]=1;
  58880. //>>excludeEnd("ctx");
  58881. self._assert_equals_(counter,(1));
  58882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58883. $ctx1.sendIdx["assert:equals:"]=1;
  58884. //>>excludeEnd("ctx");
  58885. $recv(announcer)._announce_($recv($SystemAnnouncement())._new());
  58886. self._assert_equals_(counter,(1));
  58887. return self;
  58888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58889. }, function($ctx1) {$ctx1.fill(self,"testOnDoOnce",{counter:counter,announcer:announcer},$globals.AnnouncerTest)});
  58890. //>>excludeEnd("ctx");
  58891. },
  58892. //>>excludeStart("ide", pragmas.excludeIdeData);
  58893. args: [],
  58894. source: "testOnDoOnce\x0a\x09| counter announcer |\x0a\x09\x0a\x09counter := 0.\x0a\x09announcer := Announcer new.\x0a\x09announcer on: SystemAnnouncement doOnce: [ counter := counter + 1 ].\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.\x0a\x0a\x09announcer announce: (SystemAnnouncement new).\x0a\x09self assert: counter equals: 1.",
  58895. referencedClasses: ["Announcer", "SystemAnnouncement"],
  58896. //>>excludeEnd("ide");
  58897. messageSends: ["new", "on:doOnce:", "+", "announce:", "assert:equals:"]
  58898. }),
  58899. $globals.AnnouncerTest);
  58900. $core.addClass('BlockClosureTest', $globals.TestCase, [], 'Kernel-Tests');
  58901. $core.addMethod(
  58902. $core.method({
  58903. selector: "testCanClearInterval",
  58904. protocol: 'tests',
  58905. fn: function (){
  58906. var self=this;
  58907. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  58908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58909. return $core.withContext(function($ctx1) {
  58910. //>>excludeEnd("ctx");
  58911. self._shouldnt_raise_((function(){
  58912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58913. return $core.withContext(function($ctx2) {
  58914. //>>excludeEnd("ctx");
  58915. return $recv($recv((function(){
  58916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58917. return $core.withContext(function($ctx3) {
  58918. //>>excludeEnd("ctx");
  58919. return $recv($recv($Error())._new())._signal();
  58920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58921. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  58922. //>>excludeEnd("ctx");
  58923. }))._valueWithInterval_((0)))._clearInterval();
  58924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58925. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58926. //>>excludeEnd("ctx");
  58927. }),$Error());
  58928. return self;
  58929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58930. }, function($ctx1) {$ctx1.fill(self,"testCanClearInterval",{},$globals.BlockClosureTest)});
  58931. //>>excludeEnd("ctx");
  58932. },
  58933. //>>excludeStart("ide", pragmas.excludeIdeData);
  58934. args: [],
  58935. source: "testCanClearInterval\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithInterval: 0) clearInterval ] raise: Error",
  58936. referencedClasses: ["Error"],
  58937. //>>excludeEnd("ide");
  58938. messageSends: ["shouldnt:raise:", "clearInterval", "valueWithInterval:", "signal", "new"]
  58939. }),
  58940. $globals.BlockClosureTest);
  58941. $core.addMethod(
  58942. $core.method({
  58943. selector: "testCanClearTimeout",
  58944. protocol: 'tests',
  58945. fn: function (){
  58946. var self=this;
  58947. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  58948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58949. return $core.withContext(function($ctx1) {
  58950. //>>excludeEnd("ctx");
  58951. self._shouldnt_raise_((function(){
  58952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58953. return $core.withContext(function($ctx2) {
  58954. //>>excludeEnd("ctx");
  58955. return $recv($recv((function(){
  58956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58957. return $core.withContext(function($ctx3) {
  58958. //>>excludeEnd("ctx");
  58959. return $recv($recv($Error())._new())._signal();
  58960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58961. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  58962. //>>excludeEnd("ctx");
  58963. }))._valueWithTimeout_((0)))._clearTimeout();
  58964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58965. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58966. //>>excludeEnd("ctx");
  58967. }),$Error());
  58968. return self;
  58969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58970. }, function($ctx1) {$ctx1.fill(self,"testCanClearTimeout",{},$globals.BlockClosureTest)});
  58971. //>>excludeEnd("ctx");
  58972. },
  58973. //>>excludeStart("ide", pragmas.excludeIdeData);
  58974. args: [],
  58975. source: "testCanClearTimeout\x0a\x09self shouldnt: [ ([ Error new signal ] valueWithTimeout: 0) clearTimeout ] raise: Error",
  58976. referencedClasses: ["Error"],
  58977. //>>excludeEnd("ide");
  58978. messageSends: ["shouldnt:raise:", "clearTimeout", "valueWithTimeout:", "signal", "new"]
  58979. }),
  58980. $globals.BlockClosureTest);
  58981. $core.addMethod(
  58982. $core.method({
  58983. selector: "testCompiledSource",
  58984. protocol: 'tests',
  58985. fn: function (){
  58986. var self=this;
  58987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58988. return $core.withContext(function($ctx1) {
  58989. //>>excludeEnd("ctx");
  58990. self._assert_($recv($recv((function(){
  58991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58992. return $core.withContext(function($ctx2) {
  58993. //>>excludeEnd("ctx");
  58994. return (1).__plus((1));
  58995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58996. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  58997. //>>excludeEnd("ctx");
  58998. }))._compiledSource())._includesSubString_("function"));
  58999. return self;
  59000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59001. }, function($ctx1) {$ctx1.fill(self,"testCompiledSource",{},$globals.BlockClosureTest)});
  59002. //>>excludeEnd("ctx");
  59003. },
  59004. //>>excludeStart("ide", pragmas.excludeIdeData);
  59005. args: [],
  59006. source: "testCompiledSource\x0a\x09self assert: ([ 1+1 ] compiledSource includesSubString: 'function')",
  59007. referencedClasses: [],
  59008. //>>excludeEnd("ide");
  59009. messageSends: ["assert:", "includesSubString:", "compiledSource", "+"]
  59010. }),
  59011. $globals.BlockClosureTest);
  59012. $core.addMethod(
  59013. $core.method({
  59014. selector: "testCurrySelf",
  59015. protocol: 'tests',
  59016. fn: function (){
  59017. var self=this;
  59018. var curriedMethod,array;
  59019. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  59020. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  59021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59022. return $core.withContext(function($ctx1) {
  59023. //>>excludeEnd("ctx");
  59024. curriedMethod=$recv($recv((function(selfarg,x){
  59025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59026. return $core.withContext(function($ctx2) {
  59027. //>>excludeEnd("ctx");
  59028. return $recv(selfarg)._at_(x);
  59029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59030. }, function($ctx2) {$ctx2.fillBlock({selfarg:selfarg,x:x},$ctx1,1)});
  59031. //>>excludeEnd("ctx");
  59032. }))._currySelf())._asCompiledMethod_("foo:");
  59033. array=[(3), (1), (4)];
  59034. $recv($recv($ClassBuilder())._new())._installMethod_forClass_protocol_(curriedMethod,$Array(),"**test helper");
  59035. $recv((function(){
  59036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59037. return $core.withContext(function($ctx2) {
  59038. //>>excludeEnd("ctx");
  59039. return self._assert_equals_($recv(array)._foo_((2)),(1));
  59040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59041. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  59042. //>>excludeEnd("ctx");
  59043. }))._ensure_((function(){
  59044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59045. return $core.withContext(function($ctx2) {
  59046. //>>excludeEnd("ctx");
  59047. return $recv($Array())._removeCompiledMethod_(curriedMethod);
  59048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59049. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  59050. //>>excludeEnd("ctx");
  59051. }));
  59052. return self;
  59053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59054. }, function($ctx1) {$ctx1.fill(self,"testCurrySelf",{curriedMethod:curriedMethod,array:array},$globals.BlockClosureTest)});
  59055. //>>excludeEnd("ctx");
  59056. },
  59057. //>>excludeStart("ide", pragmas.excludeIdeData);
  59058. args: [],
  59059. source: "testCurrySelf\x0a\x09| curriedMethod array |\x0a\x09curriedMethod := [ :selfarg :x | selfarg at: x ] currySelf asCompiledMethod: 'foo:'.\x0a\x09array := #(3 1 4).\x0a\x09ClassBuilder new installMethod: curriedMethod forClass: Array protocol: '**test helper'.\x0a\x09[ self assert: (array foo: 2) equals: 1 ]\x0a\x09ensure: [ Array removeCompiledMethod: curriedMethod ]",
  59060. referencedClasses: ["ClassBuilder", "Array"],
  59061. //>>excludeEnd("ide");
  59062. messageSends: ["asCompiledMethod:", "currySelf", "at:", "installMethod:forClass:protocol:", "new", "ensure:", "assert:equals:", "foo:", "removeCompiledMethod:"]
  59063. }),
  59064. $globals.BlockClosureTest);
  59065. $core.addMethod(
  59066. $core.method({
  59067. selector: "testEnsure",
  59068. protocol: 'tests',
  59069. fn: function (){
  59070. var self=this;
  59071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59072. return $core.withContext(function($ctx1) {
  59073. //>>excludeEnd("ctx");
  59074. self._assert_equals_($recv((function(){
  59075. return (3);
  59076. }))._ensure_((function(){
  59077. return (4);
  59078. })),(3));
  59079. return self;
  59080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59081. }, function($ctx1) {$ctx1.fill(self,"testEnsure",{},$globals.BlockClosureTest)});
  59082. //>>excludeEnd("ctx");
  59083. },
  59084. //>>excludeStart("ide", pragmas.excludeIdeData);
  59085. args: [],
  59086. source: "testEnsure\x0a\x09self assert: ([ 3 ] ensure: [ 4 ]) equals: 3",
  59087. referencedClasses: [],
  59088. //>>excludeEnd("ide");
  59089. messageSends: ["assert:equals:", "ensure:"]
  59090. }),
  59091. $globals.BlockClosureTest);
  59092. $core.addMethod(
  59093. $core.method({
  59094. selector: "testEnsureRaises",
  59095. protocol: 'tests',
  59096. fn: function (){
  59097. var self=this;
  59098. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  59099. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59100. return $core.withContext(function($ctx1) {
  59101. //>>excludeEnd("ctx");
  59102. self._should_raise_((function(){
  59103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59104. return $core.withContext(function($ctx2) {
  59105. //>>excludeEnd("ctx");
  59106. return $recv((function(){
  59107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59108. return $core.withContext(function($ctx3) {
  59109. //>>excludeEnd("ctx");
  59110. return $recv($recv($Error())._new())._signal();
  59111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59112. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  59113. //>>excludeEnd("ctx");
  59114. }))._ensure_((function(){
  59115. return true;
  59116. }));
  59117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59118. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59119. //>>excludeEnd("ctx");
  59120. }),$Error());
  59121. return self;
  59122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59123. }, function($ctx1) {$ctx1.fill(self,"testEnsureRaises",{},$globals.BlockClosureTest)});
  59124. //>>excludeEnd("ctx");
  59125. },
  59126. //>>excludeStart("ide", pragmas.excludeIdeData);
  59127. args: [],
  59128. source: "testEnsureRaises\x0a\x09self should: [ [Error new signal ] ensure: [ true ]] raise: Error",
  59129. referencedClasses: ["Error"],
  59130. //>>excludeEnd("ide");
  59131. messageSends: ["should:raise:", "ensure:", "signal", "new"]
  59132. }),
  59133. $globals.BlockClosureTest);
  59134. $core.addMethod(
  59135. $core.method({
  59136. selector: "testExceptionSemantics",
  59137. protocol: 'tests',
  59138. fn: function (){
  59139. var self=this;
  59140. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  59141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59142. return $core.withContext(function($ctx1) {
  59143. //>>excludeEnd("ctx");
  59144. self._timeout_((100));
  59145. $recv(self._async_((function(){
  59146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59147. return $core.withContext(function($ctx2) {
  59148. //>>excludeEnd("ctx");
  59149. return $recv((function(){
  59150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59151. return $core.withContext(function($ctx3) {
  59152. //>>excludeEnd("ctx");
  59153. self._assert_(true);
  59154. $recv($Error())._signal();
  59155. self._deny_(true);
  59156. return self._finished();
  59157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59158. $ctx3.sendIdx["finished"]=1;
  59159. //>>excludeEnd("ctx");
  59160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59161. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  59162. //>>excludeEnd("ctx");
  59163. }))._on_do_($Error(),(function(ex){
  59164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59165. return $core.withContext(function($ctx3) {
  59166. //>>excludeEnd("ctx");
  59167. return self._finished();
  59168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59169. }, function($ctx3) {$ctx3.fillBlock({ex:ex},$ctx2,3)});
  59170. //>>excludeEnd("ctx");
  59171. }));
  59172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59173. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59174. //>>excludeEnd("ctx");
  59175. })))._valueWithTimeout_((0));
  59176. return self;
  59177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59178. }, function($ctx1) {$ctx1.fill(self,"testExceptionSemantics",{},$globals.BlockClosureTest)});
  59179. //>>excludeEnd("ctx");
  59180. },
  59181. //>>excludeStart("ide", pragmas.excludeIdeData);
  59182. args: [],
  59183. source: "testExceptionSemantics\x0a\x09\x22See https://github.com/NicolasPetton/amber/issues/314\x22\x0a\x09self timeout: 100.\x0a\x09\x0a\x09(self async: [\x0a\x09\x09[\x0a\x09\x09\x09self assert: true.\x0a\x09\x09\x09Error signal.\x0a\x09\x09\x09\x22The following should *not* be run\x22\x0a\x09\x09\x09self deny: true.\x0a\x09\x09\x09self finished.\x0a\x09\x09] on: Error do: [ :ex | self finished ]\x0a\x09]) valueWithTimeout: 0",
  59184. referencedClasses: ["Error"],
  59185. //>>excludeEnd("ide");
  59186. messageSends: ["timeout:", "valueWithTimeout:", "async:", "on:do:", "assert:", "signal", "deny:", "finished"]
  59187. }),
  59188. $globals.BlockClosureTest);
  59189. $core.addMethod(
  59190. $core.method({
  59191. selector: "testNewWithValues",
  59192. protocol: 'tests',
  59193. fn: function (){
  59194. var self=this;
  59195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59196. return $core.withContext(function($ctx1) {
  59197. //>>excludeEnd("ctx");
  59198. function TestConstructor(arg1, arg2, arg3) {}
  59199. TestConstructor.prototype.name = 'theTestPrototype';
  59200. var wrappedConstructor = $recv(TestConstructor);
  59201. var result = wrappedConstructor._newWithValues_([1, 2, 3 ]);
  59202. self._assert_(result instanceof TestConstructor);
  59203. self._assert_equals_(result.name, 'theTestPrototype');
  59204. "newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made."
  59205. self._should_raise_(function () {wrappedConstructor._newWithValues_('single argument');}, $globals.Error);;
  59206. return self;
  59207. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59208. }, function($ctx1) {$ctx1.fill(self,"testNewWithValues",{},$globals.BlockClosureTest)});
  59209. //>>excludeEnd("ctx");
  59210. },
  59211. //>>excludeStart("ide", pragmas.excludeIdeData);
  59212. args: [],
  59213. source: "testNewWithValues\x0a<\x0a\x09function TestConstructor(arg1, arg2, arg3) {}\x0a\x09TestConstructor.prototype.name = 'theTestPrototype';\x0a\x0a\x09var wrappedConstructor = $recv(TestConstructor);\x0a\x09var result = wrappedConstructor._newWithValues_([1, 2, 3 ]);\x0a\x09self._assert_(result instanceof TestConstructor);\x0a\x09self._assert_equals_(result.name, 'theTestPrototype');\x0a\x0a\x09\x22newWithValues: cannot help if the argument list is wrong, and should warn that a mistake was made.\x22\x0a\x09self._should_raise_(function () {wrappedConstructor._newWithValues_('single argument');}, $globals.Error);\x0a>",
  59214. referencedClasses: [],
  59215. //>>excludeEnd("ide");
  59216. messageSends: []
  59217. }),
  59218. $globals.BlockClosureTest);
  59219. $core.addMethod(
  59220. $core.method({
  59221. selector: "testNumArgs",
  59222. protocol: 'tests',
  59223. fn: function (){
  59224. var self=this;
  59225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59226. return $core.withContext(function($ctx1) {
  59227. //>>excludeEnd("ctx");
  59228. var $1;
  59229. $1=$recv((function(){
  59230. }))._numArgs();
  59231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59232. $ctx1.sendIdx["numArgs"]=1;
  59233. //>>excludeEnd("ctx");
  59234. self._assert_equals_($1,(0));
  59235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59236. $ctx1.sendIdx["assert:equals:"]=1;
  59237. //>>excludeEnd("ctx");
  59238. self._assert_equals_($recv((function(a,b){
  59239. }))._numArgs(),(2));
  59240. return self;
  59241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59242. }, function($ctx1) {$ctx1.fill(self,"testNumArgs",{},$globals.BlockClosureTest)});
  59243. //>>excludeEnd("ctx");
  59244. },
  59245. //>>excludeStart("ide", pragmas.excludeIdeData);
  59246. args: [],
  59247. source: "testNumArgs\x0a\x09self assert: [] numArgs equals: 0.\x0a\x09self assert: [ :a :b | ] numArgs equals: 2",
  59248. referencedClasses: [],
  59249. //>>excludeEnd("ide");
  59250. messageSends: ["assert:equals:", "numArgs"]
  59251. }),
  59252. $globals.BlockClosureTest);
  59253. $core.addMethod(
  59254. $core.method({
  59255. selector: "testOnDo",
  59256. protocol: 'tests',
  59257. fn: function (){
  59258. var self=this;
  59259. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  59260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59261. return $core.withContext(function($ctx1) {
  59262. //>>excludeEnd("ctx");
  59263. self._assert_($recv((function(){
  59264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59265. return $core.withContext(function($ctx2) {
  59266. //>>excludeEnd("ctx");
  59267. return $recv($recv($Error())._new())._signal();
  59268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59269. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59270. //>>excludeEnd("ctx");
  59271. }))._on_do_($Error(),(function(ex){
  59272. return true;
  59273. })));
  59274. return self;
  59275. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59276. }, function($ctx1) {$ctx1.fill(self,"testOnDo",{},$globals.BlockClosureTest)});
  59277. //>>excludeEnd("ctx");
  59278. },
  59279. //>>excludeStart("ide", pragmas.excludeIdeData);
  59280. args: [],
  59281. source: "testOnDo\x0a\x09self assert: ([ Error new signal ] on: Error do: [ :ex | true ])",
  59282. referencedClasses: ["Error"],
  59283. //>>excludeEnd("ide");
  59284. messageSends: ["assert:", "on:do:", "signal", "new"]
  59285. }),
  59286. $globals.BlockClosureTest);
  59287. $core.addMethod(
  59288. $core.method({
  59289. selector: "testValue",
  59290. protocol: 'tests',
  59291. fn: function (){
  59292. var self=this;
  59293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59294. return $core.withContext(function($ctx1) {
  59295. //>>excludeEnd("ctx");
  59296. var $1;
  59297. $1=$recv((function(){
  59298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59299. return $core.withContext(function($ctx2) {
  59300. //>>excludeEnd("ctx");
  59301. return (1).__plus((1));
  59302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59303. $ctx2.sendIdx["+"]=1;
  59304. //>>excludeEnd("ctx");
  59305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59306. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59307. //>>excludeEnd("ctx");
  59308. }))._value();
  59309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59310. $ctx1.sendIdx["value"]=1;
  59311. //>>excludeEnd("ctx");
  59312. self._assert_equals_($1,(2));
  59313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59314. $ctx1.sendIdx["assert:equals:"]=1;
  59315. //>>excludeEnd("ctx");
  59316. self._assert_equals_($recv((function(x){
  59317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59318. return $core.withContext(function($ctx2) {
  59319. //>>excludeEnd("ctx");
  59320. return $recv(x).__plus((1));
  59321. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59322. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  59323. //>>excludeEnd("ctx");
  59324. }))._value_((2)),(3));
  59325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59326. $ctx1.sendIdx["assert:equals:"]=2;
  59327. //>>excludeEnd("ctx");
  59328. self._assert_equals_($recv((function(x,y){
  59329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59330. return $core.withContext(function($ctx2) {
  59331. //>>excludeEnd("ctx");
  59332. return $recv(x).__star(y);
  59333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59334. }, function($ctx2) {$ctx2.fillBlock({x:x,y:y},$ctx1,3)});
  59335. //>>excludeEnd("ctx");
  59336. }))._value_value_((2),(4)),(8));
  59337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59338. $ctx1.sendIdx["assert:equals:"]=3;
  59339. //>>excludeEnd("ctx");
  59340. self._assert_equals_($recv((function(a,b,c){
  59341. return (1);
  59342. }))._value(),(1));
  59343. return self;
  59344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59345. }, function($ctx1) {$ctx1.fill(self,"testValue",{},$globals.BlockClosureTest)});
  59346. //>>excludeEnd("ctx");
  59347. },
  59348. //>>excludeStart("ide", pragmas.excludeIdeData);
  59349. args: [],
  59350. source: "testValue\x0a\x09self assert: ([ 1+1 ] value) equals: 2.\x0a\x09self assert: ([ :x | x +1 ] value: 2) equals: 3.\x0a\x09self assert: ([ :x :y | x*y ] value: 2 value: 4) equals: 8.\x0a\x0a\x09\x22Arguments are optional in Amber. This isn't ANSI compliant.\x22\x0a\x0a\x09self assert: ([ :a :b :c | 1 ] value) equals: 1",
  59351. referencedClasses: [],
  59352. //>>excludeEnd("ide");
  59353. messageSends: ["assert:equals:", "value", "+", "value:", "value:value:", "*"]
  59354. }),
  59355. $globals.BlockClosureTest);
  59356. $core.addMethod(
  59357. $core.method({
  59358. selector: "testValueWithPossibleArguments",
  59359. protocol: 'tests',
  59360. fn: function (){
  59361. var self=this;
  59362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59363. return $core.withContext(function($ctx1) {
  59364. //>>excludeEnd("ctx");
  59365. var $1,$2;
  59366. $1=$recv((function(){
  59367. return (1);
  59368. }))._valueWithPossibleArguments_([(3), (4)]);
  59369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59370. $ctx1.sendIdx["valueWithPossibleArguments:"]=1;
  59371. //>>excludeEnd("ctx");
  59372. self._assert_equals_($1,(1));
  59373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59374. $ctx1.sendIdx["assert:equals:"]=1;
  59375. //>>excludeEnd("ctx");
  59376. $2=$recv((function(a){
  59377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59378. return $core.withContext(function($ctx2) {
  59379. //>>excludeEnd("ctx");
  59380. return $recv(a).__plus((4));
  59381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59382. $ctx2.sendIdx["+"]=1;
  59383. //>>excludeEnd("ctx");
  59384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59385. }, function($ctx2) {$ctx2.fillBlock({a:a},$ctx1,2)});
  59386. //>>excludeEnd("ctx");
  59387. }))._valueWithPossibleArguments_([(3), (4)]);
  59388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59389. $ctx1.sendIdx["valueWithPossibleArguments:"]=2;
  59390. //>>excludeEnd("ctx");
  59391. self._assert_equals_($2,(7));
  59392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59393. $ctx1.sendIdx["assert:equals:"]=2;
  59394. //>>excludeEnd("ctx");
  59395. self._assert_equals_($recv((function(a,b){
  59396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59397. return $core.withContext(function($ctx2) {
  59398. //>>excludeEnd("ctx");
  59399. return $recv(a).__plus(b);
  59400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59401. }, function($ctx2) {$ctx2.fillBlock({a:a,b:b},$ctx1,3)});
  59402. //>>excludeEnd("ctx");
  59403. }))._valueWithPossibleArguments_([(3), (4), (5)]),(7));
  59404. return self;
  59405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59406. }, function($ctx1) {$ctx1.fill(self,"testValueWithPossibleArguments",{},$globals.BlockClosureTest)});
  59407. //>>excludeEnd("ctx");
  59408. },
  59409. //>>excludeStart("ide", pragmas.excludeIdeData);
  59410. args: [],
  59411. source: "testValueWithPossibleArguments\x0a\x09self assert: ([ 1 ] valueWithPossibleArguments: #(3 4)) equals: 1.\x0a\x09self assert: ([ :a | a + 4 ] valueWithPossibleArguments: #(3 4)) equals: 7.\x0a\x09self assert: ([ :a :b | a + b ] valueWithPossibleArguments: #(3 4 5)) equals: 7.",
  59412. referencedClasses: [],
  59413. //>>excludeEnd("ide");
  59414. messageSends: ["assert:equals:", "valueWithPossibleArguments:", "+"]
  59415. }),
  59416. $globals.BlockClosureTest);
  59417. $core.addMethod(
  59418. $core.method({
  59419. selector: "testWhileFalse",
  59420. protocol: 'tests',
  59421. fn: function (){
  59422. var self=this;
  59423. var i;
  59424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59425. return $core.withContext(function($ctx1) {
  59426. //>>excludeEnd("ctx");
  59427. i=(0);
  59428. $recv((function(){
  59429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59430. return $core.withContext(function($ctx2) {
  59431. //>>excludeEnd("ctx");
  59432. return $recv(i).__gt((5));
  59433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59434. $ctx2.sendIdx[">"]=1;
  59435. //>>excludeEnd("ctx");
  59436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59437. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59438. //>>excludeEnd("ctx");
  59439. }))._whileFalse_((function(){
  59440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59441. return $core.withContext(function($ctx2) {
  59442. //>>excludeEnd("ctx");
  59443. i=$recv(i).__plus((1));
  59444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59445. $ctx2.sendIdx["+"]=1;
  59446. //>>excludeEnd("ctx");
  59447. return i;
  59448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59449. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  59450. //>>excludeEnd("ctx");
  59451. }));
  59452. self._assert_equals_(i,(6));
  59453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59454. $ctx1.sendIdx["assert:equals:"]=1;
  59455. //>>excludeEnd("ctx");
  59456. i=(0);
  59457. $recv((function(){
  59458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59459. return $core.withContext(function($ctx2) {
  59460. //>>excludeEnd("ctx");
  59461. i=$recv(i).__plus((1));
  59462. i;
  59463. return $recv(i).__gt((5));
  59464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59465. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  59466. //>>excludeEnd("ctx");
  59467. }))._whileFalse();
  59468. self._assert_equals_(i,(6));
  59469. return self;
  59470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59471. }, function($ctx1) {$ctx1.fill(self,"testWhileFalse",{i:i},$globals.BlockClosureTest)});
  59472. //>>excludeEnd("ctx");
  59473. },
  59474. //>>excludeStart("ide", pragmas.excludeIdeData);
  59475. args: [],
  59476. source: "testWhileFalse\x0a\x09| i |\x0a\x09i := 0.\x0a\x09[ i > 5 ] whileFalse: [ i := i + 1 ].\x0a\x09self assert: i equals: 6.\x0a\x0a\x09i := 0.\x0a\x09[ i := i + 1. i > 5 ] whileFalse.\x0a\x09self assert: i equals: 6",
  59477. referencedClasses: [],
  59478. //>>excludeEnd("ide");
  59479. messageSends: ["whileFalse:", ">", "+", "assert:equals:", "whileFalse"]
  59480. }),
  59481. $globals.BlockClosureTest);
  59482. $core.addMethod(
  59483. $core.method({
  59484. selector: "testWhileTrue",
  59485. protocol: 'tests',
  59486. fn: function (){
  59487. var self=this;
  59488. var i;
  59489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59490. return $core.withContext(function($ctx1) {
  59491. //>>excludeEnd("ctx");
  59492. i=(0);
  59493. $recv((function(){
  59494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59495. return $core.withContext(function($ctx2) {
  59496. //>>excludeEnd("ctx");
  59497. return $recv(i).__lt((5));
  59498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59499. $ctx2.sendIdx["<"]=1;
  59500. //>>excludeEnd("ctx");
  59501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59502. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  59503. //>>excludeEnd("ctx");
  59504. }))._whileTrue_((function(){
  59505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59506. return $core.withContext(function($ctx2) {
  59507. //>>excludeEnd("ctx");
  59508. i=$recv(i).__plus((1));
  59509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59510. $ctx2.sendIdx["+"]=1;
  59511. //>>excludeEnd("ctx");
  59512. return i;
  59513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59514. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  59515. //>>excludeEnd("ctx");
  59516. }));
  59517. self._assert_equals_(i,(5));
  59518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59519. $ctx1.sendIdx["assert:equals:"]=1;
  59520. //>>excludeEnd("ctx");
  59521. i=(0);
  59522. $recv((function(){
  59523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59524. return $core.withContext(function($ctx2) {
  59525. //>>excludeEnd("ctx");
  59526. i=$recv(i).__plus((1));
  59527. i;
  59528. return $recv(i).__lt((5));
  59529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59530. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  59531. //>>excludeEnd("ctx");
  59532. }))._whileTrue();
  59533. self._assert_equals_(i,(5));
  59534. return self;
  59535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59536. }, function($ctx1) {$ctx1.fill(self,"testWhileTrue",{i:i},$globals.BlockClosureTest)});
  59537. //>>excludeEnd("ctx");
  59538. },
  59539. //>>excludeStart("ide", pragmas.excludeIdeData);
  59540. args: [],
  59541. source: "testWhileTrue\x0a\x09| i |\x0a\x09i := 0.\x0a\x09[ i < 5 ] whileTrue: [ i := i + 1 ].\x0a\x09self assert: i equals: 5.\x0a\x0a\x09i := 0.\x0a\x09[ i := i + 1. i < 5 ] whileTrue.\x0a\x09self assert: i equals: 5",
  59542. referencedClasses: [],
  59543. //>>excludeEnd("ide");
  59544. messageSends: ["whileTrue:", "<", "+", "assert:equals:", "whileTrue"]
  59545. }),
  59546. $globals.BlockClosureTest);
  59547. $core.addClass('BooleanTest', $globals.TestCase, [], 'Kernel-Tests');
  59548. $core.addMethod(
  59549. $core.method({
  59550. selector: "testEquality",
  59551. protocol: 'tests',
  59552. fn: function (){
  59553. var self=this;
  59554. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59555. return $core.withContext(function($ctx1) {
  59556. //>>excludeEnd("ctx");
  59557. var $1,$2,$3,$4,$5,$6,$7,$8,$10,$9,$12,$11;
  59558. $1=(0).__eq(false);
  59559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59560. $ctx1.sendIdx["="]=1;
  59561. //>>excludeEnd("ctx");
  59562. self._deny_($1);
  59563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59564. $ctx1.sendIdx["deny:"]=1;
  59565. //>>excludeEnd("ctx");
  59566. $2=false.__eq((0));
  59567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59568. $ctx1.sendIdx["="]=2;
  59569. //>>excludeEnd("ctx");
  59570. self._deny_($2);
  59571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59572. $ctx1.sendIdx["deny:"]=2;
  59573. //>>excludeEnd("ctx");
  59574. $3="".__eq(false);
  59575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59576. $ctx1.sendIdx["="]=3;
  59577. //>>excludeEnd("ctx");
  59578. self._deny_($3);
  59579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59580. $ctx1.sendIdx["deny:"]=3;
  59581. //>>excludeEnd("ctx");
  59582. $4=false.__eq("");
  59583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59584. $ctx1.sendIdx["="]=4;
  59585. //>>excludeEnd("ctx");
  59586. self._deny_($4);
  59587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59588. $ctx1.sendIdx["deny:"]=4;
  59589. //>>excludeEnd("ctx");
  59590. $5=true.__eq(true);
  59591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59592. $ctx1.sendIdx["="]=5;
  59593. //>>excludeEnd("ctx");
  59594. self._assert_($5);
  59595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59596. $ctx1.sendIdx["assert:"]=1;
  59597. //>>excludeEnd("ctx");
  59598. $6=false.__eq(true);
  59599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59600. $ctx1.sendIdx["="]=6;
  59601. //>>excludeEnd("ctx");
  59602. self._deny_($6);
  59603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59604. $ctx1.sendIdx["deny:"]=5;
  59605. //>>excludeEnd("ctx");
  59606. $7=true.__eq(false);
  59607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59608. $ctx1.sendIdx["="]=7;
  59609. //>>excludeEnd("ctx");
  59610. self._deny_($7);
  59611. $8=false.__eq(false);
  59612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59613. $ctx1.sendIdx["="]=8;
  59614. //>>excludeEnd("ctx");
  59615. self._assert_($8);
  59616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59617. $ctx1.sendIdx["assert:"]=2;
  59618. //>>excludeEnd("ctx");
  59619. $10=true._yourself();
  59620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59621. $ctx1.sendIdx["yourself"]=1;
  59622. //>>excludeEnd("ctx");
  59623. $9=$recv($10).__eq(true);
  59624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59625. $ctx1.sendIdx["="]=9;
  59626. //>>excludeEnd("ctx");
  59627. self._assert_($9);
  59628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59629. $ctx1.sendIdx["assert:"]=3;
  59630. //>>excludeEnd("ctx");
  59631. $12=true._yourself();
  59632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59633. $ctx1.sendIdx["yourself"]=2;
  59634. //>>excludeEnd("ctx");
  59635. $11=$recv($12).__eq(true._yourself());
  59636. self._assert_($11);
  59637. return self;
  59638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59639. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.BooleanTest)});
  59640. //>>excludeEnd("ctx");
  59641. },
  59642. //>>excludeStart("ide", pragmas.excludeIdeData);
  59643. args: [],
  59644. source: "testEquality\x0a\x09\x22We're on top of JS...just be sure to check the basics!\x22\x0a\x0a\x09self deny: 0 = false.\x0a\x09self deny: false = 0.\x0a\x09self deny: '' = false.\x0a\x09self deny: false = ''.\x0a\x0a\x09self assert: (true = true).\x0a\x09self deny: false = true.\x0a\x09self deny: true = false.\x0a\x09self assert: (false = false).\x0a\x0a\x09\x22JS may do some type coercing after sending a message\x22\x0a\x09self assert: (true yourself = true).\x0a\x09self assert: (true yourself = true yourself)",
  59645. referencedClasses: [],
  59646. //>>excludeEnd("ide");
  59647. messageSends: ["deny:", "=", "assert:", "yourself"]
  59648. }),
  59649. $globals.BooleanTest);
  59650. $core.addMethod(
  59651. $core.method({
  59652. selector: "testIdentity",
  59653. protocol: 'tests',
  59654. fn: function (){
  59655. var self=this;
  59656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59657. return $core.withContext(function($ctx1) {
  59658. //>>excludeEnd("ctx");
  59659. var $1,$2,$3,$4,$5,$6,$7,$8,$10,$9,$12,$11;
  59660. $1=(0).__eq_eq(false);
  59661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59662. $ctx1.sendIdx["=="]=1;
  59663. //>>excludeEnd("ctx");
  59664. self._deny_($1);
  59665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59666. $ctx1.sendIdx["deny:"]=1;
  59667. //>>excludeEnd("ctx");
  59668. $2=false.__eq_eq((0));
  59669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59670. $ctx1.sendIdx["=="]=2;
  59671. //>>excludeEnd("ctx");
  59672. self._deny_($2);
  59673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59674. $ctx1.sendIdx["deny:"]=2;
  59675. //>>excludeEnd("ctx");
  59676. $3="".__eq_eq(false);
  59677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59678. $ctx1.sendIdx["=="]=3;
  59679. //>>excludeEnd("ctx");
  59680. self._deny_($3);
  59681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59682. $ctx1.sendIdx["deny:"]=3;
  59683. //>>excludeEnd("ctx");
  59684. $4=false.__eq_eq("");
  59685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59686. $ctx1.sendIdx["=="]=4;
  59687. //>>excludeEnd("ctx");
  59688. self._deny_($4);
  59689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59690. $ctx1.sendIdx["deny:"]=4;
  59691. //>>excludeEnd("ctx");
  59692. $5=true.__eq_eq(true);
  59693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59694. $ctx1.sendIdx["=="]=5;
  59695. //>>excludeEnd("ctx");
  59696. self._assert_($5);
  59697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59698. $ctx1.sendIdx["assert:"]=1;
  59699. //>>excludeEnd("ctx");
  59700. $6=false.__eq_eq(true);
  59701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59702. $ctx1.sendIdx["=="]=6;
  59703. //>>excludeEnd("ctx");
  59704. self._deny_($6);
  59705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59706. $ctx1.sendIdx["deny:"]=5;
  59707. //>>excludeEnd("ctx");
  59708. $7=true.__eq_eq(false);
  59709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59710. $ctx1.sendIdx["=="]=7;
  59711. //>>excludeEnd("ctx");
  59712. self._deny_($7);
  59713. $8=false.__eq_eq(false);
  59714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59715. $ctx1.sendIdx["=="]=8;
  59716. //>>excludeEnd("ctx");
  59717. self._assert_($8);
  59718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59719. $ctx1.sendIdx["assert:"]=2;
  59720. //>>excludeEnd("ctx");
  59721. $10=true._yourself();
  59722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59723. $ctx1.sendIdx["yourself"]=1;
  59724. //>>excludeEnd("ctx");
  59725. $9=$recv($10).__eq_eq(true);
  59726. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59727. $ctx1.sendIdx["=="]=9;
  59728. //>>excludeEnd("ctx");
  59729. self._assert_($9);
  59730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59731. $ctx1.sendIdx["assert:"]=3;
  59732. //>>excludeEnd("ctx");
  59733. $12=true._yourself();
  59734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59735. $ctx1.sendIdx["yourself"]=2;
  59736. //>>excludeEnd("ctx");
  59737. $11=$recv($12).__eq_eq(true._yourself());
  59738. self._assert_($11);
  59739. return self;
  59740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59741. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.BooleanTest)});
  59742. //>>excludeEnd("ctx");
  59743. },
  59744. //>>excludeStart("ide", pragmas.excludeIdeData);
  59745. args: [],
  59746. source: "testIdentity\x0a\x09\x22We're on top of JS...just be sure to check the basics!\x22\x0a\x0a\x09self deny: 0 == false.\x0a\x09self deny: false == 0.\x0a\x09self deny: '' == false.\x0a\x09self deny: false == ''.\x0a\x0a\x09self assert: true == true.\x0a\x09self deny: false == true.\x0a\x09self deny: true == false.\x0a\x09self assert: false == false.\x0a\x0a\x09\x22JS may do some type coercing after sending a message\x22\x0a\x09self assert: true yourself == true.\x0a\x09self assert: true yourself == true yourself",
  59747. referencedClasses: [],
  59748. //>>excludeEnd("ide");
  59749. messageSends: ["deny:", "==", "assert:", "yourself"]
  59750. }),
  59751. $globals.BooleanTest);
  59752. $core.addMethod(
  59753. $core.method({
  59754. selector: "testIfTrueIfFalse",
  59755. protocol: 'tests',
  59756. fn: function (){
  59757. var self=this;
  59758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59759. return $core.withContext(function($ctx1) {
  59760. //>>excludeEnd("ctx");
  59761. var $1,$2,$3,$4,$5,$6,$7,$8;
  59762. if($core.assert(true)){
  59763. $1="alternative block";
  59764. };
  59765. self._assert_equals_($1,"alternative block");
  59766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59767. $ctx1.sendIdx["assert:equals:"]=1;
  59768. //>>excludeEnd("ctx");
  59769. if(!$core.assert(true)){
  59770. $2="alternative block";
  59771. };
  59772. self._assert_equals_($2,nil);
  59773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59774. $ctx1.sendIdx["assert:equals:"]=2;
  59775. //>>excludeEnd("ctx");
  59776. if($core.assert(false)){
  59777. $3="alternative block";
  59778. };
  59779. self._assert_equals_($3,nil);
  59780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59781. $ctx1.sendIdx["assert:equals:"]=3;
  59782. //>>excludeEnd("ctx");
  59783. if(!$core.assert(false)){
  59784. $4="alternative block";
  59785. };
  59786. self._assert_equals_($4,"alternative block");
  59787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59788. $ctx1.sendIdx["assert:equals:"]=4;
  59789. //>>excludeEnd("ctx");
  59790. if($core.assert(false)){
  59791. $5="alternative block";
  59792. } else {
  59793. $5="alternative block2";
  59794. };
  59795. self._assert_equals_($5,"alternative block2");
  59796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59797. $ctx1.sendIdx["assert:equals:"]=5;
  59798. //>>excludeEnd("ctx");
  59799. if($core.assert(false)){
  59800. $6="alternative block2";
  59801. } else {
  59802. $6="alternative block";
  59803. };
  59804. self._assert_equals_($6,"alternative block");
  59805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59806. $ctx1.sendIdx["assert:equals:"]=6;
  59807. //>>excludeEnd("ctx");
  59808. if($core.assert(true)){
  59809. $7="alternative block";
  59810. } else {
  59811. $7="alternative block2";
  59812. };
  59813. self._assert_equals_($7,"alternative block");
  59814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59815. $ctx1.sendIdx["assert:equals:"]=7;
  59816. //>>excludeEnd("ctx");
  59817. if($core.assert(true)){
  59818. $8="alternative block2";
  59819. } else {
  59820. $8="alternative block";
  59821. };
  59822. self._assert_equals_($8,"alternative block2");
  59823. return self;
  59824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59825. }, function($ctx1) {$ctx1.fill(self,"testIfTrueIfFalse",{},$globals.BooleanTest)});
  59826. //>>excludeEnd("ctx");
  59827. },
  59828. //>>excludeStart("ide", pragmas.excludeIdeData);
  59829. args: [],
  59830. source: "testIfTrueIfFalse\x0a\x0a\x09self assert: (true ifTrue: [ 'alternative block' ]) equals: 'alternative block'.\x0a\x09self assert: (true ifFalse: [ 'alternative block' ]) equals: nil.\x0a\x0a\x09self assert: (false ifTrue: [ 'alternative block' ]) equals: nil.\x0a\x09self assert: (false ifFalse: [ 'alternative block' ]) equals: 'alternative block'.\x0a\x0a\x09self assert: (false ifTrue: [ 'alternative block' ] ifFalse: [ 'alternative block2' ]) equals: 'alternative block2'.\x0a\x09self assert: (false ifFalse: [ 'alternative block' ] ifTrue: [ 'alternative block2' ]) equals: 'alternative block'.\x0a\x0a\x09self assert: (true ifTrue: [ 'alternative block' ] ifFalse: [ 'alternative block2' ]) equals: 'alternative block'.\x0a\x09self assert: (true ifFalse: [ 'alternative block' ] ifTrue: [ 'alternative block2' ]) equals: 'alternative block2'.",
  59831. referencedClasses: [],
  59832. //>>excludeEnd("ide");
  59833. messageSends: ["assert:equals:", "ifTrue:", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"]
  59834. }),
  59835. $globals.BooleanTest);
  59836. $core.addMethod(
  59837. $core.method({
  59838. selector: "testIfTrueIfFalseWithBoxing",
  59839. protocol: 'tests',
  59840. fn: function (){
  59841. var self=this;
  59842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59843. return $core.withContext(function($ctx1) {
  59844. //>>excludeEnd("ctx");
  59845. var $2,$1,$4,$3,$6,$5,$8,$7,$10,$9,$12,$11,$14,$13,$16,$15;
  59846. $2=true._yourself();
  59847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59848. $ctx1.sendIdx["yourself"]=1;
  59849. //>>excludeEnd("ctx");
  59850. if($core.assert($2)){
  59851. $1="alternative block";
  59852. };
  59853. self._assert_equals_($1,"alternative block");
  59854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59855. $ctx1.sendIdx["assert:equals:"]=1;
  59856. //>>excludeEnd("ctx");
  59857. $4=true._yourself();
  59858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59859. $ctx1.sendIdx["yourself"]=2;
  59860. //>>excludeEnd("ctx");
  59861. if(!$core.assert($4)){
  59862. $3="alternative block";
  59863. };
  59864. self._assert_equals_($3,nil);
  59865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59866. $ctx1.sendIdx["assert:equals:"]=2;
  59867. //>>excludeEnd("ctx");
  59868. $6=false._yourself();
  59869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59870. $ctx1.sendIdx["yourself"]=3;
  59871. //>>excludeEnd("ctx");
  59872. if($core.assert($6)){
  59873. $5="alternative block";
  59874. };
  59875. self._assert_equals_($5,nil);
  59876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59877. $ctx1.sendIdx["assert:equals:"]=3;
  59878. //>>excludeEnd("ctx");
  59879. $8=false._yourself();
  59880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59881. $ctx1.sendIdx["yourself"]=4;
  59882. //>>excludeEnd("ctx");
  59883. if(!$core.assert($8)){
  59884. $7="alternative block";
  59885. };
  59886. self._assert_equals_($7,"alternative block");
  59887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59888. $ctx1.sendIdx["assert:equals:"]=4;
  59889. //>>excludeEnd("ctx");
  59890. $10=false._yourself();
  59891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59892. $ctx1.sendIdx["yourself"]=5;
  59893. //>>excludeEnd("ctx");
  59894. if($core.assert($10)){
  59895. $9="alternative block";
  59896. } else {
  59897. $9="alternative block2";
  59898. };
  59899. self._assert_equals_($9,"alternative block2");
  59900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59901. $ctx1.sendIdx["assert:equals:"]=5;
  59902. //>>excludeEnd("ctx");
  59903. $12=false._yourself();
  59904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59905. $ctx1.sendIdx["yourself"]=6;
  59906. //>>excludeEnd("ctx");
  59907. if($core.assert($12)){
  59908. $11="alternative block2";
  59909. } else {
  59910. $11="alternative block";
  59911. };
  59912. self._assert_equals_($11,"alternative block");
  59913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59914. $ctx1.sendIdx["assert:equals:"]=6;
  59915. //>>excludeEnd("ctx");
  59916. $14=true._yourself();
  59917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59918. $ctx1.sendIdx["yourself"]=7;
  59919. //>>excludeEnd("ctx");
  59920. if($core.assert($14)){
  59921. $13="alternative block";
  59922. } else {
  59923. $13="alternative block2";
  59924. };
  59925. self._assert_equals_($13,"alternative block");
  59926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59927. $ctx1.sendIdx["assert:equals:"]=7;
  59928. //>>excludeEnd("ctx");
  59929. $16=true._yourself();
  59930. if($core.assert($16)){
  59931. $15="alternative block2";
  59932. } else {
  59933. $15="alternative block";
  59934. };
  59935. self._assert_equals_($15,"alternative block2");
  59936. return self;
  59937. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59938. }, function($ctx1) {$ctx1.fill(self,"testIfTrueIfFalseWithBoxing",{},$globals.BooleanTest)});
  59939. //>>excludeEnd("ctx");
  59940. },
  59941. //>>excludeStart("ide", pragmas.excludeIdeData);
  59942. args: [],
  59943. source: "testIfTrueIfFalseWithBoxing\x0a\x0a\x09self assert: (true yourself ifTrue: [ 'alternative block' ]) equals: 'alternative block'.\x0a\x09self assert: (true yourself ifFalse: [ 'alternative block' ]) equals: nil.\x0a\x0a\x09self assert: (false yourself ifTrue: [ 'alternative block' ]) equals: nil.\x0a\x09self assert: (false yourself ifFalse: [ 'alternative block' ]) equals: 'alternative block'.\x0a\x0a\x09self assert: (false yourself ifTrue: [ 'alternative block' ] ifFalse: [ 'alternative block2' ]) equals: 'alternative block2'.\x0a\x09self assert: (false yourself ifFalse: [ 'alternative block' ] ifTrue: [ 'alternative block2' ]) equals: 'alternative block'.\x0a\x0a\x09self assert: (true yourself ifTrue: [ 'alternative block' ] ifFalse: [ 'alternative block2' ]) equals: 'alternative block'.\x0a\x09self assert: (true yourself ifFalse: [ 'alternative block' ] ifTrue: [ 'alternative block2' ]) equals: 'alternative block2'.",
  59944. referencedClasses: [],
  59945. //>>excludeEnd("ide");
  59946. messageSends: ["assert:equals:", "ifTrue:", "yourself", "ifFalse:", "ifTrue:ifFalse:", "ifFalse:ifTrue:"]
  59947. }),
  59948. $globals.BooleanTest);
  59949. $core.addMethod(
  59950. $core.method({
  59951. selector: "testLogic",
  59952. protocol: 'tests',
  59953. fn: function (){
  59954. var self=this;
  59955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59956. return $core.withContext(function($ctx1) {
  59957. //>>excludeEnd("ctx");
  59958. var $1,$2,$3,$5,$4,$6,$7,$8,$10,$9,$12,$11,$14,$13,$17,$18,$16,$15,$20,$19,$22,$21,$25,$24,$23;
  59959. $1=true.__and(true);
  59960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59961. $ctx1.sendIdx["&"]=1;
  59962. //>>excludeEnd("ctx");
  59963. self._assert_($1);
  59964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59965. $ctx1.sendIdx["assert:"]=1;
  59966. //>>excludeEnd("ctx");
  59967. $2=true.__and(false);
  59968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59969. $ctx1.sendIdx["&"]=2;
  59970. //>>excludeEnd("ctx");
  59971. self._deny_($2);
  59972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59973. $ctx1.sendIdx["deny:"]=1;
  59974. //>>excludeEnd("ctx");
  59975. $3=false.__and(true);
  59976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59977. $ctx1.sendIdx["&"]=3;
  59978. //>>excludeEnd("ctx");
  59979. self._deny_($3);
  59980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59981. $ctx1.sendIdx["deny:"]=2;
  59982. //>>excludeEnd("ctx");
  59983. $5=false.__and(false);
  59984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59985. $ctx1.sendIdx["&"]=4;
  59986. //>>excludeEnd("ctx");
  59987. $4=self._deny_($5);
  59988. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59989. $ctx1.sendIdx["deny:"]=3;
  59990. //>>excludeEnd("ctx");
  59991. $6=true.__or(true);
  59992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59993. $ctx1.sendIdx["|"]=1;
  59994. //>>excludeEnd("ctx");
  59995. self._assert_($6);
  59996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  59997. $ctx1.sendIdx["assert:"]=2;
  59998. //>>excludeEnd("ctx");
  59999. $7=true.__or(false);
  60000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60001. $ctx1.sendIdx["|"]=2;
  60002. //>>excludeEnd("ctx");
  60003. self._assert_($7);
  60004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60005. $ctx1.sendIdx["assert:"]=3;
  60006. //>>excludeEnd("ctx");
  60007. $8=false.__or(true);
  60008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60009. $ctx1.sendIdx["|"]=3;
  60010. //>>excludeEnd("ctx");
  60011. self._assert_($8);
  60012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60013. $ctx1.sendIdx["assert:"]=4;
  60014. //>>excludeEnd("ctx");
  60015. $10=false.__or(false);
  60016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60017. $ctx1.sendIdx["|"]=4;
  60018. //>>excludeEnd("ctx");
  60019. $9=self._deny_($10);
  60020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60021. $ctx1.sendIdx["deny:"]=4;
  60022. //>>excludeEnd("ctx");
  60023. $12=(1).__gt((0));
  60024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60025. $ctx1.sendIdx[">"]=1;
  60026. //>>excludeEnd("ctx");
  60027. $11=true.__and($12);
  60028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60029. $ctx1.sendIdx["&"]=5;
  60030. //>>excludeEnd("ctx");
  60031. self._assert_($11);
  60032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60033. $ctx1.sendIdx["assert:"]=5;
  60034. //>>excludeEnd("ctx");
  60035. $14=(1).__gt((0));
  60036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60037. $ctx1.sendIdx[">"]=2;
  60038. //>>excludeEnd("ctx");
  60039. $13=$recv($14).__and(false);
  60040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60041. $ctx1.sendIdx["&"]=6;
  60042. //>>excludeEnd("ctx");
  60043. self._deny_($13);
  60044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60045. $ctx1.sendIdx["deny:"]=5;
  60046. //>>excludeEnd("ctx");
  60047. $17=(1).__gt((0));
  60048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60049. $ctx1.sendIdx[">"]=3;
  60050. //>>excludeEnd("ctx");
  60051. $18=(1).__gt((2));
  60052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60053. $ctx1.sendIdx[">"]=4;
  60054. //>>excludeEnd("ctx");
  60055. $16=$recv($17).__and($18);
  60056. $15=self._deny_($16);
  60057. $20=(1).__gt((0));
  60058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60059. $ctx1.sendIdx[">"]=5;
  60060. //>>excludeEnd("ctx");
  60061. $19=false.__or($20);
  60062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60063. $ctx1.sendIdx["|"]=5;
  60064. //>>excludeEnd("ctx");
  60065. self._assert_($19);
  60066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60067. $ctx1.sendIdx["assert:"]=6;
  60068. //>>excludeEnd("ctx");
  60069. $22=(1).__gt((0));
  60070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60071. $ctx1.sendIdx[">"]=6;
  60072. //>>excludeEnd("ctx");
  60073. $21=$recv($22).__or(false);
  60074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60075. $ctx1.sendIdx["|"]=6;
  60076. //>>excludeEnd("ctx");
  60077. self._assert_($21);
  60078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60079. $ctx1.sendIdx["assert:"]=7;
  60080. //>>excludeEnd("ctx");
  60081. $25=(1).__gt((0));
  60082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60083. $ctx1.sendIdx[">"]=7;
  60084. //>>excludeEnd("ctx");
  60085. $24=$recv($25).__or((1).__gt((2)));
  60086. $23=self._assert_($24);
  60087. return self;
  60088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60089. }, function($ctx1) {$ctx1.fill(self,"testLogic",{},$globals.BooleanTest)});
  60090. //>>excludeEnd("ctx");
  60091. },
  60092. //>>excludeStart("ide", pragmas.excludeIdeData);
  60093. args: [],
  60094. source: "testLogic\x0a\x09\x22Trivial logic table\x22\x0a\x09self assert: (true & true);\x0a\x09\x09deny: (true & false);\x0a\x09\x09deny: (false & true);\x0a\x09\x09deny: (false & false).\x0a\x09self assert: (true | true);\x0a\x09\x09assert: (true | false);\x0a\x09\x09assert: (false | true);\x0a\x09\x09deny: (false | false).\x0a\x09\x22Checking that expressions work fine too\x22\x0a\x09self assert: (true & (1 > 0));\x0a\x09\x09deny: ((1 > 0) & false);\x0a\x09\x09deny: ((1 > 0) & (1 > 2)).\x0a\x09self assert: (false | (1 > 0));\x0a\x09\x09assert: ((1 > 0) | false);\x0a\x09\x09assert: ((1 > 0) | (1 > 2))",
  60095. referencedClasses: [],
  60096. //>>excludeEnd("ide");
  60097. messageSends: ["assert:", "&", "deny:", "|", ">"]
  60098. }),
  60099. $globals.BooleanTest);
  60100. $core.addMethod(
  60101. $core.method({
  60102. selector: "testLogicKeywords",
  60103. protocol: 'tests',
  60104. fn: function (){
  60105. var self=this;
  60106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60107. return $core.withContext(function($ctx1) {
  60108. //>>excludeEnd("ctx");
  60109. var $1,$2,$3,$5,$4,$6,$7,$8,$10,$9,$11,$13,$12,$16,$15,$14,$17,$19,$18,$22,$21,$20;
  60110. $1=true._and_((function(){
  60111. return true;
  60112. }));
  60113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60114. $ctx1.sendIdx["and:"]=1;
  60115. //>>excludeEnd("ctx");
  60116. self._assert_($1);
  60117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60118. $ctx1.sendIdx["assert:"]=1;
  60119. //>>excludeEnd("ctx");
  60120. $2=true._and_((function(){
  60121. return false;
  60122. }));
  60123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60124. $ctx1.sendIdx["and:"]=2;
  60125. //>>excludeEnd("ctx");
  60126. self._deny_($2);
  60127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60128. $ctx1.sendIdx["deny:"]=1;
  60129. //>>excludeEnd("ctx");
  60130. $3=false._and_((function(){
  60131. return true;
  60132. }));
  60133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60134. $ctx1.sendIdx["and:"]=3;
  60135. //>>excludeEnd("ctx");
  60136. self._deny_($3);
  60137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60138. $ctx1.sendIdx["deny:"]=2;
  60139. //>>excludeEnd("ctx");
  60140. $5=false._and_((function(){
  60141. return false;
  60142. }));
  60143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60144. $ctx1.sendIdx["and:"]=4;
  60145. //>>excludeEnd("ctx");
  60146. $4=self._deny_($5);
  60147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60148. $ctx1.sendIdx["deny:"]=3;
  60149. //>>excludeEnd("ctx");
  60150. $6=true._or_((function(){
  60151. return true;
  60152. }));
  60153. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60154. $ctx1.sendIdx["or:"]=1;
  60155. //>>excludeEnd("ctx");
  60156. self._assert_($6);
  60157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60158. $ctx1.sendIdx["assert:"]=2;
  60159. //>>excludeEnd("ctx");
  60160. $7=true._or_((function(){
  60161. return false;
  60162. }));
  60163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60164. $ctx1.sendIdx["or:"]=2;
  60165. //>>excludeEnd("ctx");
  60166. self._assert_($7);
  60167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60168. $ctx1.sendIdx["assert:"]=3;
  60169. //>>excludeEnd("ctx");
  60170. $8=false._or_((function(){
  60171. return true;
  60172. }));
  60173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60174. $ctx1.sendIdx["or:"]=3;
  60175. //>>excludeEnd("ctx");
  60176. self._assert_($8);
  60177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60178. $ctx1.sendIdx["assert:"]=4;
  60179. //>>excludeEnd("ctx");
  60180. $10=false._or_((function(){
  60181. return false;
  60182. }));
  60183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60184. $ctx1.sendIdx["or:"]=4;
  60185. //>>excludeEnd("ctx");
  60186. $9=self._deny_($10);
  60187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60188. $ctx1.sendIdx["deny:"]=4;
  60189. //>>excludeEnd("ctx");
  60190. $11=true._and_((function(){
  60191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60192. return $core.withContext(function($ctx2) {
  60193. //>>excludeEnd("ctx");
  60194. return (1).__gt((0));
  60195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60196. $ctx2.sendIdx[">"]=1;
  60197. //>>excludeEnd("ctx");
  60198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60199. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,9)});
  60200. //>>excludeEnd("ctx");
  60201. }));
  60202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60203. $ctx1.sendIdx["and:"]=5;
  60204. //>>excludeEnd("ctx");
  60205. self._assert_($11);
  60206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60207. $ctx1.sendIdx["assert:"]=5;
  60208. //>>excludeEnd("ctx");
  60209. $13=(1).__gt((0));
  60210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60211. $ctx1.sendIdx[">"]=2;
  60212. //>>excludeEnd("ctx");
  60213. $12=$recv($13)._and_((function(){
  60214. return false;
  60215. }));
  60216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60217. $ctx1.sendIdx["and:"]=6;
  60218. //>>excludeEnd("ctx");
  60219. self._deny_($12);
  60220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60221. $ctx1.sendIdx["deny:"]=5;
  60222. //>>excludeEnd("ctx");
  60223. $16=(1).__gt((0));
  60224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60225. $ctx1.sendIdx[">"]=3;
  60226. //>>excludeEnd("ctx");
  60227. $15=$recv($16)._and_((function(){
  60228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60229. return $core.withContext(function($ctx2) {
  60230. //>>excludeEnd("ctx");
  60231. return (1).__gt((2));
  60232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60233. $ctx2.sendIdx[">"]=4;
  60234. //>>excludeEnd("ctx");
  60235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60236. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,11)});
  60237. //>>excludeEnd("ctx");
  60238. }));
  60239. $14=self._deny_($15);
  60240. $17=false._or_((function(){
  60241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60242. return $core.withContext(function($ctx2) {
  60243. //>>excludeEnd("ctx");
  60244. return (1).__gt((0));
  60245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60246. $ctx2.sendIdx[">"]=5;
  60247. //>>excludeEnd("ctx");
  60248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60249. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,12)});
  60250. //>>excludeEnd("ctx");
  60251. }));
  60252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60253. $ctx1.sendIdx["or:"]=5;
  60254. //>>excludeEnd("ctx");
  60255. self._assert_($17);
  60256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60257. $ctx1.sendIdx["assert:"]=6;
  60258. //>>excludeEnd("ctx");
  60259. $19=(1).__gt((0));
  60260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60261. $ctx1.sendIdx[">"]=6;
  60262. //>>excludeEnd("ctx");
  60263. $18=$recv($19)._or_((function(){
  60264. return false;
  60265. }));
  60266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60267. $ctx1.sendIdx["or:"]=6;
  60268. //>>excludeEnd("ctx");
  60269. self._assert_($18);
  60270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60271. $ctx1.sendIdx["assert:"]=7;
  60272. //>>excludeEnd("ctx");
  60273. $22=(1).__gt((0));
  60274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60275. $ctx1.sendIdx[">"]=7;
  60276. //>>excludeEnd("ctx");
  60277. $21=$recv($22)._or_((function(){
  60278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60279. return $core.withContext(function($ctx2) {
  60280. //>>excludeEnd("ctx");
  60281. return (1).__gt((2));
  60282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60283. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,14)});
  60284. //>>excludeEnd("ctx");
  60285. }));
  60286. $20=self._assert_($21);
  60287. return self;
  60288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60289. }, function($ctx1) {$ctx1.fill(self,"testLogicKeywords",{},$globals.BooleanTest)});
  60290. //>>excludeEnd("ctx");
  60291. },
  60292. //>>excludeStart("ide", pragmas.excludeIdeData);
  60293. args: [],
  60294. source: "testLogicKeywords\x0a\x09\x22Trivial logic table\x22\x0a\x09self\x0a\x09\x09assert: (true and: [ true ]);\x0a\x09\x09deny: (true and: [ false ]);\x0a\x09\x09deny: (false and: [ true ]);\x0a\x09\x09deny: (false and: [ false ]).\x0a\x09self\x0a\x09\x09assert: (true or: [ true ]);\x0a\x09\x09assert: (true or: [ false ]);\x0a\x09\x09assert: (false or: [ true ]);\x0a\x09\x09deny: (false or: [ false ]).\x0a\x09\x09\x0a\x09\x22Checking that expressions work fine too\x22\x0a\x09self\x0a\x09\x09assert: (true and: [ 1 > 0 ]);\x0a\x09\x09deny: ((1 > 0) and: [ false ]);\x0a\x09\x09deny: ((1 > 0) and: [ 1 > 2 ]).\x0a\x09self\x0a\x09\x09assert: (false or: [ 1 > 0 ]);\x0a\x09\x09assert: ((1 > 0) or: [ false ]);\x0a\x09\x09assert: ((1 > 0) or: [ 1 > 2 ])",
  60295. referencedClasses: [],
  60296. //>>excludeEnd("ide");
  60297. messageSends: ["assert:", "and:", "deny:", "or:", ">"]
  60298. }),
  60299. $globals.BooleanTest);
  60300. $core.addMethod(
  60301. $core.method({
  60302. selector: "testNonBooleanError",
  60303. protocol: 'tests',
  60304. fn: function (){
  60305. var self=this;
  60306. function $NonBooleanReceiver(){return $globals.NonBooleanReceiver||(typeof NonBooleanReceiver=="undefined"?nil:NonBooleanReceiver)}
  60307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60308. return $core.withContext(function($ctx1) {
  60309. //>>excludeEnd("ctx");
  60310. self._should_raise_((function(){
  60311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60312. return $core.withContext(function($ctx2) {
  60313. //>>excludeEnd("ctx");
  60314. if($core.assert("")){
  60315. } else {
  60316. };
  60317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60318. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  60319. //>>excludeEnd("ctx");
  60320. }),$NonBooleanReceiver());
  60321. return self;
  60322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60323. }, function($ctx1) {$ctx1.fill(self,"testNonBooleanError",{},$globals.BooleanTest)});
  60324. //>>excludeEnd("ctx");
  60325. },
  60326. //>>excludeStart("ide", pragmas.excludeIdeData);
  60327. args: [],
  60328. source: "testNonBooleanError\x0a\x09self should: [ '' ifTrue: [] ifFalse: [] ] raise: NonBooleanReceiver",
  60329. referencedClasses: ["NonBooleanReceiver"],
  60330. //>>excludeEnd("ide");
  60331. messageSends: ["should:raise:", "ifTrue:ifFalse:"]
  60332. }),
  60333. $globals.BooleanTest);
  60334. $core.addClass('ClassBuilderTest', $globals.TestCase, ['builder', 'theClass'], 'Kernel-Tests');
  60335. $core.addMethod(
  60336. $core.method({
  60337. selector: "setUp",
  60338. protocol: 'running',
  60339. fn: function (){
  60340. var self=this;
  60341. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  60342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60343. return $core.withContext(function($ctx1) {
  60344. //>>excludeEnd("ctx");
  60345. self["@builder"]=$recv($ClassBuilder())._new();
  60346. return self;
  60347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60348. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.ClassBuilderTest)});
  60349. //>>excludeEnd("ctx");
  60350. },
  60351. //>>excludeStart("ide", pragmas.excludeIdeData);
  60352. args: [],
  60353. source: "setUp\x0a\x09builder := ClassBuilder new",
  60354. referencedClasses: ["ClassBuilder"],
  60355. //>>excludeEnd("ide");
  60356. messageSends: ["new"]
  60357. }),
  60358. $globals.ClassBuilderTest);
  60359. $core.addMethod(
  60360. $core.method({
  60361. selector: "tearDown",
  60362. protocol: 'running',
  60363. fn: function (){
  60364. var self=this;
  60365. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  60366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60367. return $core.withContext(function($ctx1) {
  60368. //>>excludeEnd("ctx");
  60369. var $1,$receiver;
  60370. $1=self["@theClass"];
  60371. if(($receiver = $1) == null || $receiver.isNil){
  60372. $1;
  60373. } else {
  60374. $recv($Smalltalk())._removeClass_(self["@theClass"]);
  60375. self["@theClass"]=nil;
  60376. self["@theClass"];
  60377. };
  60378. return self;
  60379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60380. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.ClassBuilderTest)});
  60381. //>>excludeEnd("ctx");
  60382. },
  60383. //>>excludeStart("ide", pragmas.excludeIdeData);
  60384. args: [],
  60385. source: "tearDown\x0a\x09theClass ifNotNil: [ Smalltalk removeClass: theClass. theClass := nil ]",
  60386. referencedClasses: ["Smalltalk"],
  60387. //>>excludeEnd("ide");
  60388. messageSends: ["ifNotNil:", "removeClass:"]
  60389. }),
  60390. $globals.ClassBuilderTest);
  60391. $core.addMethod(
  60392. $core.method({
  60393. selector: "testClassCopy",
  60394. protocol: 'tests',
  60395. fn: function (){
  60396. var self=this;
  60397. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  60398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60399. return $core.withContext(function($ctx1) {
  60400. //>>excludeEnd("ctx");
  60401. var $2,$1,$4,$3,$6,$5,$8,$7;
  60402. self["@theClass"]=$recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  60403. $2=$recv(self["@theClass"])._superclass();
  60404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60405. $ctx1.sendIdx["superclass"]=1;
  60406. //>>excludeEnd("ctx");
  60407. $1=$recv($2).__eq_eq($recv($ObjectMock())._superclass());
  60408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60409. $ctx1.sendIdx["=="]=1;
  60410. //>>excludeEnd("ctx");
  60411. self._assert_($1);
  60412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60413. $ctx1.sendIdx["assert:"]=1;
  60414. //>>excludeEnd("ctx");
  60415. $4=$recv(self["@theClass"])._instanceVariableNames();
  60416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60417. $ctx1.sendIdx["instanceVariableNames"]=1;
  60418. //>>excludeEnd("ctx");
  60419. $3=$recv($4).__eq_eq($recv($ObjectMock())._instanceVariableNames());
  60420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60421. $ctx1.sendIdx["=="]=2;
  60422. //>>excludeEnd("ctx");
  60423. self._assert_($3);
  60424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60425. $ctx1.sendIdx["assert:"]=2;
  60426. //>>excludeEnd("ctx");
  60427. self._assert_equals_($recv(self["@theClass"])._name(),"ObjectMock2");
  60428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60429. $ctx1.sendIdx["assert:equals:"]=1;
  60430. //>>excludeEnd("ctx");
  60431. $6=$recv(self["@theClass"])._package();
  60432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60433. $ctx1.sendIdx["package"]=1;
  60434. //>>excludeEnd("ctx");
  60435. $5=$recv($6).__eq_eq($recv($ObjectMock())._package());
  60436. self._assert_($5);
  60437. $8=$recv(self["@theClass"])._methodDictionary();
  60438. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60439. $ctx1.sendIdx["methodDictionary"]=1;
  60440. //>>excludeEnd("ctx");
  60441. $7=$recv($8)._keys();
  60442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60443. $ctx1.sendIdx["keys"]=1;
  60444. //>>excludeEnd("ctx");
  60445. self._assert_equals_($7,$recv($recv($ObjectMock())._methodDictionary())._keys());
  60446. return self;
  60447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60448. }, function($ctx1) {$ctx1.fill(self,"testClassCopy",{},$globals.ClassBuilderTest)});
  60449. //>>excludeEnd("ctx");
  60450. },
  60451. //>>excludeStart("ide", pragmas.excludeIdeData);
  60452. args: [],
  60453. source: "testClassCopy\x0a\x09theClass := builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09self assert: theClass superclass == ObjectMock superclass.\x0a\x09self assert: theClass instanceVariableNames == ObjectMock instanceVariableNames.\x0a\x09self assert: theClass name equals: 'ObjectMock2'.\x0a\x09self assert: theClass package == ObjectMock package.\x0a\x09self assert: theClass methodDictionary keys equals: ObjectMock methodDictionary keys",
  60454. referencedClasses: ["ObjectMock"],
  60455. //>>excludeEnd("ide");
  60456. messageSends: ["copyClass:named:", "assert:", "==", "superclass", "instanceVariableNames", "assert:equals:", "name", "package", "keys", "methodDictionary"]
  60457. }),
  60458. $globals.ClassBuilderTest);
  60459. $core.addMethod(
  60460. $core.method({
  60461. selector: "testClassMigration",
  60462. protocol: 'tests',
  60463. fn: function (){
  60464. var self=this;
  60465. var instance,oldClass;
  60466. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  60467. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  60468. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  60469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60470. return $core.withContext(function($ctx1) {
  60471. //>>excludeEnd("ctx");
  60472. var $2,$1,$4,$3,$5,$6,$7,$8,$9,$11,$10;
  60473. oldClass=$recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  60474. $2=$recv($Smalltalk())._globals();
  60475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60476. $ctx1.sendIdx["globals"]=1;
  60477. //>>excludeEnd("ctx");
  60478. $1=$recv($2)._at_("ObjectMock2");
  60479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60480. $ctx1.sendIdx["at:"]=1;
  60481. //>>excludeEnd("ctx");
  60482. instance=$recv($1)._new();
  60483. $4=$recv($Smalltalk())._globals();
  60484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60485. $ctx1.sendIdx["globals"]=2;
  60486. //>>excludeEnd("ctx");
  60487. $3=$recv($4)._at_("ObjectMock2");
  60488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60489. $ctx1.sendIdx["at:"]=2;
  60490. //>>excludeEnd("ctx");
  60491. $recv($ObjectMock())._subclass_instanceVariableNames_package_($3,"","Kernel-Tests");
  60492. $5=$recv(oldClass).__eq_eq($ObjectMock2());
  60493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60494. $ctx1.sendIdx["=="]=1;
  60495. //>>excludeEnd("ctx");
  60496. self._deny_($5);
  60497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60498. $ctx1.sendIdx["deny:"]=1;
  60499. //>>excludeEnd("ctx");
  60500. $6=$recv($recv($ObjectMock2())._superclass()).__eq_eq($ObjectMock());
  60501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60502. $ctx1.sendIdx["=="]=2;
  60503. //>>excludeEnd("ctx");
  60504. self._assert_($6);
  60505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60506. $ctx1.sendIdx["assert:"]=1;
  60507. //>>excludeEnd("ctx");
  60508. self._assert_($recv($recv($ObjectMock2())._instanceVariableNames())._isEmpty());
  60509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60510. $ctx1.sendIdx["assert:"]=2;
  60511. //>>excludeEnd("ctx");
  60512. $7=$recv($ObjectMock2())._selectors();
  60513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60514. $ctx1.sendIdx["selectors"]=1;
  60515. //>>excludeEnd("ctx");
  60516. self._assert_equals_($7,$recv(oldClass)._selectors());
  60517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60518. $ctx1.sendIdx["assert:equals:"]=1;
  60519. //>>excludeEnd("ctx");
  60520. $8=$recv($ObjectMock2())._comment();
  60521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60522. $ctx1.sendIdx["comment"]=1;
  60523. //>>excludeEnd("ctx");
  60524. self._assert_equals_($8,$recv(oldClass)._comment());
  60525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60526. $ctx1.sendIdx["assert:equals:"]=2;
  60527. //>>excludeEnd("ctx");
  60528. $9=$recv($recv($ObjectMock2())._package())._name();
  60529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60530. $ctx1.sendIdx["name"]=1;
  60531. //>>excludeEnd("ctx");
  60532. self._assert_equals_($9,"Kernel-Tests");
  60533. $11=$recv(instance)._class();
  60534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60535. $ctx1.sendIdx["class"]=1;
  60536. //>>excludeEnd("ctx");
  60537. $10=$recv($11).__eq_eq($ObjectMock2());
  60538. self._deny_($10);
  60539. self._assert_($recv($recv($recv($Smalltalk())._globals())._at_($recv($recv(instance)._class())._name()))._isNil());
  60540. $recv($Smalltalk())._removeClass_($ObjectMock2());
  60541. return self;
  60542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60543. }, function($ctx1) {$ctx1.fill(self,"testClassMigration",{instance:instance,oldClass:oldClass},$globals.ClassBuilderTest)});
  60544. //>>excludeEnd("ctx");
  60545. },
  60546. //>>excludeStart("ide", pragmas.excludeIdeData);
  60547. args: [],
  60548. source: "testClassMigration\x0a\x09| instance oldClass |\x0a\x09\x0a\x09oldClass := builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09instance := (Smalltalk globals at: 'ObjectMock2') new.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self deny: oldClass == ObjectMock2.\x0a\x09\x0a\x09self assert: ObjectMock2 superclass == ObjectMock.\x0a\x09self assert: ObjectMock2 instanceVariableNames isEmpty.\x0a\x09self assert: ObjectMock2 selectors equals: oldClass selectors.\x0a\x09self assert: ObjectMock2 comment equals: oldClass comment.\x0a\x09self assert: ObjectMock2 package name equals: 'Kernel-Tests'.\x0a\x09\x0a\x09self deny: instance class == ObjectMock2.\x0a\x09\x22Commeting this out. Tests implementation detail.\x22\x0a\x09\x22self assert: instance class name equals: 'OldObjectMock2'.\x22\x0a\x09\x0a\x09self assert: (Smalltalk globals at: instance class name) isNil.\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
  60549. referencedClasses: ["ObjectMock", "Smalltalk", "ObjectMock2"],
  60550. //>>excludeEnd("ide");
  60551. messageSends: ["copyClass:named:", "new", "at:", "globals", "subclass:instanceVariableNames:package:", "deny:", "==", "assert:", "superclass", "isEmpty", "instanceVariableNames", "assert:equals:", "selectors", "comment", "name", "package", "class", "isNil", "removeClass:"]
  60552. }),
  60553. $globals.ClassBuilderTest);
  60554. $core.addMethod(
  60555. $core.method({
  60556. selector: "testClassMigrationWithClassInstanceVariables",
  60557. protocol: 'tests',
  60558. fn: function (){
  60559. var self=this;
  60560. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  60561. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  60562. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  60563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60564. return $core.withContext(function($ctx1) {
  60565. //>>excludeEnd("ctx");
  60566. var $1;
  60567. $recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  60568. $1=$recv($ObjectMock2())._class();
  60569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60570. $ctx1.sendIdx["class"]=1;
  60571. //>>excludeEnd("ctx");
  60572. $recv($1)._instanceVariableNames_("foo bar");
  60573. $recv($ObjectMock())._subclass_instanceVariableNames_package_($recv($recv($Smalltalk())._globals())._at_("ObjectMock2"),"","Kernel-Tests");
  60574. self._assert_equals_($recv($recv($ObjectMock2())._class())._instanceVariableNames(),["foo", "bar"]);
  60575. $recv($Smalltalk())._removeClass_($ObjectMock2());
  60576. return self;
  60577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60578. }, function($ctx1) {$ctx1.fill(self,"testClassMigrationWithClassInstanceVariables",{},$globals.ClassBuilderTest)});
  60579. //>>excludeEnd("ctx");
  60580. },
  60581. //>>excludeStart("ide", pragmas.excludeIdeData);
  60582. args: [],
  60583. source: "testClassMigrationWithClassInstanceVariables\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 class instanceVariableNames: 'foo bar'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: ObjectMock2 class instanceVariableNames equals: #('foo' 'bar').\x0a\x09\x0a\x09Smalltalk removeClass: ObjectMock2",
  60584. referencedClasses: ["ObjectMock", "ObjectMock2", "Smalltalk"],
  60585. //>>excludeEnd("ide");
  60586. messageSends: ["copyClass:named:", "instanceVariableNames:", "class", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:equals:", "instanceVariableNames", "removeClass:"]
  60587. }),
  60588. $globals.ClassBuilderTest);
  60589. $core.addMethod(
  60590. $core.method({
  60591. selector: "testClassMigrationWithSubclasses",
  60592. protocol: 'tests',
  60593. fn: function (){
  60594. var self=this;
  60595. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  60596. function $ObjectMock2(){return $globals.ObjectMock2||(typeof ObjectMock2=="undefined"?nil:ObjectMock2)}
  60597. function $ObjectMock3(){return $globals.ObjectMock3||(typeof ObjectMock3=="undefined"?nil:ObjectMock3)}
  60598. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  60599. function $ObjectMock4(){return $globals.ObjectMock4||(typeof ObjectMock4=="undefined"?nil:ObjectMock4)}
  60600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60601. return $core.withContext(function($ctx1) {
  60602. //>>excludeEnd("ctx");
  60603. var $2,$1,$4,$3;
  60604. $recv(self["@builder"])._copyClass_named_($ObjectMock(),"ObjectMock2");
  60605. $recv($ObjectMock2())._subclass_instanceVariableNames_package_("ObjectMock3","","Kernel-Tests");
  60606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60607. $ctx1.sendIdx["subclass:instanceVariableNames:package:"]=1;
  60608. //>>excludeEnd("ctx");
  60609. $recv($ObjectMock3())._subclass_instanceVariableNames_package_("ObjectMock4","","Kernel-Tests");
  60610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60611. $ctx1.sendIdx["subclass:instanceVariableNames:package:"]=2;
  60612. //>>excludeEnd("ctx");
  60613. $recv($ObjectMock())._subclass_instanceVariableNames_package_($recv($recv($Smalltalk())._globals())._at_("ObjectMock2"),"","Kernel-Tests");
  60614. $2=$recv($ObjectMock())._subclasses();
  60615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60616. $ctx1.sendIdx["subclasses"]=1;
  60617. //>>excludeEnd("ctx");
  60618. $1=$recv($2)._includes_($ObjectMock2());
  60619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60620. $ctx1.sendIdx["includes:"]=1;
  60621. //>>excludeEnd("ctx");
  60622. self._assert_($1);
  60623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60624. $ctx1.sendIdx["assert:"]=1;
  60625. //>>excludeEnd("ctx");
  60626. $4=$recv($ObjectMock2())._subclasses();
  60627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60628. $ctx1.sendIdx["subclasses"]=2;
  60629. //>>excludeEnd("ctx");
  60630. $3=$recv($4)._includes_($ObjectMock3());
  60631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60632. $ctx1.sendIdx["includes:"]=2;
  60633. //>>excludeEnd("ctx");
  60634. self._assert_($3);
  60635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60636. $ctx1.sendIdx["assert:"]=2;
  60637. //>>excludeEnd("ctx");
  60638. self._assert_($recv($recv($ObjectMock3())._subclasses())._includes_($ObjectMock4()));
  60639. $recv($recv($ObjectMock())._allSubclasses())._do_((function(each){
  60640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60641. return $core.withContext(function($ctx2) {
  60642. //>>excludeEnd("ctx");
  60643. return $recv($Smalltalk())._removeClass_(each);
  60644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60645. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  60646. //>>excludeEnd("ctx");
  60647. }));
  60648. return self;
  60649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60650. }, function($ctx1) {$ctx1.fill(self,"testClassMigrationWithSubclasses",{},$globals.ClassBuilderTest)});
  60651. //>>excludeEnd("ctx");
  60652. },
  60653. //>>excludeStart("ide", pragmas.excludeIdeData);
  60654. args: [],
  60655. source: "testClassMigrationWithSubclasses\x0a\x09\x0a\x09builder copyClass: ObjectMock named: 'ObjectMock2'.\x0a\x09ObjectMock2 subclass: 'ObjectMock3' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09ObjectMock3 subclass: 'ObjectMock4' instanceVariableNames: '' package: 'Kernel-Tests'.\x0a\x09\x0a\x09\x22Change the superclass of ObjectMock2\x22\x0a\x09ObjectMock subclass: (Smalltalk globals at: 'ObjectMock2')\x0a\x09\x09instanceVariableNames: ''\x0a\x09\x09package: 'Kernel-Tests'.\x0a\x09\x0a\x09self assert: (ObjectMock subclasses includes: ObjectMock2).\x0a\x09self assert: (ObjectMock2 subclasses includes: ObjectMock3).\x0a\x09self assert: (ObjectMock3 subclasses includes: ObjectMock4).\x0a\x09\x0a\x09ObjectMock allSubclasses do: [ :each | Smalltalk removeClass: each ]",
  60656. referencedClasses: ["ObjectMock", "ObjectMock2", "ObjectMock3", "Smalltalk", "ObjectMock4"],
  60657. //>>excludeEnd("ide");
  60658. messageSends: ["copyClass:named:", "subclass:instanceVariableNames:package:", "at:", "globals", "assert:", "includes:", "subclasses", "do:", "allSubclasses", "removeClass:"]
  60659. }),
  60660. $globals.ClassBuilderTest);
  60661. $core.addMethod(
  60662. $core.method({
  60663. selector: "testInstanceVariableNames",
  60664. protocol: 'tests',
  60665. fn: function (){
  60666. var self=this;
  60667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60668. return $core.withContext(function($ctx1) {
  60669. //>>excludeEnd("ctx");
  60670. self._assert_equals_($recv(self["@builder"])._instanceVariableNamesFor_(" hello world "),["hello", "world"]);
  60671. return self;
  60672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60673. }, function($ctx1) {$ctx1.fill(self,"testInstanceVariableNames",{},$globals.ClassBuilderTest)});
  60674. //>>excludeEnd("ctx");
  60675. },
  60676. //>>excludeStart("ide", pragmas.excludeIdeData);
  60677. args: [],
  60678. source: "testInstanceVariableNames\x0a\x09self assert: (builder instanceVariableNamesFor: ' hello world ') equals: #('hello' 'world')",
  60679. referencedClasses: [],
  60680. //>>excludeEnd("ide");
  60681. messageSends: ["assert:equals:", "instanceVariableNamesFor:"]
  60682. }),
  60683. $globals.ClassBuilderTest);
  60684. $core.addClass('CollectionTest', $globals.TestCase, [], 'Kernel-Tests');
  60685. $core.addMethod(
  60686. $core.method({
  60687. selector: "assertSameContents:as:",
  60688. protocol: 'convenience',
  60689. fn: function (aCollection,anotherCollection){
  60690. var self=this;
  60691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60692. return $core.withContext(function($ctx1) {
  60693. //>>excludeEnd("ctx");
  60694. var $2,$1,$4,$3;
  60695. $2=$recv(aCollection)._size();
  60696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60697. $ctx1.sendIdx["size"]=1;
  60698. //>>excludeEnd("ctx");
  60699. $1=$recv($2).__eq($recv(anotherCollection)._size());
  60700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60701. $ctx1.sendIdx["="]=1;
  60702. //>>excludeEnd("ctx");
  60703. self._assert_($1);
  60704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60705. $ctx1.sendIdx["assert:"]=1;
  60706. //>>excludeEnd("ctx");
  60707. $recv(aCollection)._do_((function(each){
  60708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60709. return $core.withContext(function($ctx2) {
  60710. //>>excludeEnd("ctx");
  60711. $4=$recv(aCollection)._occurrencesOf_(each);
  60712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60713. $ctx2.sendIdx["occurrencesOf:"]=1;
  60714. //>>excludeEnd("ctx");
  60715. $3=$recv($4).__eq($recv(anotherCollection)._occurrencesOf_(each));
  60716. return self._assert_($3);
  60717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60718. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  60719. //>>excludeEnd("ctx");
  60720. }));
  60721. return self;
  60722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60723. }, function($ctx1) {$ctx1.fill(self,"assertSameContents:as:",{aCollection:aCollection,anotherCollection:anotherCollection},$globals.CollectionTest)});
  60724. //>>excludeEnd("ctx");
  60725. },
  60726. //>>excludeStart("ide", pragmas.excludeIdeData);
  60727. args: ["aCollection", "anotherCollection"],
  60728. source: "assertSameContents: aCollection as: anotherCollection\x0a\x09self assert: (aCollection size = anotherCollection size).\x0a\x09aCollection do: [ :each |\x0a\x09\x09self assert: ((aCollection occurrencesOf: each) = (anotherCollection occurrencesOf: each)) ]",
  60729. referencedClasses: [],
  60730. //>>excludeEnd("ide");
  60731. messageSends: ["assert:", "=", "size", "do:", "occurrencesOf:"]
  60732. }),
  60733. $globals.CollectionTest);
  60734. $core.addMethod(
  60735. $core.method({
  60736. selector: "collection",
  60737. protocol: 'fixture',
  60738. fn: function (){
  60739. var self=this;
  60740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60741. return $core.withContext(function($ctx1) {
  60742. //>>excludeEnd("ctx");
  60743. self._subclassResponsibility();
  60744. return self;
  60745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60746. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.CollectionTest)});
  60747. //>>excludeEnd("ctx");
  60748. },
  60749. //>>excludeStart("ide", pragmas.excludeIdeData);
  60750. args: [],
  60751. source: "collection\x0a\x09\x22Answers pre-filled collection of type tested.\x22\x0a\x0a\x09self subclassResponsibility",
  60752. referencedClasses: [],
  60753. //>>excludeEnd("ide");
  60754. messageSends: ["subclassResponsibility"]
  60755. }),
  60756. $globals.CollectionTest);
  60757. $core.addMethod(
  60758. $core.method({
  60759. selector: "collectionClass",
  60760. protocol: 'fixture',
  60761. fn: function (){
  60762. var self=this;
  60763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60764. return $core.withContext(function($ctx1) {
  60765. //>>excludeEnd("ctx");
  60766. var $1;
  60767. $1=$recv(self._class())._collectionClass();
  60768. return $1;
  60769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60770. }, function($ctx1) {$ctx1.fill(self,"collectionClass",{},$globals.CollectionTest)});
  60771. //>>excludeEnd("ctx");
  60772. },
  60773. //>>excludeStart("ide", pragmas.excludeIdeData);
  60774. args: [],
  60775. source: "collectionClass\x0a\x09\x22Answers class of collection type tested\x22\x0a\x0a\x09^ self class collectionClass",
  60776. referencedClasses: [],
  60777. //>>excludeEnd("ide");
  60778. messageSends: ["collectionClass", "class"]
  60779. }),
  60780. $globals.CollectionTest);
  60781. $core.addMethod(
  60782. $core.method({
  60783. selector: "collectionOfPrintStrings",
  60784. protocol: 'fixture',
  60785. fn: function (){
  60786. var self=this;
  60787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60788. return $core.withContext(function($ctx1) {
  60789. //>>excludeEnd("ctx");
  60790. self._subclassResponsibility();
  60791. return self;
  60792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60793. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.CollectionTest)});
  60794. //>>excludeEnd("ctx");
  60795. },
  60796. //>>excludeStart("ide", pragmas.excludeIdeData);
  60797. args: [],
  60798. source: "collectionOfPrintStrings\x0a\x09\x22Answers self collection but with values\x0a\x09changed to their printStrings\x22\x0a\x0a\x09self subclassResponsibility",
  60799. referencedClasses: [],
  60800. //>>excludeEnd("ide");
  60801. messageSends: ["subclassResponsibility"]
  60802. }),
  60803. $globals.CollectionTest);
  60804. $core.addMethod(
  60805. $core.method({
  60806. selector: "collectionSize",
  60807. protocol: 'fixture',
  60808. fn: function (){
  60809. var self=this;
  60810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60811. return $core.withContext(function($ctx1) {
  60812. //>>excludeEnd("ctx");
  60813. self._subclassResponsibility();
  60814. return self;
  60815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60816. }, function($ctx1) {$ctx1.fill(self,"collectionSize",{},$globals.CollectionTest)});
  60817. //>>excludeEnd("ctx");
  60818. },
  60819. //>>excludeStart("ide", pragmas.excludeIdeData);
  60820. args: [],
  60821. source: "collectionSize\x0a\x09\x22Answers size of self collection.\x22\x0a\x0a\x09self subclassResponsibility",
  60822. referencedClasses: [],
  60823. //>>excludeEnd("ide");
  60824. messageSends: ["subclassResponsibility"]
  60825. }),
  60826. $globals.CollectionTest);
  60827. $core.addMethod(
  60828. $core.method({
  60829. selector: "collectionWithDuplicates",
  60830. protocol: 'fixture',
  60831. fn: function (){
  60832. var self=this;
  60833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60834. return $core.withContext(function($ctx1) {
  60835. //>>excludeEnd("ctx");
  60836. self._subclassResponsibility();
  60837. return self;
  60838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60839. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.CollectionTest)});
  60840. //>>excludeEnd("ctx");
  60841. },
  60842. //>>excludeStart("ide", pragmas.excludeIdeData);
  60843. args: [],
  60844. source: "collectionWithDuplicates\x0a\x09\x22Answers pre-filled collection of type tested,\x0a\x09with exactly five distinct elements,\x0a\x09some of them appearing multiple times, if possible.\x22\x0a\x0a\x09self subclassResponsibility",
  60845. referencedClasses: [],
  60846. //>>excludeEnd("ide");
  60847. messageSends: ["subclassResponsibility"]
  60848. }),
  60849. $globals.CollectionTest);
  60850. $core.addMethod(
  60851. $core.method({
  60852. selector: "collectionWithNewValue",
  60853. protocol: 'fixture',
  60854. fn: function (){
  60855. var self=this;
  60856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60857. return $core.withContext(function($ctx1) {
  60858. //>>excludeEnd("ctx");
  60859. self._subclassResponsibility();
  60860. return self;
  60861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60862. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.CollectionTest)});
  60863. //>>excludeEnd("ctx");
  60864. },
  60865. //>>excludeStart("ide", pragmas.excludeIdeData);
  60866. args: [],
  60867. source: "collectionWithNewValue\x0a\x09\x22Answers a collection which shows how\x0a\x09self collection would look after adding\x0a\x09self sampleNewValue\x22\x0a\x09\x0a\x09self subclassResponsibility",
  60868. referencedClasses: [],
  60869. //>>excludeEnd("ide");
  60870. messageSends: ["subclassResponsibility"]
  60871. }),
  60872. $globals.CollectionTest);
  60873. $core.addMethod(
  60874. $core.method({
  60875. selector: "isCollectionReadOnly",
  60876. protocol: 'testing',
  60877. fn: function (){
  60878. var self=this;
  60879. return false;
  60880. },
  60881. //>>excludeStart("ide", pragmas.excludeIdeData);
  60882. args: [],
  60883. source: "isCollectionReadOnly\x0a\x09^ false",
  60884. referencedClasses: [],
  60885. //>>excludeEnd("ide");
  60886. messageSends: []
  60887. }),
  60888. $globals.CollectionTest);
  60889. $core.addMethod(
  60890. $core.method({
  60891. selector: "sampleNewValue",
  60892. protocol: 'fixture',
  60893. fn: function (){
  60894. var self=this;
  60895. return "N";
  60896. },
  60897. //>>excludeStart("ide", pragmas.excludeIdeData);
  60898. args: [],
  60899. source: "sampleNewValue\x0a\x09\x22Answers a value that is not yet there\x0a\x09and can be put into a tested collection\x22\x0a\x09\x0a\x09^ 'N'",
  60900. referencedClasses: [],
  60901. //>>excludeEnd("ide");
  60902. messageSends: []
  60903. }),
  60904. $globals.CollectionTest);
  60905. $core.addMethod(
  60906. $core.method({
  60907. selector: "sampleNewValueAsCollection",
  60908. protocol: 'fixture',
  60909. fn: function (){
  60910. var self=this;
  60911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60912. return $core.withContext(function($ctx1) {
  60913. //>>excludeEnd("ctx");
  60914. var $1;
  60915. $1=$recv(self._collectionClass())._with_(self._sampleNewValue());
  60916. return $1;
  60917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60918. }, function($ctx1) {$ctx1.fill(self,"sampleNewValueAsCollection",{},$globals.CollectionTest)});
  60919. //>>excludeEnd("ctx");
  60920. },
  60921. //>>excludeStart("ide", pragmas.excludeIdeData);
  60922. args: [],
  60923. source: "sampleNewValueAsCollection\x0a\x09\x22Answers self sampleNewValue\x0a\x09wrapped in single element collection\x0a\x09of tested type\x22\x0a\x09\x0a\x09^ self collectionClass with: self sampleNewValue",
  60924. referencedClasses: [],
  60925. //>>excludeEnd("ide");
  60926. messageSends: ["with:", "collectionClass", "sampleNewValue"]
  60927. }),
  60928. $globals.CollectionTest);
  60929. $core.addMethod(
  60930. $core.method({
  60931. selector: "testAddAll",
  60932. protocol: 'tests',
  60933. fn: function (){
  60934. var self=this;
  60935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60936. return $core.withContext(function($ctx1) {
  60937. //>>excludeEnd("ctx");
  60938. var $2,$3,$5,$4,$6,$1,$7,$10,$9,$11,$12,$13,$8,$14,$17,$16,$18,$20,$19,$21,$15,$23,$24,$25,$26,$22,$27,$28,$29;
  60939. $2=self._collection();
  60940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60941. $ctx1.sendIdx["collection"]=1;
  60942. //>>excludeEnd("ctx");
  60943. $3=$2;
  60944. $5=self._collectionClass();
  60945. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60946. $ctx1.sendIdx["collectionClass"]=1;
  60947. //>>excludeEnd("ctx");
  60948. $4=$recv($5)._new();
  60949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60950. $ctx1.sendIdx["new"]=1;
  60951. //>>excludeEnd("ctx");
  60952. $recv($3)._addAll_($4);
  60953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60954. $ctx1.sendIdx["addAll:"]=1;
  60955. //>>excludeEnd("ctx");
  60956. $6=$recv($2)._yourself();
  60957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60958. $ctx1.sendIdx["yourself"]=1;
  60959. //>>excludeEnd("ctx");
  60960. $1=$6;
  60961. $7=self._collection();
  60962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60963. $ctx1.sendIdx["collection"]=2;
  60964. //>>excludeEnd("ctx");
  60965. self._assert_equals_($1,$7);
  60966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60967. $ctx1.sendIdx["assert:equals:"]=1;
  60968. //>>excludeEnd("ctx");
  60969. $10=self._collectionClass();
  60970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60971. $ctx1.sendIdx["collectionClass"]=2;
  60972. //>>excludeEnd("ctx");
  60973. $9=$recv($10)._new();
  60974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60975. $ctx1.sendIdx["new"]=2;
  60976. //>>excludeEnd("ctx");
  60977. $11=$9;
  60978. $12=self._collection();
  60979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60980. $ctx1.sendIdx["collection"]=3;
  60981. //>>excludeEnd("ctx");
  60982. $recv($11)._addAll_($12);
  60983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60984. $ctx1.sendIdx["addAll:"]=2;
  60985. //>>excludeEnd("ctx");
  60986. $13=$recv($9)._yourself();
  60987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60988. $ctx1.sendIdx["yourself"]=2;
  60989. //>>excludeEnd("ctx");
  60990. $8=$13;
  60991. $14=self._collection();
  60992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60993. $ctx1.sendIdx["collection"]=4;
  60994. //>>excludeEnd("ctx");
  60995. self._assert_equals_($8,$14);
  60996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  60997. $ctx1.sendIdx["assert:equals:"]=2;
  60998. //>>excludeEnd("ctx");
  60999. $17=self._collectionClass();
  61000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61001. $ctx1.sendIdx["collectionClass"]=3;
  61002. //>>excludeEnd("ctx");
  61003. $16=$recv($17)._new();
  61004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61005. $ctx1.sendIdx["new"]=3;
  61006. //>>excludeEnd("ctx");
  61007. $18=$16;
  61008. $20=self._collectionClass();
  61009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61010. $ctx1.sendIdx["collectionClass"]=4;
  61011. //>>excludeEnd("ctx");
  61012. $19=$recv($20)._new();
  61013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61014. $ctx1.sendIdx["new"]=4;
  61015. //>>excludeEnd("ctx");
  61016. $recv($18)._addAll_($19);
  61017. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61018. $ctx1.sendIdx["addAll:"]=3;
  61019. //>>excludeEnd("ctx");
  61020. $21=$recv($16)._yourself();
  61021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61022. $ctx1.sendIdx["yourself"]=3;
  61023. //>>excludeEnd("ctx");
  61024. $15=$21;
  61025. self._assert_equals_($15,$recv(self._collectionClass())._new());
  61026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61027. $ctx1.sendIdx["assert:equals:"]=3;
  61028. //>>excludeEnd("ctx");
  61029. $23=self._collection();
  61030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61031. $ctx1.sendIdx["collection"]=5;
  61032. //>>excludeEnd("ctx");
  61033. $24=$23;
  61034. $25=self._sampleNewValueAsCollection();
  61035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61036. $ctx1.sendIdx["sampleNewValueAsCollection"]=1;
  61037. //>>excludeEnd("ctx");
  61038. $recv($24)._addAll_($25);
  61039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61040. $ctx1.sendIdx["addAll:"]=4;
  61041. //>>excludeEnd("ctx");
  61042. $26=$recv($23)._yourself();
  61043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61044. $ctx1.sendIdx["yourself"]=4;
  61045. //>>excludeEnd("ctx");
  61046. $22=$26;
  61047. $27=self._collectionWithNewValue();
  61048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61049. $ctx1.sendIdx["collectionWithNewValue"]=1;
  61050. //>>excludeEnd("ctx");
  61051. self._assert_equals_($22,$27);
  61052. $28=self._sampleNewValueAsCollection();
  61053. $recv($28)._addAll_(self._collection());
  61054. $29=$recv($28)._yourself();
  61055. self._assertSameContents_as_($29,self._collectionWithNewValue());
  61056. return self;
  61057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61058. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.CollectionTest)});
  61059. //>>excludeEnd("ctx");
  61060. },
  61061. //>>excludeStart("ide", pragmas.excludeIdeData);
  61062. args: [],
  61063. source: "testAddAll\x0a\x09self assert: (self collection addAll: self collectionClass new; yourself) equals: self collection.\x0a\x09self assert: (self collectionClass new addAll: self collection; yourself) equals: self collection.\x0a\x09self assert: (self collectionClass new addAll: self collectionClass new; yourself) equals: self collectionClass new.\x0a\x09self assert: (self collection addAll: self sampleNewValueAsCollection; yourself) equals: self collectionWithNewValue.\x0a\x09self assertSameContents: (self sampleNewValueAsCollection addAll: self collection; yourself) as: self collectionWithNewValue",
  61064. referencedClasses: [],
  61065. //>>excludeEnd("ide");
  61066. messageSends: ["assert:equals:", "addAll:", "collection", "new", "collectionClass", "yourself", "sampleNewValueAsCollection", "collectionWithNewValue", "assertSameContents:as:"]
  61067. }),
  61068. $globals.CollectionTest);
  61069. $core.addMethod(
  61070. $core.method({
  61071. selector: "testAllSatisfy",
  61072. protocol: 'tests',
  61073. fn: function (){
  61074. var self=this;
  61075. var collection,anyOne;
  61076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61077. return $core.withContext(function($ctx1) {
  61078. //>>excludeEnd("ctx");
  61079. var $1;
  61080. collection=self._collection();
  61081. anyOne=$recv(collection)._anyOne();
  61082. $1=$recv(collection)._allSatisfy_((function(each){
  61083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61084. return $core.withContext(function($ctx2) {
  61085. //>>excludeEnd("ctx");
  61086. return $recv(collection)._includes_(each);
  61087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61088. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61089. //>>excludeEnd("ctx");
  61090. }));
  61091. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61092. $ctx1.sendIdx["allSatisfy:"]=1;
  61093. //>>excludeEnd("ctx");
  61094. self._assert_($1);
  61095. self._deny_($recv(collection)._allSatisfy_((function(each){
  61096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61097. return $core.withContext(function($ctx2) {
  61098. //>>excludeEnd("ctx");
  61099. return $recv(each).__tild_eq(anyOne);
  61100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61101. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  61102. //>>excludeEnd("ctx");
  61103. })));
  61104. return self;
  61105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61106. }, function($ctx1) {$ctx1.fill(self,"testAllSatisfy",{collection:collection,anyOne:anyOne},$globals.CollectionTest)});
  61107. //>>excludeEnd("ctx");
  61108. },
  61109. //>>excludeStart("ide", pragmas.excludeIdeData);
  61110. args: [],
  61111. source: "testAllSatisfy\x0a\x09| collection anyOne |\x0a\x09collection := self collection.\x0a\x09anyOne := collection anyOne.\x0a\x09self assert: (collection allSatisfy: [ :each | collection includes: each ]).\x0a\x09self deny: (collection allSatisfy: [ :each | each ~= anyOne ])",
  61112. referencedClasses: [],
  61113. //>>excludeEnd("ide");
  61114. messageSends: ["collection", "anyOne", "assert:", "allSatisfy:", "includes:", "deny:", "~="]
  61115. }),
  61116. $globals.CollectionTest);
  61117. $core.addMethod(
  61118. $core.method({
  61119. selector: "testAnyOne",
  61120. protocol: 'tests',
  61121. fn: function (){
  61122. var self=this;
  61123. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  61124. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61125. return $core.withContext(function($ctx1) {
  61126. //>>excludeEnd("ctx");
  61127. var $2,$1;
  61128. self._should_raise_((function(){
  61129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61130. return $core.withContext(function($ctx2) {
  61131. //>>excludeEnd("ctx");
  61132. return $recv($recv(self._collectionClass())._new())._anyOne();
  61133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61134. $ctx2.sendIdx["anyOne"]=1;
  61135. //>>excludeEnd("ctx");
  61136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61137. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  61138. //>>excludeEnd("ctx");
  61139. }),$Error());
  61140. $2=self._collection();
  61141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61142. $ctx1.sendIdx["collection"]=1;
  61143. //>>excludeEnd("ctx");
  61144. $1=$recv($2)._includes_($recv(self._collection())._anyOne());
  61145. self._assert_($1);
  61146. return self;
  61147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61148. }, function($ctx1) {$ctx1.fill(self,"testAnyOne",{},$globals.CollectionTest)});
  61149. //>>excludeEnd("ctx");
  61150. },
  61151. //>>excludeStart("ide", pragmas.excludeIdeData);
  61152. args: [],
  61153. source: "testAnyOne\x0a\x09self should: [ self collectionClass new anyOne ] raise: Error.\x0a\x09self assert: (self collection includes: self collection anyOne)",
  61154. referencedClasses: ["Error"],
  61155. //>>excludeEnd("ide");
  61156. messageSends: ["should:raise:", "anyOne", "new", "collectionClass", "assert:", "includes:", "collection"]
  61157. }),
  61158. $globals.CollectionTest);
  61159. $core.addMethod(
  61160. $core.method({
  61161. selector: "testAnySatisfy",
  61162. protocol: 'tests',
  61163. fn: function (){
  61164. var self=this;
  61165. var anyOne;
  61166. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  61167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61168. return $core.withContext(function($ctx1) {
  61169. //>>excludeEnd("ctx");
  61170. var $1,$3,$2;
  61171. $1=self._collection();
  61172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61173. $ctx1.sendIdx["collection"]=1;
  61174. //>>excludeEnd("ctx");
  61175. anyOne=$recv($1)._anyOne();
  61176. $3=self._collection();
  61177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61178. $ctx1.sendIdx["collection"]=2;
  61179. //>>excludeEnd("ctx");
  61180. $2=$recv($3)._anySatisfy_((function(each){
  61181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61182. return $core.withContext(function($ctx2) {
  61183. //>>excludeEnd("ctx");
  61184. return $recv(each).__eq(anyOne);
  61185. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61186. $ctx2.sendIdx["="]=1;
  61187. //>>excludeEnd("ctx");
  61188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61189. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61190. //>>excludeEnd("ctx");
  61191. }));
  61192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61193. $ctx1.sendIdx["anySatisfy:"]=1;
  61194. //>>excludeEnd("ctx");
  61195. self._assert_($2);
  61196. self._deny_($recv(self._collection())._anySatisfy_((function(each){
  61197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61198. return $core.withContext(function($ctx2) {
  61199. //>>excludeEnd("ctx");
  61200. return $recv(each).__eq($recv($Object())._new());
  61201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61202. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  61203. //>>excludeEnd("ctx");
  61204. })));
  61205. return self;
  61206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61207. }, function($ctx1) {$ctx1.fill(self,"testAnySatisfy",{anyOne:anyOne},$globals.CollectionTest)});
  61208. //>>excludeEnd("ctx");
  61209. },
  61210. //>>excludeStart("ide", pragmas.excludeIdeData);
  61211. args: [],
  61212. source: "testAnySatisfy\x0a\x09| anyOne |\x0a\x09anyOne := self collection anyOne.\x0a\x09self assert: (self collection anySatisfy: [ :each | each = anyOne ]).\x0a\x09self deny: (self collection anySatisfy: [ :each | each = Object new ])",
  61213. referencedClasses: ["Object"],
  61214. //>>excludeEnd("ide");
  61215. messageSends: ["anyOne", "collection", "assert:", "anySatisfy:", "=", "deny:", "new"]
  61216. }),
  61217. $globals.CollectionTest);
  61218. $core.addMethod(
  61219. $core.method({
  61220. selector: "testAsArray",
  61221. protocol: 'tests',
  61222. fn: function (){
  61223. var self=this;
  61224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61225. return $core.withContext(function($ctx1) {
  61226. //>>excludeEnd("ctx");
  61227. var $1;
  61228. $1=self._collection();
  61229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61230. $ctx1.sendIdx["collection"]=1;
  61231. //>>excludeEnd("ctx");
  61232. self._assertSameContents_as_($1,$recv(self._collection())._asArray());
  61233. return self;
  61234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61235. }, function($ctx1) {$ctx1.fill(self,"testAsArray",{},$globals.CollectionTest)});
  61236. //>>excludeEnd("ctx");
  61237. },
  61238. //>>excludeStart("ide", pragmas.excludeIdeData);
  61239. args: [],
  61240. source: "testAsArray\x0a\x09self\x0a\x09\x09assertSameContents: self collection\x0a\x09\x09as: self collection asArray",
  61241. referencedClasses: [],
  61242. //>>excludeEnd("ide");
  61243. messageSends: ["assertSameContents:as:", "collection", "asArray"]
  61244. }),
  61245. $globals.CollectionTest);
  61246. $core.addMethod(
  61247. $core.method({
  61248. selector: "testAsOrderedCollection",
  61249. protocol: 'tests',
  61250. fn: function (){
  61251. var self=this;
  61252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61253. return $core.withContext(function($ctx1) {
  61254. //>>excludeEnd("ctx");
  61255. var $1;
  61256. $1=self._collection();
  61257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61258. $ctx1.sendIdx["collection"]=1;
  61259. //>>excludeEnd("ctx");
  61260. self._assertSameContents_as_($1,$recv(self._collection())._asOrderedCollection());
  61261. return self;
  61262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61263. }, function($ctx1) {$ctx1.fill(self,"testAsOrderedCollection",{},$globals.CollectionTest)});
  61264. //>>excludeEnd("ctx");
  61265. },
  61266. //>>excludeStart("ide", pragmas.excludeIdeData);
  61267. args: [],
  61268. source: "testAsOrderedCollection\x0a\x09self\x0a\x09\x09assertSameContents: self collection\x0a\x09\x09as: self collection asOrderedCollection",
  61269. referencedClasses: [],
  61270. //>>excludeEnd("ide");
  61271. messageSends: ["assertSameContents:as:", "collection", "asOrderedCollection"]
  61272. }),
  61273. $globals.CollectionTest);
  61274. $core.addMethod(
  61275. $core.method({
  61276. selector: "testAsSet",
  61277. protocol: 'tests',
  61278. fn: function (){
  61279. var self=this;
  61280. var c,set;
  61281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61282. return $core.withContext(function($ctx1) {
  61283. //>>excludeEnd("ctx");
  61284. c=self._collectionWithDuplicates();
  61285. set=$recv(c)._asSet();
  61286. self._assert_equals_($recv(set)._size(),(5));
  61287. $recv(c)._do_((function(each){
  61288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61289. return $core.withContext(function($ctx2) {
  61290. //>>excludeEnd("ctx");
  61291. return self._assert_($recv(set)._includes_(each));
  61292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61293. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61294. //>>excludeEnd("ctx");
  61295. }));
  61296. return self;
  61297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61298. }, function($ctx1) {$ctx1.fill(self,"testAsSet",{c:c,set:set},$globals.CollectionTest)});
  61299. //>>excludeEnd("ctx");
  61300. },
  61301. //>>excludeStart("ide", pragmas.excludeIdeData);
  61302. args: [],
  61303. source: "testAsSet\x0a\x09| c set |\x0a\x09c := self collectionWithDuplicates.\x0a\x09set := c asSet.\x0a\x09self assert: set size equals: 5.\x0a\x09c do: [ :each |\x0a\x09\x09self assert: (set includes: each) ]",
  61304. referencedClasses: [],
  61305. //>>excludeEnd("ide");
  61306. messageSends: ["collectionWithDuplicates", "asSet", "assert:equals:", "size", "do:", "assert:", "includes:"]
  61307. }),
  61308. $globals.CollectionTest);
  61309. $core.addMethod(
  61310. $core.method({
  61311. selector: "testCollect",
  61312. protocol: 'tests',
  61313. fn: function (){
  61314. var self=this;
  61315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61316. return $core.withContext(function($ctx1) {
  61317. //>>excludeEnd("ctx");
  61318. var $2,$1,$3,$5,$4,$8,$7,$6,$11,$10,$9;
  61319. $2=self._collection();
  61320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61321. $ctx1.sendIdx["collection"]=1;
  61322. //>>excludeEnd("ctx");
  61323. $1=$recv($2)._collect_((function(each){
  61324. return each;
  61325. }));
  61326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61327. $ctx1.sendIdx["collect:"]=1;
  61328. //>>excludeEnd("ctx");
  61329. $3=self._collection();
  61330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61331. $ctx1.sendIdx["collection"]=2;
  61332. //>>excludeEnd("ctx");
  61333. self._assert_equals_($1,$3);
  61334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61335. $ctx1.sendIdx["assert:equals:"]=1;
  61336. //>>excludeEnd("ctx");
  61337. $5=self._collectionWithNewValue();
  61338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61339. $ctx1.sendIdx["collectionWithNewValue"]=1;
  61340. //>>excludeEnd("ctx");
  61341. $4=$recv($5)._collect_((function(each){
  61342. return each;
  61343. }));
  61344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61345. $ctx1.sendIdx["collect:"]=2;
  61346. //>>excludeEnd("ctx");
  61347. self._assert_equals_($4,self._collectionWithNewValue());
  61348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61349. $ctx1.sendIdx["assert:equals:"]=2;
  61350. //>>excludeEnd("ctx");
  61351. $8=self._collectionClass();
  61352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61353. $ctx1.sendIdx["collectionClass"]=1;
  61354. //>>excludeEnd("ctx");
  61355. $7=$recv($8)._new();
  61356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61357. $ctx1.sendIdx["new"]=1;
  61358. //>>excludeEnd("ctx");
  61359. $6=$recv($7)._collect_((function(each){
  61360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61361. return $core.withContext(function($ctx2) {
  61362. //>>excludeEnd("ctx");
  61363. return $recv(each)._printString();
  61364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61365. $ctx2.sendIdx["printString"]=1;
  61366. //>>excludeEnd("ctx");
  61367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61368. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  61369. //>>excludeEnd("ctx");
  61370. }));
  61371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61372. $ctx1.sendIdx["collect:"]=3;
  61373. //>>excludeEnd("ctx");
  61374. self._assert_equals_($6,$recv(self._collectionClass())._new());
  61375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61376. $ctx1.sendIdx["assert:equals:"]=3;
  61377. //>>excludeEnd("ctx");
  61378. $11=self._collection();
  61379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61380. $ctx1.sendIdx["collection"]=3;
  61381. //>>excludeEnd("ctx");
  61382. $10=$recv($11)._collect_((function(){
  61383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61384. return $core.withContext(function($ctx2) {
  61385. //>>excludeEnd("ctx");
  61386. return self._sampleNewValue();
  61387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61388. $ctx2.sendIdx["sampleNewValue"]=1;
  61389. //>>excludeEnd("ctx");
  61390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61391. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  61392. //>>excludeEnd("ctx");
  61393. }));
  61394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61395. $ctx1.sendIdx["collect:"]=4;
  61396. //>>excludeEnd("ctx");
  61397. $9=$recv($10)._detect_((function(){
  61398. return true;
  61399. }));
  61400. self._assert_equals_($9,self._sampleNewValue());
  61401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61402. $ctx1.sendIdx["assert:equals:"]=4;
  61403. //>>excludeEnd("ctx");
  61404. self._assert_equals_($recv(self._collection())._collect_((function(each){
  61405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61406. return $core.withContext(function($ctx2) {
  61407. //>>excludeEnd("ctx");
  61408. return $recv(each)._printString();
  61409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61410. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  61411. //>>excludeEnd("ctx");
  61412. })),self._collectionOfPrintStrings());
  61413. return self;
  61414. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61415. }, function($ctx1) {$ctx1.fill(self,"testCollect",{},$globals.CollectionTest)});
  61416. //>>excludeEnd("ctx");
  61417. },
  61418. //>>excludeStart("ide", pragmas.excludeIdeData);
  61419. args: [],
  61420. source: "testCollect\x0a\x09self assert: (self collection collect: [ :each | each ]) equals: self collection.\x0a\x09self assert: (self collectionWithNewValue collect: [ :each | each ]) equals: self collectionWithNewValue.\x0a\x09self assert: (self collectionClass new collect: [ :each | each printString ]) equals: self collectionClass new.\x0a\x09self assert: ((self collection collect: [ self sampleNewValue ]) detect: [ true ]) equals: self sampleNewValue.\x0a\x09self assert: (self collection collect: [ :each | each printString ]) equals: self collectionOfPrintStrings",
  61421. referencedClasses: [],
  61422. //>>excludeEnd("ide");
  61423. messageSends: ["assert:equals:", "collect:", "collection", "collectionWithNewValue", "new", "collectionClass", "printString", "detect:", "sampleNewValue", "collectionOfPrintStrings"]
  61424. }),
  61425. $globals.CollectionTest);
  61426. $core.addMethod(
  61427. $core.method({
  61428. selector: "testComma",
  61429. protocol: 'tests',
  61430. fn: function (){
  61431. var self=this;
  61432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61433. return $core.withContext(function($ctx1) {
  61434. //>>excludeEnd("ctx");
  61435. var $2,$4,$3,$1,$5,$8,$7,$9,$6,$10,$13,$12,$15,$14,$11,$17,$18,$16,$19;
  61436. $2=self._collection();
  61437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61438. $ctx1.sendIdx["collection"]=1;
  61439. //>>excludeEnd("ctx");
  61440. $4=self._collectionClass();
  61441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61442. $ctx1.sendIdx["collectionClass"]=1;
  61443. //>>excludeEnd("ctx");
  61444. $3=$recv($4)._new();
  61445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61446. $ctx1.sendIdx["new"]=1;
  61447. //>>excludeEnd("ctx");
  61448. $1=$recv($2).__comma($3);
  61449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61450. $ctx1.sendIdx[","]=1;
  61451. //>>excludeEnd("ctx");
  61452. $5=self._collection();
  61453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61454. $ctx1.sendIdx["collection"]=2;
  61455. //>>excludeEnd("ctx");
  61456. self._assert_equals_($1,$5);
  61457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61458. $ctx1.sendIdx["assert:equals:"]=1;
  61459. //>>excludeEnd("ctx");
  61460. $8=self._collectionClass();
  61461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61462. $ctx1.sendIdx["collectionClass"]=2;
  61463. //>>excludeEnd("ctx");
  61464. $7=$recv($8)._new();
  61465. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61466. $ctx1.sendIdx["new"]=2;
  61467. //>>excludeEnd("ctx");
  61468. $9=self._collection();
  61469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61470. $ctx1.sendIdx["collection"]=3;
  61471. //>>excludeEnd("ctx");
  61472. $6=$recv($7).__comma($9);
  61473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61474. $ctx1.sendIdx[","]=2;
  61475. //>>excludeEnd("ctx");
  61476. $10=self._collection();
  61477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61478. $ctx1.sendIdx["collection"]=4;
  61479. //>>excludeEnd("ctx");
  61480. self._assert_equals_($6,$10);
  61481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61482. $ctx1.sendIdx["assert:equals:"]=2;
  61483. //>>excludeEnd("ctx");
  61484. $13=self._collectionClass();
  61485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61486. $ctx1.sendIdx["collectionClass"]=3;
  61487. //>>excludeEnd("ctx");
  61488. $12=$recv($13)._new();
  61489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61490. $ctx1.sendIdx["new"]=3;
  61491. //>>excludeEnd("ctx");
  61492. $15=self._collectionClass();
  61493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61494. $ctx1.sendIdx["collectionClass"]=4;
  61495. //>>excludeEnd("ctx");
  61496. $14=$recv($15)._new();
  61497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61498. $ctx1.sendIdx["new"]=4;
  61499. //>>excludeEnd("ctx");
  61500. $11=$recv($12).__comma($14);
  61501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61502. $ctx1.sendIdx[","]=3;
  61503. //>>excludeEnd("ctx");
  61504. self._assert_equals_($11,$recv(self._collectionClass())._new());
  61505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61506. $ctx1.sendIdx["assert:equals:"]=3;
  61507. //>>excludeEnd("ctx");
  61508. $17=self._collection();
  61509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61510. $ctx1.sendIdx["collection"]=5;
  61511. //>>excludeEnd("ctx");
  61512. $18=self._sampleNewValueAsCollection();
  61513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61514. $ctx1.sendIdx["sampleNewValueAsCollection"]=1;
  61515. //>>excludeEnd("ctx");
  61516. $16=$recv($17).__comma($18);
  61517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61518. $ctx1.sendIdx[","]=4;
  61519. //>>excludeEnd("ctx");
  61520. $19=self._collectionWithNewValue();
  61521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61522. $ctx1.sendIdx["collectionWithNewValue"]=1;
  61523. //>>excludeEnd("ctx");
  61524. self._assert_equals_($16,$19);
  61525. self._assertSameContents_as_($recv(self._sampleNewValueAsCollection()).__comma(self._collection()),self._collectionWithNewValue());
  61526. return self;
  61527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61528. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.CollectionTest)});
  61529. //>>excludeEnd("ctx");
  61530. },
  61531. //>>excludeStart("ide", pragmas.excludeIdeData);
  61532. args: [],
  61533. source: "testComma\x0a\x09self assert: self collection, self collectionClass new equals: self collection.\x0a\x09self assert: self collectionClass new, self collection equals: self collection.\x0a\x09self assert: self collectionClass new, self collectionClass new equals: self collectionClass new.\x0a\x09self assert: self collection, self sampleNewValueAsCollection equals: self collectionWithNewValue.\x0a\x09self assertSameContents: self sampleNewValueAsCollection, self collection as: self collectionWithNewValue",
  61534. referencedClasses: [],
  61535. //>>excludeEnd("ide");
  61536. messageSends: ["assert:equals:", ",", "collection", "new", "collectionClass", "sampleNewValueAsCollection", "collectionWithNewValue", "assertSameContents:as:"]
  61537. }),
  61538. $globals.CollectionTest);
  61539. $core.addMethod(
  61540. $core.method({
  61541. selector: "testDetect",
  61542. protocol: 'tests',
  61543. fn: function (){
  61544. var self=this;
  61545. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  61546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61547. return $core.withContext(function($ctx1) {
  61548. //>>excludeEnd("ctx");
  61549. var $1,$2,$3,$4,$6,$5,$7;
  61550. self._shouldnt_raise_((function(){
  61551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61552. return $core.withContext(function($ctx2) {
  61553. //>>excludeEnd("ctx");
  61554. $1=self._collection();
  61555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61556. $ctx2.sendIdx["collection"]=1;
  61557. //>>excludeEnd("ctx");
  61558. return $recv($1)._detect_((function(){
  61559. return true;
  61560. }));
  61561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61562. $ctx2.sendIdx["detect:"]=1;
  61563. //>>excludeEnd("ctx");
  61564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61565. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  61566. //>>excludeEnd("ctx");
  61567. }),$Error());
  61568. self._should_raise_((function(){
  61569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61570. return $core.withContext(function($ctx2) {
  61571. //>>excludeEnd("ctx");
  61572. $2=self._collection();
  61573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61574. $ctx2.sendIdx["collection"]=2;
  61575. //>>excludeEnd("ctx");
  61576. return $recv($2)._detect_((function(){
  61577. return false;
  61578. }));
  61579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61580. $ctx2.sendIdx["detect:"]=2;
  61581. //>>excludeEnd("ctx");
  61582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61583. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  61584. //>>excludeEnd("ctx");
  61585. }),$Error());
  61586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61587. $ctx1.sendIdx["should:raise:"]=1;
  61588. //>>excludeEnd("ctx");
  61589. $3=$recv(self._sampleNewValueAsCollection())._detect_((function(){
  61590. return true;
  61591. }));
  61592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61593. $ctx1.sendIdx["detect:"]=3;
  61594. //>>excludeEnd("ctx");
  61595. $4=self._sampleNewValue();
  61596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61597. $ctx1.sendIdx["sampleNewValue"]=1;
  61598. //>>excludeEnd("ctx");
  61599. self._assert_equals_($3,$4);
  61600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61601. $ctx1.sendIdx["assert:equals:"]=1;
  61602. //>>excludeEnd("ctx");
  61603. $5=$recv(self._collectionWithNewValue())._detect_((function(each){
  61604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61605. return $core.withContext(function($ctx2) {
  61606. //>>excludeEnd("ctx");
  61607. $6=self._sampleNewValue();
  61608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61609. $ctx2.sendIdx["sampleNewValue"]=2;
  61610. //>>excludeEnd("ctx");
  61611. return $recv(each).__eq($6);
  61612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61613. $ctx2.sendIdx["="]=1;
  61614. //>>excludeEnd("ctx");
  61615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61616. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  61617. //>>excludeEnd("ctx");
  61618. }));
  61619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61620. $ctx1.sendIdx["detect:"]=4;
  61621. //>>excludeEnd("ctx");
  61622. $7=self._sampleNewValue();
  61623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61624. $ctx1.sendIdx["sampleNewValue"]=3;
  61625. //>>excludeEnd("ctx");
  61626. self._assert_equals_($5,$7);
  61627. self._should_raise_((function(){
  61628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61629. return $core.withContext(function($ctx2) {
  61630. //>>excludeEnd("ctx");
  61631. return $recv(self._collection())._detect_((function(each){
  61632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61633. return $core.withContext(function($ctx3) {
  61634. //>>excludeEnd("ctx");
  61635. return $recv(each).__eq(self._sampleNewValue());
  61636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61637. }, function($ctx3) {$ctx3.fillBlock({each:each},$ctx2,8)});
  61638. //>>excludeEnd("ctx");
  61639. }));
  61640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61641. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  61642. //>>excludeEnd("ctx");
  61643. }),$Error());
  61644. return self;
  61645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61646. }, function($ctx1) {$ctx1.fill(self,"testDetect",{},$globals.CollectionTest)});
  61647. //>>excludeEnd("ctx");
  61648. },
  61649. //>>excludeStart("ide", pragmas.excludeIdeData);
  61650. args: [],
  61651. source: "testDetect\x0a\x09self\x0a\x09\x09shouldnt: [ self collection detect: [ true ] ]\x0a\x09\x09raise: Error.\x0a\x09self\x0a\x09\x09should: [ self collection detect: [ false ] ]\x0a\x09\x09raise: Error.\x0a\x09self assert: (self sampleNewValueAsCollection detect: [ true ]) equals: self sampleNewValue.\x0a\x09self assert: (self collectionWithNewValue detect: [ :each | each = self sampleNewValue ]) equals: self sampleNewValue.\x0a\x09self\x0a\x09\x09should: [ self collection detect: [ :each | each = self sampleNewValue ] ]\x0a\x09\x09raise: Error",
  61652. referencedClasses: ["Error"],
  61653. //>>excludeEnd("ide");
  61654. messageSends: ["shouldnt:raise:", "detect:", "collection", "should:raise:", "assert:equals:", "sampleNewValueAsCollection", "sampleNewValue", "collectionWithNewValue", "="]
  61655. }),
  61656. $globals.CollectionTest);
  61657. $core.addMethod(
  61658. $core.method({
  61659. selector: "testDetectIfNone",
  61660. protocol: 'tests',
  61661. fn: function (){
  61662. var self=this;
  61663. var sentinel;
  61664. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  61665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61666. return $core.withContext(function($ctx1) {
  61667. //>>excludeEnd("ctx");
  61668. var $3,$2,$1,$5,$4,$6,$7,$9,$8,$10;
  61669. sentinel=$recv($Object())._new();
  61670. $3=self._collection();
  61671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61672. $ctx1.sendIdx["collection"]=1;
  61673. //>>excludeEnd("ctx");
  61674. $2=$recv($3)._detect_ifNone_((function(){
  61675. return true;
  61676. }),(function(){
  61677. return sentinel;
  61678. }));
  61679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61680. $ctx1.sendIdx["detect:ifNone:"]=1;
  61681. //>>excludeEnd("ctx");
  61682. $1=$recv($2).__tild_eq(sentinel);
  61683. self._assert_($1);
  61684. $5=self._collection();
  61685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61686. $ctx1.sendIdx["collection"]=2;
  61687. //>>excludeEnd("ctx");
  61688. $4=$recv($5)._detect_ifNone_((function(){
  61689. return false;
  61690. }),(function(){
  61691. return sentinel;
  61692. }));
  61693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61694. $ctx1.sendIdx["detect:ifNone:"]=2;
  61695. //>>excludeEnd("ctx");
  61696. self._assert_equals_($4,sentinel);
  61697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61698. $ctx1.sendIdx["assert:equals:"]=1;
  61699. //>>excludeEnd("ctx");
  61700. $6=$recv(self._sampleNewValueAsCollection())._detect_ifNone_((function(){
  61701. return true;
  61702. }),(function(){
  61703. return sentinel;
  61704. }));
  61705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61706. $ctx1.sendIdx["detect:ifNone:"]=3;
  61707. //>>excludeEnd("ctx");
  61708. $7=self._sampleNewValue();
  61709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61710. $ctx1.sendIdx["sampleNewValue"]=1;
  61711. //>>excludeEnd("ctx");
  61712. self._assert_equals_($6,$7);
  61713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61714. $ctx1.sendIdx["assert:equals:"]=2;
  61715. //>>excludeEnd("ctx");
  61716. $8=$recv(self._collectionWithNewValue())._detect_ifNone_((function(each){
  61717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61718. return $core.withContext(function($ctx2) {
  61719. //>>excludeEnd("ctx");
  61720. $9=self._sampleNewValue();
  61721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61722. $ctx2.sendIdx["sampleNewValue"]=2;
  61723. //>>excludeEnd("ctx");
  61724. return $recv(each).__eq($9);
  61725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61726. $ctx2.sendIdx["="]=1;
  61727. //>>excludeEnd("ctx");
  61728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61729. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,7)});
  61730. //>>excludeEnd("ctx");
  61731. }),(function(){
  61732. return sentinel;
  61733. }));
  61734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61735. $ctx1.sendIdx["detect:ifNone:"]=4;
  61736. //>>excludeEnd("ctx");
  61737. $10=self._sampleNewValue();
  61738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61739. $ctx1.sendIdx["sampleNewValue"]=3;
  61740. //>>excludeEnd("ctx");
  61741. self._assert_equals_($8,$10);
  61742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61743. $ctx1.sendIdx["assert:equals:"]=3;
  61744. //>>excludeEnd("ctx");
  61745. self._assert_equals_($recv(self._collection())._detect_ifNone_((function(each){
  61746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61747. return $core.withContext(function($ctx2) {
  61748. //>>excludeEnd("ctx");
  61749. return $recv(each).__eq(self._sampleNewValue());
  61750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61751. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,9)});
  61752. //>>excludeEnd("ctx");
  61753. }),(function(){
  61754. return sentinel;
  61755. })),sentinel);
  61756. return self;
  61757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61758. }, function($ctx1) {$ctx1.fill(self,"testDetectIfNone",{sentinel:sentinel},$globals.CollectionTest)});
  61759. //>>excludeEnd("ctx");
  61760. },
  61761. //>>excludeStart("ide", pragmas.excludeIdeData);
  61762. args: [],
  61763. source: "testDetectIfNone\x0a\x09| sentinel |\x0a\x09sentinel := Object new.\x0a\x09self assert: (self collection detect: [ true ] ifNone: [ sentinel ]) ~= sentinel.\x0a\x09self assert: (self collection detect: [ false ] ifNone: [ sentinel ]) equals: sentinel.\x0a\x09self assert: (self sampleNewValueAsCollection detect: [ true ] ifNone: [ sentinel ]) equals: self sampleNewValue.\x0a\x09self assert: (self collectionWithNewValue detect: [ :each | each = self sampleNewValue ] ifNone: [ sentinel ]) equals: self sampleNewValue.\x0a\x09self assert: (self collection detect: [ :each | each = self sampleNewValue ] ifNone: [ sentinel ]) equals: sentinel",
  61764. referencedClasses: ["Object"],
  61765. //>>excludeEnd("ide");
  61766. messageSends: ["new", "assert:", "~=", "detect:ifNone:", "collection", "assert:equals:", "sampleNewValueAsCollection", "sampleNewValue", "collectionWithNewValue", "="]
  61767. }),
  61768. $globals.CollectionTest);
  61769. $core.addMethod(
  61770. $core.method({
  61771. selector: "testDo",
  61772. protocol: 'tests',
  61773. fn: function (){
  61774. var self=this;
  61775. var newCollection;
  61776. function $OrderedCollection(){return $globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  61777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61778. return $core.withContext(function($ctx1) {
  61779. //>>excludeEnd("ctx");
  61780. var $1,$2;
  61781. newCollection=$recv($OrderedCollection())._new();
  61782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61783. $ctx1.sendIdx["new"]=1;
  61784. //>>excludeEnd("ctx");
  61785. $1=self._collection();
  61786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61787. $ctx1.sendIdx["collection"]=1;
  61788. //>>excludeEnd("ctx");
  61789. $recv($1)._do_((function(each){
  61790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61791. return $core.withContext(function($ctx2) {
  61792. //>>excludeEnd("ctx");
  61793. return $recv(newCollection)._add_(each);
  61794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61795. $ctx2.sendIdx["add:"]=1;
  61796. //>>excludeEnd("ctx");
  61797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61798. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  61799. //>>excludeEnd("ctx");
  61800. }));
  61801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61802. $ctx1.sendIdx["do:"]=1;
  61803. //>>excludeEnd("ctx");
  61804. self._assertSameContents_as_(self._collection(),newCollection);
  61805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61806. $ctx1.sendIdx["assertSameContents:as:"]=1;
  61807. //>>excludeEnd("ctx");
  61808. newCollection=$recv($OrderedCollection())._new();
  61809. $2=self._collectionWithDuplicates();
  61810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61811. $ctx1.sendIdx["collectionWithDuplicates"]=1;
  61812. //>>excludeEnd("ctx");
  61813. $recv($2)._do_((function(each){
  61814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61815. return $core.withContext(function($ctx2) {
  61816. //>>excludeEnd("ctx");
  61817. return $recv(newCollection)._add_(each);
  61818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61819. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  61820. //>>excludeEnd("ctx");
  61821. }));
  61822. self._assertSameContents_as_(self._collectionWithDuplicates(),newCollection);
  61823. return self;
  61824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61825. }, function($ctx1) {$ctx1.fill(self,"testDo",{newCollection:newCollection},$globals.CollectionTest)});
  61826. //>>excludeEnd("ctx");
  61827. },
  61828. //>>excludeStart("ide", pragmas.excludeIdeData);
  61829. args: [],
  61830. source: "testDo\x0a\x09| newCollection |\x0a\x09newCollection := OrderedCollection new.\x0a\x09self collection do: [ :each |\x0a\x09\x09newCollection add: each ].\x0a\x09self\x0a\x09\x09assertSameContents: self collection\x0a\x09\x09as: newCollection.\x0a\x09newCollection := OrderedCollection new.\x0a\x09self collectionWithDuplicates do: [ :each |\x0a\x09\x09newCollection add: each ].\x0a\x09self\x0a\x09\x09assertSameContents: self collectionWithDuplicates\x0a\x09\x09as: newCollection",
  61831. referencedClasses: ["OrderedCollection"],
  61832. //>>excludeEnd("ide");
  61833. messageSends: ["new", "do:", "collection", "add:", "assertSameContents:as:", "collectionWithDuplicates"]
  61834. }),
  61835. $globals.CollectionTest);
  61836. $core.addMethod(
  61837. $core.method({
  61838. selector: "testIfEmptyFamily",
  61839. protocol: 'tests',
  61840. fn: function (){
  61841. var self=this;
  61842. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61843. return $core.withContext(function($ctx1) {
  61844. //>>excludeEnd("ctx");
  61845. var $3,$2,$1,$5,$4,$6,$9,$8,$7,$11,$10,$13,$12,$15,$14,$16,$19,$18,$17,$21,$20,$23,$22,$24,$25,$27,$26,$29,$28;
  61846. $3=self._collectionClass();
  61847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61848. $ctx1.sendIdx["collectionClass"]=1;
  61849. //>>excludeEnd("ctx");
  61850. $2=$recv($3)._new();
  61851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61852. $ctx1.sendIdx["new"]=1;
  61853. //>>excludeEnd("ctx");
  61854. $1=$recv($2)._ifEmpty_((function(){
  61855. return (42);
  61856. }));
  61857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61858. $ctx1.sendIdx["ifEmpty:"]=1;
  61859. //>>excludeEnd("ctx");
  61860. self._assert_equals_($1,(42));
  61861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61862. $ctx1.sendIdx["assert:equals:"]=1;
  61863. //>>excludeEnd("ctx");
  61864. $5=self._collection();
  61865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61866. $ctx1.sendIdx["collection"]=1;
  61867. //>>excludeEnd("ctx");
  61868. $4=$recv($5)._ifEmpty_((function(){
  61869. return (42);
  61870. }));
  61871. $6=self._collection();
  61872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61873. $ctx1.sendIdx["collection"]=2;
  61874. //>>excludeEnd("ctx");
  61875. self._assert_equals_($4,$6);
  61876. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61877. $ctx1.sendIdx["assert:equals:"]=2;
  61878. //>>excludeEnd("ctx");
  61879. $9=self._collectionClass();
  61880. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61881. $ctx1.sendIdx["collectionClass"]=2;
  61882. //>>excludeEnd("ctx");
  61883. $8=$recv($9)._new();
  61884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61885. $ctx1.sendIdx["new"]=2;
  61886. //>>excludeEnd("ctx");
  61887. $7=$recv($8)._ifNotEmpty_((function(){
  61888. return (42);
  61889. }));
  61890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61891. $ctx1.sendIdx["ifNotEmpty:"]=1;
  61892. //>>excludeEnd("ctx");
  61893. $11=self._collectionClass();
  61894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61895. $ctx1.sendIdx["collectionClass"]=3;
  61896. //>>excludeEnd("ctx");
  61897. $10=$recv($11)._new();
  61898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61899. $ctx1.sendIdx["new"]=3;
  61900. //>>excludeEnd("ctx");
  61901. self._assert_equals_($7,$10);
  61902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61903. $ctx1.sendIdx["assert:equals:"]=3;
  61904. //>>excludeEnd("ctx");
  61905. $13=self._collection();
  61906. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61907. $ctx1.sendIdx["collection"]=3;
  61908. //>>excludeEnd("ctx");
  61909. $12=$recv($13)._ifNotEmpty_((function(){
  61910. return (42);
  61911. }));
  61912. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61913. $ctx1.sendIdx["ifNotEmpty:"]=2;
  61914. //>>excludeEnd("ctx");
  61915. self._assert_equals_($12,(42));
  61916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61917. $ctx1.sendIdx["assert:equals:"]=4;
  61918. //>>excludeEnd("ctx");
  61919. $15=self._collection();
  61920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61921. $ctx1.sendIdx["collection"]=4;
  61922. //>>excludeEnd("ctx");
  61923. $14=$recv($15)._ifNotEmpty_((function(col){
  61924. return col;
  61925. }));
  61926. $16=self._collection();
  61927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61928. $ctx1.sendIdx["collection"]=5;
  61929. //>>excludeEnd("ctx");
  61930. self._assert_equals_($14,$16);
  61931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61932. $ctx1.sendIdx["assert:equals:"]=5;
  61933. //>>excludeEnd("ctx");
  61934. $19=self._collectionClass();
  61935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61936. $ctx1.sendIdx["collectionClass"]=4;
  61937. //>>excludeEnd("ctx");
  61938. $18=$recv($19)._new();
  61939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61940. $ctx1.sendIdx["new"]=4;
  61941. //>>excludeEnd("ctx");
  61942. $17=$recv($18)._ifEmpty_ifNotEmpty_((function(){
  61943. return (42);
  61944. }),(function(){
  61945. return (999);
  61946. }));
  61947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61948. $ctx1.sendIdx["ifEmpty:ifNotEmpty:"]=1;
  61949. //>>excludeEnd("ctx");
  61950. self._assert_equals_($17,(42));
  61951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61952. $ctx1.sendIdx["assert:equals:"]=6;
  61953. //>>excludeEnd("ctx");
  61954. $21=self._collection();
  61955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61956. $ctx1.sendIdx["collection"]=6;
  61957. //>>excludeEnd("ctx");
  61958. $20=$recv($21)._ifEmpty_ifNotEmpty_((function(){
  61959. return (42);
  61960. }),(function(){
  61961. return (999);
  61962. }));
  61963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61964. $ctx1.sendIdx["ifEmpty:ifNotEmpty:"]=2;
  61965. //>>excludeEnd("ctx");
  61966. self._assert_equals_($20,(999));
  61967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61968. $ctx1.sendIdx["assert:equals:"]=7;
  61969. //>>excludeEnd("ctx");
  61970. $23=self._collection();
  61971. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61972. $ctx1.sendIdx["collection"]=7;
  61973. //>>excludeEnd("ctx");
  61974. $22=$recv($23)._ifEmpty_ifNotEmpty_((function(){
  61975. return (42);
  61976. }),(function(col){
  61977. return col;
  61978. }));
  61979. $24=self._collection();
  61980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61981. $ctx1.sendIdx["collection"]=8;
  61982. //>>excludeEnd("ctx");
  61983. self._assert_equals_($22,$24);
  61984. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61985. $ctx1.sendIdx["assert:equals:"]=8;
  61986. //>>excludeEnd("ctx");
  61987. $25=$recv($recv(self._collectionClass())._new())._ifNotEmpty_ifEmpty_((function(){
  61988. return (42);
  61989. }),(function(){
  61990. return (999);
  61991. }));
  61992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61993. $ctx1.sendIdx["ifNotEmpty:ifEmpty:"]=1;
  61994. //>>excludeEnd("ctx");
  61995. self._assert_equals_($25,(999));
  61996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  61997. $ctx1.sendIdx["assert:equals:"]=9;
  61998. //>>excludeEnd("ctx");
  61999. $27=self._collection();
  62000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62001. $ctx1.sendIdx["collection"]=9;
  62002. //>>excludeEnd("ctx");
  62003. $26=$recv($27)._ifNotEmpty_ifEmpty_((function(){
  62004. return (42);
  62005. }),(function(){
  62006. return (999);
  62007. }));
  62008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62009. $ctx1.sendIdx["ifNotEmpty:ifEmpty:"]=2;
  62010. //>>excludeEnd("ctx");
  62011. self._assert_equals_($26,(42));
  62012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62013. $ctx1.sendIdx["assert:equals:"]=10;
  62014. //>>excludeEnd("ctx");
  62015. $29=self._collection();
  62016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62017. $ctx1.sendIdx["collection"]=10;
  62018. //>>excludeEnd("ctx");
  62019. $28=$recv($29)._ifNotEmpty_ifEmpty_((function(col){
  62020. return col;
  62021. }),(function(){
  62022. return (999);
  62023. }));
  62024. self._assert_equals_($28,self._collection());
  62025. return self;
  62026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62027. }, function($ctx1) {$ctx1.fill(self,"testIfEmptyFamily",{},$globals.CollectionTest)});
  62028. //>>excludeEnd("ctx");
  62029. },
  62030. //>>excludeStart("ide", pragmas.excludeIdeData);
  62031. args: [],
  62032. source: "testIfEmptyFamily\x0a\x09self assert: (self collectionClass new ifEmpty: [ 42 ]) equals: 42.\x0a\x09self assert: (self collection ifEmpty: [ 42 ]) equals: self collection.\x0a\x0a\x09self assert: (self collectionClass new ifNotEmpty: [ 42 ]) equals: self collectionClass new.\x0a\x09self assert: (self collection ifNotEmpty: [ 42 ]) equals: 42.\x0a\x09self assert: (self collection ifNotEmpty: [ :col | col ]) equals: self collection.\x0a\x09\x0a\x09self assert: (self collectionClass new ifEmpty: [ 42 ] ifNotEmpty: [ 999 ]) equals: 42.\x0a\x09self assert: (self collection ifEmpty: [ 42 ] ifNotEmpty: [ 999 ]) equals: 999.\x0a\x09self assert: (self collection ifEmpty: [ 42 ] ifNotEmpty: [ :col | col ]) equals: self collection.\x0a\x0a\x09self assert: (self collectionClass new ifNotEmpty: [ 42 ] ifEmpty: [ 999 ]) equals: 999.\x0a\x09self assert: (self collection ifNotEmpty: [ 42 ] ifEmpty: [ 999 ]) equals: 42.\x0a\x09self assert: (self collection ifNotEmpty: [ :col | col ] ifEmpty: [ 999 ]) equals: self collection.",
  62033. referencedClasses: [],
  62034. //>>excludeEnd("ide");
  62035. messageSends: ["assert:equals:", "ifEmpty:", "new", "collectionClass", "collection", "ifNotEmpty:", "ifEmpty:ifNotEmpty:", "ifNotEmpty:ifEmpty:"]
  62036. }),
  62037. $globals.CollectionTest);
  62038. $core.addMethod(
  62039. $core.method({
  62040. selector: "testIsEmpty",
  62041. protocol: 'tests',
  62042. fn: function (){
  62043. var self=this;
  62044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62045. return $core.withContext(function($ctx1) {
  62046. //>>excludeEnd("ctx");
  62047. var $1;
  62048. $1=$recv($recv(self._collectionClass())._new())._isEmpty();
  62049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62050. $ctx1.sendIdx["isEmpty"]=1;
  62051. //>>excludeEnd("ctx");
  62052. self._assert_($1);
  62053. self._deny_($recv(self._collection())._isEmpty());
  62054. return self;
  62055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62056. }, function($ctx1) {$ctx1.fill(self,"testIsEmpty",{},$globals.CollectionTest)});
  62057. //>>excludeEnd("ctx");
  62058. },
  62059. //>>excludeStart("ide", pragmas.excludeIdeData);
  62060. args: [],
  62061. source: "testIsEmpty\x0a\x09self assert: self collectionClass new isEmpty.\x0a\x09self deny: self collection isEmpty",
  62062. referencedClasses: [],
  62063. //>>excludeEnd("ide");
  62064. messageSends: ["assert:", "isEmpty", "new", "collectionClass", "deny:", "collection"]
  62065. }),
  62066. $globals.CollectionTest);
  62067. $core.addMethod(
  62068. $core.method({
  62069. selector: "testNoneSatisfy",
  62070. protocol: 'tests',
  62071. fn: function (){
  62072. var self=this;
  62073. var anyOne;
  62074. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  62075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62076. return $core.withContext(function($ctx1) {
  62077. //>>excludeEnd("ctx");
  62078. var $1,$3,$2;
  62079. $1=self._collection();
  62080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62081. $ctx1.sendIdx["collection"]=1;
  62082. //>>excludeEnd("ctx");
  62083. anyOne=$recv($1)._anyOne();
  62084. $3=self._collection();
  62085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62086. $ctx1.sendIdx["collection"]=2;
  62087. //>>excludeEnd("ctx");
  62088. $2=$recv($3)._noneSatisfy_((function(each){
  62089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62090. return $core.withContext(function($ctx2) {
  62091. //>>excludeEnd("ctx");
  62092. return $recv(each).__eq(anyOne);
  62093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62094. $ctx2.sendIdx["="]=1;
  62095. //>>excludeEnd("ctx");
  62096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62097. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62098. //>>excludeEnd("ctx");
  62099. }));
  62100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62101. $ctx1.sendIdx["noneSatisfy:"]=1;
  62102. //>>excludeEnd("ctx");
  62103. self._deny_($2);
  62104. self._assert_($recv(self._collection())._noneSatisfy_((function(each){
  62105. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62106. return $core.withContext(function($ctx2) {
  62107. //>>excludeEnd("ctx");
  62108. return $recv(each).__eq($recv($Object())._new());
  62109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62110. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  62111. //>>excludeEnd("ctx");
  62112. })));
  62113. return self;
  62114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62115. }, function($ctx1) {$ctx1.fill(self,"testNoneSatisfy",{anyOne:anyOne},$globals.CollectionTest)});
  62116. //>>excludeEnd("ctx");
  62117. },
  62118. //>>excludeStart("ide", pragmas.excludeIdeData);
  62119. args: [],
  62120. source: "testNoneSatisfy\x0a\x09| anyOne |\x0a\x09anyOne := self collection anyOne.\x0a\x09self deny: (self collection noneSatisfy: [ :each | each = anyOne ]).\x0a\x09self assert: (self collection noneSatisfy: [ :each | each = Object new ])",
  62121. referencedClasses: ["Object"],
  62122. //>>excludeEnd("ide");
  62123. messageSends: ["anyOne", "collection", "deny:", "noneSatisfy:", "=", "assert:", "new"]
  62124. }),
  62125. $globals.CollectionTest);
  62126. $core.addMethod(
  62127. $core.method({
  62128. selector: "testRemoveAll",
  62129. protocol: 'tests',
  62130. fn: function (){
  62131. var self=this;
  62132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62133. return $core.withContext(function($ctx1) {
  62134. //>>excludeEnd("ctx");
  62135. var $1,$2;
  62136. $1=self._collection();
  62137. $recv($1)._removeAll();
  62138. $2=$recv($1)._yourself();
  62139. self._assert_equals_($2,$recv(self._collectionClass())._new());
  62140. return self;
  62141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62142. }, function($ctx1) {$ctx1.fill(self,"testRemoveAll",{},$globals.CollectionTest)});
  62143. //>>excludeEnd("ctx");
  62144. },
  62145. //>>excludeStart("ide", pragmas.excludeIdeData);
  62146. args: [],
  62147. source: "testRemoveAll\x0a\x09self assert: (self collection removeAll; yourself) equals: self collectionClass new",
  62148. referencedClasses: [],
  62149. //>>excludeEnd("ide");
  62150. messageSends: ["assert:equals:", "removeAll", "collection", "yourself", "new", "collectionClass"]
  62151. }),
  62152. $globals.CollectionTest);
  62153. $core.addMethod(
  62154. $core.method({
  62155. selector: "testSelect",
  62156. protocol: 'tests',
  62157. fn: function (){
  62158. var self=this;
  62159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62160. return $core.withContext(function($ctx1) {
  62161. //>>excludeEnd("ctx");
  62162. var $2,$1,$4,$3,$6,$5,$7,$9,$10,$8,$12,$13,$11,$14,$16,$17,$15;
  62163. $2=self._collection();
  62164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62165. $ctx1.sendIdx["collection"]=1;
  62166. //>>excludeEnd("ctx");
  62167. $1=$recv($2)._select_((function(){
  62168. return false;
  62169. }));
  62170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62171. $ctx1.sendIdx["select:"]=1;
  62172. //>>excludeEnd("ctx");
  62173. $4=self._collectionClass();
  62174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62175. $ctx1.sendIdx["collectionClass"]=1;
  62176. //>>excludeEnd("ctx");
  62177. $3=$recv($4)._new();
  62178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62179. $ctx1.sendIdx["new"]=1;
  62180. //>>excludeEnd("ctx");
  62181. self._assert_equals_($1,$3);
  62182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62183. $ctx1.sendIdx["assert:equals:"]=1;
  62184. //>>excludeEnd("ctx");
  62185. $6=self._collection();
  62186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62187. $ctx1.sendIdx["collection"]=2;
  62188. //>>excludeEnd("ctx");
  62189. $5=$recv($6)._select_((function(){
  62190. return true;
  62191. }));
  62192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62193. $ctx1.sendIdx["select:"]=2;
  62194. //>>excludeEnd("ctx");
  62195. $7=self._collection();
  62196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62197. $ctx1.sendIdx["collection"]=3;
  62198. //>>excludeEnd("ctx");
  62199. self._assert_equals_($5,$7);
  62200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62201. $ctx1.sendIdx["assert:equals:"]=2;
  62202. //>>excludeEnd("ctx");
  62203. $9=self._collectionWithNewValue();
  62204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62205. $ctx1.sendIdx["collectionWithNewValue"]=1;
  62206. //>>excludeEnd("ctx");
  62207. $8=$recv($9)._select_((function(each){
  62208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62209. return $core.withContext(function($ctx2) {
  62210. //>>excludeEnd("ctx");
  62211. $10=self._sampleNewValue();
  62212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62213. $ctx2.sendIdx["sampleNewValue"]=1;
  62214. //>>excludeEnd("ctx");
  62215. return $recv(each).__eq($10);
  62216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62217. $ctx2.sendIdx["="]=1;
  62218. //>>excludeEnd("ctx");
  62219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62220. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  62221. //>>excludeEnd("ctx");
  62222. }));
  62223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62224. $ctx1.sendIdx["select:"]=3;
  62225. //>>excludeEnd("ctx");
  62226. self._assert_equals_($8,self._sampleNewValueAsCollection());
  62227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62228. $ctx1.sendIdx["assert:equals:"]=3;
  62229. //>>excludeEnd("ctx");
  62230. $12=self._collectionWithNewValue();
  62231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62232. $ctx1.sendIdx["collectionWithNewValue"]=2;
  62233. //>>excludeEnd("ctx");
  62234. $11=$recv($12)._select_((function(each){
  62235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62236. return $core.withContext(function($ctx2) {
  62237. //>>excludeEnd("ctx");
  62238. $13=self._sampleNewValue();
  62239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62240. $ctx2.sendIdx["sampleNewValue"]=2;
  62241. //>>excludeEnd("ctx");
  62242. return $recv(each).__tild_eq($13);
  62243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62244. $ctx2.sendIdx["~="]=1;
  62245. //>>excludeEnd("ctx");
  62246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62247. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,4)});
  62248. //>>excludeEnd("ctx");
  62249. }));
  62250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62251. $ctx1.sendIdx["select:"]=4;
  62252. //>>excludeEnd("ctx");
  62253. $14=self._collection();
  62254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62255. $ctx1.sendIdx["collection"]=4;
  62256. //>>excludeEnd("ctx");
  62257. self._assert_equals_($11,$14);
  62258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62259. $ctx1.sendIdx["assert:equals:"]=4;
  62260. //>>excludeEnd("ctx");
  62261. $16=self._collection();
  62262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62263. $ctx1.sendIdx["collection"]=5;
  62264. //>>excludeEnd("ctx");
  62265. $15=$recv($16)._select_((function(each){
  62266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62267. return $core.withContext(function($ctx2) {
  62268. //>>excludeEnd("ctx");
  62269. $17=self._sampleNewValue();
  62270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62271. $ctx2.sendIdx["sampleNewValue"]=3;
  62272. //>>excludeEnd("ctx");
  62273. return $recv(each).__eq($17);
  62274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62275. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,5)});
  62276. //>>excludeEnd("ctx");
  62277. }));
  62278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62279. $ctx1.sendIdx["select:"]=5;
  62280. //>>excludeEnd("ctx");
  62281. self._assert_equals_($15,$recv(self._collectionClass())._new());
  62282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62283. $ctx1.sendIdx["assert:equals:"]=5;
  62284. //>>excludeEnd("ctx");
  62285. self._assert_equals_($recv(self._collectionWithNewValue())._select_((function(each){
  62286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62287. return $core.withContext(function($ctx2) {
  62288. //>>excludeEnd("ctx");
  62289. return $recv(each).__tild_eq(self._sampleNewValue());
  62290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62291. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,6)});
  62292. //>>excludeEnd("ctx");
  62293. })),self._collection());
  62294. return self;
  62295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62296. }, function($ctx1) {$ctx1.fill(self,"testSelect",{},$globals.CollectionTest)});
  62297. //>>excludeEnd("ctx");
  62298. },
  62299. //>>excludeStart("ide", pragmas.excludeIdeData);
  62300. args: [],
  62301. source: "testSelect\x0a\x09self assert: (self collection select: [ false ]) equals: self collectionClass new.\x0a\x09self assert: (self collection select: [ true ]) equals: self collection.\x0a\x09self assert: (self collectionWithNewValue select: [ :each | each = self sampleNewValue ]) equals: self sampleNewValueAsCollection.\x0a\x09self assert: (self collectionWithNewValue select: [ :each | each ~= self sampleNewValue ]) equals: self collection.\x0a\x09self assert: (self collection select: [ :each | each = self sampleNewValue ]) equals: self collectionClass new.\x0a\x09self assert: (self collectionWithNewValue select: [ :each | each ~= self sampleNewValue ]) equals: self collection",
  62302. referencedClasses: [],
  62303. //>>excludeEnd("ide");
  62304. messageSends: ["assert:equals:", "select:", "collection", "new", "collectionClass", "collectionWithNewValue", "=", "sampleNewValue", "sampleNewValueAsCollection", "~="]
  62305. }),
  62306. $globals.CollectionTest);
  62307. $core.addMethod(
  62308. $core.method({
  62309. selector: "testSize",
  62310. protocol: 'tests',
  62311. fn: function (){
  62312. var self=this;
  62313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62314. return $core.withContext(function($ctx1) {
  62315. //>>excludeEnd("ctx");
  62316. var $1,$2;
  62317. $1=$recv($recv(self._collectionClass())._new())._size();
  62318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62319. $ctx1.sendIdx["size"]=1;
  62320. //>>excludeEnd("ctx");
  62321. self._assert_equals_($1,(0));
  62322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62323. $ctx1.sendIdx["assert:equals:"]=1;
  62324. //>>excludeEnd("ctx");
  62325. $2=$recv(self._sampleNewValueAsCollection())._size();
  62326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62327. $ctx1.sendIdx["size"]=2;
  62328. //>>excludeEnd("ctx");
  62329. self._assert_equals_($2,(1));
  62330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62331. $ctx1.sendIdx["assert:equals:"]=2;
  62332. //>>excludeEnd("ctx");
  62333. self._assert_equals_($recv(self._collection())._size(),self._collectionSize());
  62334. return self;
  62335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62336. }, function($ctx1) {$ctx1.fill(self,"testSize",{},$globals.CollectionTest)});
  62337. //>>excludeEnd("ctx");
  62338. },
  62339. //>>excludeStart("ide", pragmas.excludeIdeData);
  62340. args: [],
  62341. source: "testSize\x0a\x09self assert: self collectionClass new size equals: 0.\x0a\x09self assert: self sampleNewValueAsCollection size equals: 1.\x0a\x09self assert: self collection size equals: self collectionSize",
  62342. referencedClasses: [],
  62343. //>>excludeEnd("ide");
  62344. messageSends: ["assert:equals:", "size", "new", "collectionClass", "sampleNewValueAsCollection", "collection", "collectionSize"]
  62345. }),
  62346. $globals.CollectionTest);
  62347. $core.addMethod(
  62348. $core.method({
  62349. selector: "collectionClass",
  62350. protocol: 'fixture',
  62351. fn: function (){
  62352. var self=this;
  62353. return nil;
  62354. },
  62355. //>>excludeStart("ide", pragmas.excludeIdeData);
  62356. args: [],
  62357. source: "collectionClass\x0a\x09\x22Answers class of collection type tested,\x0a\x09or nil if test is abstract\x22\x0a\x0a\x09^ nil",
  62358. referencedClasses: [],
  62359. //>>excludeEnd("ide");
  62360. messageSends: []
  62361. }),
  62362. $globals.CollectionTest.klass);
  62363. $core.addMethod(
  62364. $core.method({
  62365. selector: "isAbstract",
  62366. protocol: 'testing',
  62367. fn: function (){
  62368. var self=this;
  62369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62370. return $core.withContext(function($ctx1) {
  62371. //>>excludeEnd("ctx");
  62372. var $1;
  62373. $1=$recv(self._collectionClass())._isNil();
  62374. return $1;
  62375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62376. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.CollectionTest.klass)});
  62377. //>>excludeEnd("ctx");
  62378. },
  62379. //>>excludeStart("ide", pragmas.excludeIdeData);
  62380. args: [],
  62381. source: "isAbstract\x0a\x09^ self collectionClass isNil",
  62382. referencedClasses: [],
  62383. //>>excludeEnd("ide");
  62384. messageSends: ["isNil", "collectionClass"]
  62385. }),
  62386. $globals.CollectionTest.klass);
  62387. $core.addClass('IndexableCollectionTest', $globals.CollectionTest, [], 'Kernel-Tests');
  62388. $core.addMethod(
  62389. $core.method({
  62390. selector: "collectionWithNewValue",
  62391. protocol: 'fixture',
  62392. fn: function (){
  62393. var self=this;
  62394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62395. return $core.withContext(function($ctx1) {
  62396. //>>excludeEnd("ctx");
  62397. self._subclassResponsibility();
  62398. return self;
  62399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62400. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.IndexableCollectionTest)});
  62401. //>>excludeEnd("ctx");
  62402. },
  62403. //>>excludeStart("ide", pragmas.excludeIdeData);
  62404. args: [],
  62405. source: "collectionWithNewValue\x0a\x09\x22Answers a collection which shows how\x0a\x09self collection would look after adding\x0a\x09self sampleNewValue at self sampleNewIndex\x22\x0a\x09\x0a\x09self subclassResponsibility",
  62406. referencedClasses: [],
  62407. //>>excludeEnd("ide");
  62408. messageSends: ["subclassResponsibility"]
  62409. }),
  62410. $globals.IndexableCollectionTest);
  62411. $core.addMethod(
  62412. $core.method({
  62413. selector: "sampleNewIndex",
  62414. protocol: 'fixture',
  62415. fn: function (){
  62416. var self=this;
  62417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62418. return $core.withContext(function($ctx1) {
  62419. //>>excludeEnd("ctx");
  62420. self._subclassResponsibility();
  62421. return self;
  62422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62423. }, function($ctx1) {$ctx1.fill(self,"sampleNewIndex",{},$globals.IndexableCollectionTest)});
  62424. //>>excludeEnd("ctx");
  62425. },
  62426. //>>excludeStart("ide", pragmas.excludeIdeData);
  62427. args: [],
  62428. source: "sampleNewIndex\x0a\x09\x22Answers a value that can be used as index in at:put: or at:ifAbsentPut:\x22\x0a\x09\x0a\x09self subclassResponsibility",
  62429. referencedClasses: [],
  62430. //>>excludeEnd("ide");
  62431. messageSends: ["subclassResponsibility"]
  62432. }),
  62433. $globals.IndexableCollectionTest);
  62434. $core.addMethod(
  62435. $core.method({
  62436. selector: "sampleNonIndexesDo:",
  62437. protocol: 'fixture',
  62438. fn: function (aBlock){
  62439. var self=this;
  62440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62441. return $core.withContext(function($ctx1) {
  62442. //>>excludeEnd("ctx");
  62443. self._subclassResponsibility();
  62444. return self;
  62445. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62446. }, function($ctx1) {$ctx1.fill(self,"sampleNonIndexesDo:",{aBlock:aBlock},$globals.IndexableCollectionTest)});
  62447. //>>excludeEnd("ctx");
  62448. },
  62449. //>>excludeStart("ide", pragmas.excludeIdeData);
  62450. args: ["aBlock"],
  62451. source: "sampleNonIndexesDo: aBlock\x0a\x09\x22Executes block a few times,\x0a\x09each time passing value that is known\x0a\x09not to be an index, as the first parameter\x22\x0a\x09\x0a\x09self subclassResponsibility",
  62452. referencedClasses: [],
  62453. //>>excludeEnd("ide");
  62454. messageSends: ["subclassResponsibility"]
  62455. }),
  62456. $globals.IndexableCollectionTest);
  62457. $core.addMethod(
  62458. $core.method({
  62459. selector: "samplesDo:",
  62460. protocol: 'fixture',
  62461. fn: function (aBlock){
  62462. var self=this;
  62463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62464. return $core.withContext(function($ctx1) {
  62465. //>>excludeEnd("ctx");
  62466. self._subclassResponsibility();
  62467. return self;
  62468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62469. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.IndexableCollectionTest)});
  62470. //>>excludeEnd("ctx");
  62471. },
  62472. //>>excludeStart("ide", pragmas.excludeIdeData);
  62473. args: ["aBlock"],
  62474. source: "samplesDo: aBlock\x0a\x09\x22Executes block a few times,\x0a\x09each time passing known index and value stored\x0a\x09under that index as the parameters\x22\x0a\x09\x0a\x09self subclassResponsibility",
  62475. referencedClasses: [],
  62476. //>>excludeEnd("ide");
  62477. messageSends: ["subclassResponsibility"]
  62478. }),
  62479. $globals.IndexableCollectionTest);
  62480. $core.addMethod(
  62481. $core.method({
  62482. selector: "testAt",
  62483. protocol: 'tests',
  62484. fn: function (){
  62485. var self=this;
  62486. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  62487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62488. return $core.withContext(function($ctx1) {
  62489. //>>excludeEnd("ctx");
  62490. var $1;
  62491. self._nonIndexesDo_((function(each){
  62492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62493. return $core.withContext(function($ctx2) {
  62494. //>>excludeEnd("ctx");
  62495. return self._should_raise_((function(){
  62496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62497. return $core.withContext(function($ctx3) {
  62498. //>>excludeEnd("ctx");
  62499. $1=self._collection();
  62500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62501. $ctx3.sendIdx["collection"]=1;
  62502. //>>excludeEnd("ctx");
  62503. return $recv($1)._at_(each);
  62504. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62505. $ctx3.sendIdx["at:"]=1;
  62506. //>>excludeEnd("ctx");
  62507. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62508. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  62509. //>>excludeEnd("ctx");
  62510. }),$Error());
  62511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62512. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62513. //>>excludeEnd("ctx");
  62514. }));
  62515. self._samplesDo_((function(index,value){
  62516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62517. return $core.withContext(function($ctx2) {
  62518. //>>excludeEnd("ctx");
  62519. return self._assert_equals_($recv(self._collection())._at_(index),value);
  62520. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62521. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  62522. //>>excludeEnd("ctx");
  62523. }));
  62524. return self;
  62525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62526. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.IndexableCollectionTest)});
  62527. //>>excludeEnd("ctx");
  62528. },
  62529. //>>excludeStart("ide", pragmas.excludeIdeData);
  62530. args: [],
  62531. source: "testAt\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09self should: [ self collection at: each ] raise: Error ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (self collection at: index) equals: value ]",
  62532. referencedClasses: ["Error"],
  62533. //>>excludeEnd("ide");
  62534. messageSends: ["nonIndexesDo:", "should:raise:", "at:", "collection", "samplesDo:", "assert:equals:"]
  62535. }),
  62536. $globals.IndexableCollectionTest);
  62537. $core.addMethod(
  62538. $core.method({
  62539. selector: "testAtIfAbsent",
  62540. protocol: 'tests',
  62541. fn: function (){
  62542. var self=this;
  62543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62544. return $core.withContext(function($ctx1) {
  62545. //>>excludeEnd("ctx");
  62546. var $2,$1,$3;
  62547. self._nonIndexesDo_((function(each){
  62548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62549. return $core.withContext(function($ctx2) {
  62550. //>>excludeEnd("ctx");
  62551. $2=self._collection();
  62552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62553. $ctx2.sendIdx["collection"]=1;
  62554. //>>excludeEnd("ctx");
  62555. $1=$recv($2)._at_ifAbsent_(each,(function(){
  62556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62557. return $core.withContext(function($ctx3) {
  62558. //>>excludeEnd("ctx");
  62559. return self._sampleNewValue();
  62560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62561. $ctx3.sendIdx["sampleNewValue"]=1;
  62562. //>>excludeEnd("ctx");
  62563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62564. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  62565. //>>excludeEnd("ctx");
  62566. }));
  62567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62568. $ctx2.sendIdx["at:ifAbsent:"]=1;
  62569. //>>excludeEnd("ctx");
  62570. $3=self._sampleNewValue();
  62571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62572. $ctx2.sendIdx["sampleNewValue"]=2;
  62573. //>>excludeEnd("ctx");
  62574. return self._assert_equals_($1,$3);
  62575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62576. $ctx2.sendIdx["assert:equals:"]=1;
  62577. //>>excludeEnd("ctx");
  62578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62579. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62580. //>>excludeEnd("ctx");
  62581. }));
  62582. self._samplesDo_((function(index,value){
  62583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62584. return $core.withContext(function($ctx2) {
  62585. //>>excludeEnd("ctx");
  62586. return self._assert_equals_($recv(self._collection())._at_ifAbsent_(index,(function(){
  62587. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62588. return $core.withContext(function($ctx3) {
  62589. //>>excludeEnd("ctx");
  62590. return self._sampleNewValue();
  62591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62592. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  62593. //>>excludeEnd("ctx");
  62594. })),value);
  62595. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62596. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  62597. //>>excludeEnd("ctx");
  62598. }));
  62599. return self;
  62600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62601. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsent",{},$globals.IndexableCollectionTest)});
  62602. //>>excludeEnd("ctx");
  62603. },
  62604. //>>excludeStart("ide", pragmas.excludeIdeData);
  62605. args: [],
  62606. source: "testAtIfAbsent\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09self assert: (self collection at: each ifAbsent: [ self sampleNewValue ]) equals: self sampleNewValue ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (self collection at: index ifAbsent: [ self sampleNewValue ]) equals: value ].",
  62607. referencedClasses: [],
  62608. //>>excludeEnd("ide");
  62609. messageSends: ["nonIndexesDo:", "assert:equals:", "at:ifAbsent:", "collection", "sampleNewValue", "samplesDo:"]
  62610. }),
  62611. $globals.IndexableCollectionTest);
  62612. $core.addMethod(
  62613. $core.method({
  62614. selector: "testAtIfAbsentPut",
  62615. protocol: 'tests',
  62616. fn: function (){
  62617. var self=this;
  62618. var newCollection;
  62619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62620. return $core.withContext(function($ctx1) {
  62621. //>>excludeEnd("ctx");
  62622. var $1;
  62623. newCollection=self._collection();
  62624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62625. $ctx1.sendIdx["collection"]=1;
  62626. //>>excludeEnd("ctx");
  62627. self._samplesDo_((function(index,value){
  62628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62629. return $core.withContext(function($ctx2) {
  62630. //>>excludeEnd("ctx");
  62631. $1=$recv(newCollection)._at_ifAbsentPut_(index,(function(){
  62632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62633. return $core.withContext(function($ctx3) {
  62634. //>>excludeEnd("ctx");
  62635. return self._sampleNewValue();
  62636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62637. $ctx3.sendIdx["sampleNewValue"]=1;
  62638. //>>excludeEnd("ctx");
  62639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62640. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  62641. //>>excludeEnd("ctx");
  62642. }));
  62643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62644. $ctx2.sendIdx["at:ifAbsentPut:"]=1;
  62645. //>>excludeEnd("ctx");
  62646. return self._assert_equals_($1,value);
  62647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62648. $ctx2.sendIdx["assert:equals:"]=1;
  62649. //>>excludeEnd("ctx");
  62650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62651. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  62652. //>>excludeEnd("ctx");
  62653. }));
  62654. self._assert_equals_(newCollection,self._collection());
  62655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62656. $ctx1.sendIdx["assert:equals:"]=2;
  62657. //>>excludeEnd("ctx");
  62658. self._assert_equals_($recv(newCollection)._at_ifAbsentPut_(self._sampleNewIndex(),(function(){
  62659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62660. return $core.withContext(function($ctx2) {
  62661. //>>excludeEnd("ctx");
  62662. return self._sampleNewValue();
  62663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62664. $ctx2.sendIdx["sampleNewValue"]=2;
  62665. //>>excludeEnd("ctx");
  62666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62667. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  62668. //>>excludeEnd("ctx");
  62669. })),self._sampleNewValue());
  62670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62671. $ctx1.sendIdx["assert:equals:"]=3;
  62672. //>>excludeEnd("ctx");
  62673. self._assert_equals_(newCollection,self._collectionWithNewValue());
  62674. return self;
  62675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62676. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsentPut",{newCollection:newCollection},$globals.IndexableCollectionTest)});
  62677. //>>excludeEnd("ctx");
  62678. },
  62679. //>>excludeStart("ide", pragmas.excludeIdeData);
  62680. args: [],
  62681. source: "testAtIfAbsentPut\x0a\x09| newCollection |\x0a\x09newCollection := self collection.\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (newCollection at: index ifAbsentPut: [ self sampleNewValue ]) equals: value ].\x0a\x09self assert: newCollection equals: self collection.\x0a\x09self assert: (newCollection at: self sampleNewIndex ifAbsentPut: [ self sampleNewValue ]) equals: self sampleNewValue.\x0a\x09self assert: newCollection equals: self collectionWithNewValue",
  62682. referencedClasses: [],
  62683. //>>excludeEnd("ide");
  62684. messageSends: ["collection", "samplesDo:", "assert:equals:", "at:ifAbsentPut:", "sampleNewValue", "sampleNewIndex", "collectionWithNewValue"]
  62685. }),
  62686. $globals.IndexableCollectionTest);
  62687. $core.addMethod(
  62688. $core.method({
  62689. selector: "testAtIfPresent",
  62690. protocol: 'tests',
  62691. fn: function (){
  62692. var self=this;
  62693. var visited,sentinel;
  62694. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  62695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62696. return $core.withContext(function($ctx1) {
  62697. //>>excludeEnd("ctx");
  62698. var $2,$1,$4,$3;
  62699. sentinel=$recv($Object())._new();
  62700. self._nonIndexesDo_((function(each){
  62701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62702. return $core.withContext(function($ctx2) {
  62703. //>>excludeEnd("ctx");
  62704. visited=nil;
  62705. visited;
  62706. $2=self._collection();
  62707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62708. $ctx2.sendIdx["collection"]=1;
  62709. //>>excludeEnd("ctx");
  62710. $1=$recv($2)._at_ifPresent_(each,(function(value1){
  62711. visited=value1;
  62712. visited;
  62713. return sentinel;
  62714. }));
  62715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62716. $ctx2.sendIdx["at:ifPresent:"]=1;
  62717. //>>excludeEnd("ctx");
  62718. self._assert_equals_($1,nil);
  62719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62720. $ctx2.sendIdx["assert:equals:"]=1;
  62721. //>>excludeEnd("ctx");
  62722. return self._assert_($recv(visited)._isNil());
  62723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62724. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62725. //>>excludeEnd("ctx");
  62726. }));
  62727. self._samplesDo_((function(index,value){
  62728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62729. return $core.withContext(function($ctx2) {
  62730. //>>excludeEnd("ctx");
  62731. visited=nil;
  62732. visited;
  62733. $4=self._collection();
  62734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62735. $ctx2.sendIdx["collection"]=2;
  62736. //>>excludeEnd("ctx");
  62737. $3=$recv($4)._at_ifPresent_(index,(function(value2){
  62738. visited=value2;
  62739. visited;
  62740. return sentinel;
  62741. }));
  62742. self._assert_equals_($3,sentinel);
  62743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62744. $ctx2.sendIdx["assert:equals:"]=2;
  62745. //>>excludeEnd("ctx");
  62746. return self._assert_equals_(visited,$recv(self._collection())._at_(index));
  62747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62748. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,3)});
  62749. //>>excludeEnd("ctx");
  62750. }));
  62751. return self;
  62752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62753. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresent",{visited:visited,sentinel:sentinel},$globals.IndexableCollectionTest)});
  62754. //>>excludeEnd("ctx");
  62755. },
  62756. //>>excludeStart("ide", pragmas.excludeIdeData);
  62757. args: [],
  62758. source: "testAtIfPresent\x0a\x09| visited sentinel |\x0a\x09sentinel := Object new.\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09visited := nil.\x0a\x09\x09self assert: (self collection at: each ifPresent: [ :value1 | visited := value1. sentinel ]) equals: nil.\x0a\x09\x09self assert: visited isNil ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09visited := nil.\x0a\x09\x09self assert: (self collection at: index ifPresent: [ :value2 | visited := value2. sentinel ]) equals: sentinel.\x0a\x09\x09self assert: visited equals: (self collection at: index) ]",
  62759. referencedClasses: ["Object"],
  62760. //>>excludeEnd("ide");
  62761. messageSends: ["new", "nonIndexesDo:", "assert:equals:", "at:ifPresent:", "collection", "assert:", "isNil", "samplesDo:", "at:"]
  62762. }),
  62763. $globals.IndexableCollectionTest);
  62764. $core.addMethod(
  62765. $core.method({
  62766. selector: "testAtIfPresentIfAbsent",
  62767. protocol: 'tests',
  62768. fn: function (){
  62769. var self=this;
  62770. var visited,sentinel;
  62771. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  62772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62773. return $core.withContext(function($ctx1) {
  62774. //>>excludeEnd("ctx");
  62775. var $2,$1,$3,$5,$4;
  62776. sentinel=$recv($Object())._new();
  62777. self._nonIndexesDo_((function(each){
  62778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62779. return $core.withContext(function($ctx2) {
  62780. //>>excludeEnd("ctx");
  62781. visited=nil;
  62782. visited;
  62783. $2=self._collection();
  62784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62785. $ctx2.sendIdx["collection"]=1;
  62786. //>>excludeEnd("ctx");
  62787. $1=$recv($2)._at_ifPresent_ifAbsent_(each,(function(value1){
  62788. visited=value1;
  62789. visited;
  62790. return sentinel;
  62791. }),(function(){
  62792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62793. return $core.withContext(function($ctx3) {
  62794. //>>excludeEnd("ctx");
  62795. return self._sampleNewValue();
  62796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62797. $ctx3.sendIdx["sampleNewValue"]=1;
  62798. //>>excludeEnd("ctx");
  62799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62800. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  62801. //>>excludeEnd("ctx");
  62802. }));
  62803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62804. $ctx2.sendIdx["at:ifPresent:ifAbsent:"]=1;
  62805. //>>excludeEnd("ctx");
  62806. $3=self._sampleNewValue();
  62807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62808. $ctx2.sendIdx["sampleNewValue"]=2;
  62809. //>>excludeEnd("ctx");
  62810. self._assert_equals_($1,$3);
  62811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62812. $ctx2.sendIdx["assert:equals:"]=1;
  62813. //>>excludeEnd("ctx");
  62814. return self._assert_($recv(visited)._isNil());
  62815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62816. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  62817. //>>excludeEnd("ctx");
  62818. }));
  62819. self._samplesDo_((function(index,value){
  62820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62821. return $core.withContext(function($ctx2) {
  62822. //>>excludeEnd("ctx");
  62823. visited=nil;
  62824. visited;
  62825. $5=self._collection();
  62826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62827. $ctx2.sendIdx["collection"]=2;
  62828. //>>excludeEnd("ctx");
  62829. $4=$recv($5)._at_ifPresent_ifAbsent_(index,(function(value2){
  62830. visited=value2;
  62831. visited;
  62832. return sentinel;
  62833. }),(function(){
  62834. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62835. return $core.withContext(function($ctx3) {
  62836. //>>excludeEnd("ctx");
  62837. return self._sampleNewValue();
  62838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62839. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,6)});
  62840. //>>excludeEnd("ctx");
  62841. }));
  62842. self._assert_equals_($4,sentinel);
  62843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62844. $ctx2.sendIdx["assert:equals:"]=2;
  62845. //>>excludeEnd("ctx");
  62846. return self._assert_equals_(visited,$recv(self._collection())._at_(index));
  62847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62848. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,4)});
  62849. //>>excludeEnd("ctx");
  62850. }));
  62851. return self;
  62852. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62853. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresentIfAbsent",{visited:visited,sentinel:sentinel},$globals.IndexableCollectionTest)});
  62854. //>>excludeEnd("ctx");
  62855. },
  62856. //>>excludeStart("ide", pragmas.excludeIdeData);
  62857. args: [],
  62858. source: "testAtIfPresentIfAbsent\x0a\x09| visited sentinel |\x0a\x09sentinel := Object new.\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09visited := nil.\x0a\x09\x09self assert: (self collection at: each ifPresent: [ :value1 | visited := value1. sentinel ] ifAbsent: [ self sampleNewValue ] ) equals: self sampleNewValue.\x0a\x09\x09self assert: visited isNil ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09visited := nil.\x0a\x09\x09self assert: (self collection at: index ifPresent: [ :value2 | visited := value2. sentinel ] ifAbsent: [ self sampleNewValue ]) equals: sentinel.\x0a\x09\x09self assert: visited equals: (self collection at: index) ]",
  62859. referencedClasses: ["Object"],
  62860. //>>excludeEnd("ide");
  62861. messageSends: ["new", "nonIndexesDo:", "assert:equals:", "at:ifPresent:ifAbsent:", "collection", "sampleNewValue", "assert:", "isNil", "samplesDo:", "at:"]
  62862. }),
  62863. $globals.IndexableCollectionTest);
  62864. $core.addMethod(
  62865. $core.method({
  62866. selector: "testAtPut",
  62867. protocol: 'tests',
  62868. fn: function (){
  62869. var self=this;
  62870. var newCollection;
  62871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62872. return $core.withContext(function($ctx1) {
  62873. //>>excludeEnd("ctx");
  62874. newCollection=self._collection();
  62875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62876. $ctx1.sendIdx["collection"]=1;
  62877. //>>excludeEnd("ctx");
  62878. self._samplesDo_((function(index,value){
  62879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62880. return $core.withContext(function($ctx2) {
  62881. //>>excludeEnd("ctx");
  62882. return $recv(newCollection)._at_put_(index,value);
  62883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62884. $ctx2.sendIdx["at:put:"]=1;
  62885. //>>excludeEnd("ctx");
  62886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62887. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  62888. //>>excludeEnd("ctx");
  62889. }));
  62890. self._assert_equals_(newCollection,self._collection());
  62891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62892. $ctx1.sendIdx["assert:equals:"]=1;
  62893. //>>excludeEnd("ctx");
  62894. $recv(newCollection)._at_put_(self._sampleNewIndex(),self._sampleNewValue());
  62895. self._assert_equals_(newCollection,self._collectionWithNewValue());
  62896. return self;
  62897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62898. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{newCollection:newCollection},$globals.IndexableCollectionTest)});
  62899. //>>excludeEnd("ctx");
  62900. },
  62901. //>>excludeStart("ide", pragmas.excludeIdeData);
  62902. args: [],
  62903. source: "testAtPut\x0a\x09| newCollection |\x0a\x09newCollection := self collection.\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09newCollection at: index put: value ].\x0a\x09self assert: newCollection equals: self collection.\x0a\x09newCollection at: self sampleNewIndex put: self sampleNewValue.\x0a\x09self assert: newCollection equals: self collectionWithNewValue",
  62904. referencedClasses: [],
  62905. //>>excludeEnd("ide");
  62906. messageSends: ["collection", "samplesDo:", "at:put:", "assert:equals:", "sampleNewIndex", "sampleNewValue", "collectionWithNewValue"]
  62907. }),
  62908. $globals.IndexableCollectionTest);
  62909. $core.addMethod(
  62910. $core.method({
  62911. selector: "testEquality",
  62912. protocol: 'tests',
  62913. fn: function (){
  62914. var self=this;
  62915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62916. return $core.withContext(function($ctx1) {
  62917. //>>excludeEnd("ctx");
  62918. var $2,$1,$4,$3,$5,$6,$7,$10,$9,$11,$8;
  62919. $2=self._collectionClass();
  62920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62921. $ctx1.sendIdx["collectionClass"]=1;
  62922. //>>excludeEnd("ctx");
  62923. $1=$recv($2)._new();
  62924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62925. $ctx1.sendIdx["new"]=1;
  62926. //>>excludeEnd("ctx");
  62927. $4=self._collectionClass();
  62928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62929. $ctx1.sendIdx["collectionClass"]=2;
  62930. //>>excludeEnd("ctx");
  62931. $3=$recv($4)._new();
  62932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62933. $ctx1.sendIdx["new"]=2;
  62934. //>>excludeEnd("ctx");
  62935. self._assert_equals_($1,$3);
  62936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62937. $ctx1.sendIdx["assert:equals:"]=1;
  62938. //>>excludeEnd("ctx");
  62939. $5=self._collection();
  62940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62941. $ctx1.sendIdx["collection"]=1;
  62942. //>>excludeEnd("ctx");
  62943. $6=self._collection();
  62944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62945. $ctx1.sendIdx["collection"]=2;
  62946. //>>excludeEnd("ctx");
  62947. self._assert_equals_($5,$6);
  62948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62949. $ctx1.sendIdx["assert:equals:"]=2;
  62950. //>>excludeEnd("ctx");
  62951. $7=self._collectionWithNewValue();
  62952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62953. $ctx1.sendIdx["collectionWithNewValue"]=1;
  62954. //>>excludeEnd("ctx");
  62955. self._assert_equals_($7,self._collectionWithNewValue());
  62956. $10=self._collectionClass();
  62957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62958. $ctx1.sendIdx["collectionClass"]=3;
  62959. //>>excludeEnd("ctx");
  62960. $9=$recv($10)._new();
  62961. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62962. $ctx1.sendIdx["new"]=3;
  62963. //>>excludeEnd("ctx");
  62964. $11=self._collection();
  62965. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62966. $ctx1.sendIdx["collection"]=3;
  62967. //>>excludeEnd("ctx");
  62968. $8=$recv($9).__eq($11);
  62969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62970. $ctx1.sendIdx["="]=1;
  62971. //>>excludeEnd("ctx");
  62972. self._deny_($8);
  62973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62974. $ctx1.sendIdx["deny:"]=1;
  62975. //>>excludeEnd("ctx");
  62976. self._deny_($recv(self._collection()).__eq($recv(self._collectionClass())._new()));
  62977. return self;
  62978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62979. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.IndexableCollectionTest)});
  62980. //>>excludeEnd("ctx");
  62981. },
  62982. //>>excludeStart("ide", pragmas.excludeIdeData);
  62983. args: [],
  62984. source: "testEquality\x0a\x09self assert: self collectionClass new equals: self collectionClass new.\x0a\x09self assert: self collection equals: self collection.\x0a\x09self assert: self collectionWithNewValue equals: self collectionWithNewValue.\x0a\x09\x0a\x09self deny: self collectionClass new = self collection.\x0a\x09self deny: self collection = self collectionClass new",
  62985. referencedClasses: [],
  62986. //>>excludeEnd("ide");
  62987. messageSends: ["assert:equals:", "new", "collectionClass", "collection", "collectionWithNewValue", "deny:", "="]
  62988. }),
  62989. $globals.IndexableCollectionTest);
  62990. $core.addMethod(
  62991. $core.method({
  62992. selector: "testIndexOf",
  62993. protocol: 'tests',
  62994. fn: function (){
  62995. var self=this;
  62996. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  62997. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62998. return $core.withContext(function($ctx1) {
  62999. //>>excludeEnd("ctx");
  63000. var $1;
  63001. self._should_raise_((function(){
  63002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63003. return $core.withContext(function($ctx2) {
  63004. //>>excludeEnd("ctx");
  63005. $1=self._collection();
  63006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63007. $ctx2.sendIdx["collection"]=1;
  63008. //>>excludeEnd("ctx");
  63009. return $recv($1)._indexOf_(self._sampleNewValue());
  63010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63011. $ctx2.sendIdx["indexOf:"]=1;
  63012. //>>excludeEnd("ctx");
  63013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63014. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  63015. //>>excludeEnd("ctx");
  63016. }),$Error());
  63017. self._samplesDo_((function(index,value){
  63018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63019. return $core.withContext(function($ctx2) {
  63020. //>>excludeEnd("ctx");
  63021. return self._assert_equals_($recv(self._collection())._indexOf_(value),index);
  63022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63023. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,2)});
  63024. //>>excludeEnd("ctx");
  63025. }));
  63026. return self;
  63027. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63028. }, function($ctx1) {$ctx1.fill(self,"testIndexOf",{},$globals.IndexableCollectionTest)});
  63029. //>>excludeEnd("ctx");
  63030. },
  63031. //>>excludeStart("ide", pragmas.excludeIdeData);
  63032. args: [],
  63033. source: "testIndexOf\x0a\x09self should: [ self collection indexOf: self sampleNewValue ] raise: Error.\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (self collection indexOf: value) equals: index ]",
  63034. referencedClasses: ["Error"],
  63035. //>>excludeEnd("ide");
  63036. messageSends: ["should:raise:", "indexOf:", "collection", "sampleNewValue", "samplesDo:", "assert:equals:"]
  63037. }),
  63038. $globals.IndexableCollectionTest);
  63039. $core.addMethod(
  63040. $core.method({
  63041. selector: "testIndexOfWithNull",
  63042. protocol: 'tests',
  63043. fn: function (){
  63044. var self=this;
  63045. var jsNull;
  63046. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  63047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63048. return $core.withContext(function($ctx1) {
  63049. //>>excludeEnd("ctx");
  63050. var $1,$2;
  63051. jsNull=$recv($JSON())._parse_("null");
  63052. self._samplesDo_((function(index,value){
  63053. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63054. return $core.withContext(function($ctx2) {
  63055. //>>excludeEnd("ctx");
  63056. $1=self._collection();
  63057. $recv($1)._at_put_(index,jsNull);
  63058. $2=$recv($1)._indexOf_(jsNull);
  63059. return self._assert_equals_($2,index);
  63060. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63061. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  63062. //>>excludeEnd("ctx");
  63063. }));
  63064. return self;
  63065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63066. }, function($ctx1) {$ctx1.fill(self,"testIndexOfWithNull",{jsNull:jsNull},$globals.IndexableCollectionTest)});
  63067. //>>excludeEnd("ctx");
  63068. },
  63069. //>>excludeStart("ide", pragmas.excludeIdeData);
  63070. args: [],
  63071. source: "testIndexOfWithNull\x0a\x09| jsNull |\x0a\x09jsNull := JSON parse: 'null'.\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (self collection at: index put: jsNull; indexOf: jsNull) equals: index ]",
  63072. referencedClasses: ["JSON"],
  63073. //>>excludeEnd("ide");
  63074. messageSends: ["parse:", "samplesDo:", "assert:equals:", "at:put:", "collection", "indexOf:"]
  63075. }),
  63076. $globals.IndexableCollectionTest);
  63077. $core.addMethod(
  63078. $core.method({
  63079. selector: "testWithIndexDo",
  63080. protocol: 'tests',
  63081. fn: function (){
  63082. var self=this;
  63083. var collection;
  63084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63085. return $core.withContext(function($ctx1) {
  63086. //>>excludeEnd("ctx");
  63087. collection=self._collection();
  63088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63089. $ctx1.sendIdx["collection"]=1;
  63090. //>>excludeEnd("ctx");
  63091. $recv(self._collection())._withIndexDo_((function(each,index){
  63092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63093. return $core.withContext(function($ctx2) {
  63094. //>>excludeEnd("ctx");
  63095. return self._assert_equals_($recv(collection)._at_(index),each);
  63096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63097. }, function($ctx2) {$ctx2.fillBlock({each:each,index:index},$ctx1,1)});
  63098. //>>excludeEnd("ctx");
  63099. }));
  63100. return self;
  63101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63102. }, function($ctx1) {$ctx1.fill(self,"testWithIndexDo",{collection:collection},$globals.IndexableCollectionTest)});
  63103. //>>excludeEnd("ctx");
  63104. },
  63105. //>>excludeStart("ide", pragmas.excludeIdeData);
  63106. args: [],
  63107. source: "testWithIndexDo\x0a\x09| collection |\x0a\x09collection := self collection.\x0a\x09\x0a\x09self collection withIndexDo: [ :each :index |\x0a\x09\x09self assert: (collection at: index) equals: each ]",
  63108. referencedClasses: [],
  63109. //>>excludeEnd("ide");
  63110. messageSends: ["collection", "withIndexDo:", "assert:equals:", "at:"]
  63111. }),
  63112. $globals.IndexableCollectionTest);
  63113. $core.addClass('AssociativeCollectionTest', $globals.IndexableCollectionTest, [], 'Kernel-Tests');
  63114. $core.addMethod(
  63115. $core.method({
  63116. selector: "collectionKeys",
  63117. protocol: 'fixture',
  63118. fn: function (){
  63119. var self=this;
  63120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63121. return $core.withContext(function($ctx1) {
  63122. //>>excludeEnd("ctx");
  63123. self._subclassResponsibility();
  63124. return self;
  63125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63126. }, function($ctx1) {$ctx1.fill(self,"collectionKeys",{},$globals.AssociativeCollectionTest)});
  63127. //>>excludeEnd("ctx");
  63128. },
  63129. //>>excludeStart("ide", pragmas.excludeIdeData);
  63130. args: [],
  63131. source: "collectionKeys\x0a\x09self subclassResponsibility",
  63132. referencedClasses: [],
  63133. //>>excludeEnd("ide");
  63134. messageSends: ["subclassResponsibility"]
  63135. }),
  63136. $globals.AssociativeCollectionTest);
  63137. $core.addMethod(
  63138. $core.method({
  63139. selector: "collectionValues",
  63140. protocol: 'fixture',
  63141. fn: function (){
  63142. var self=this;
  63143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63144. return $core.withContext(function($ctx1) {
  63145. //>>excludeEnd("ctx");
  63146. self._subclassResponsibility();
  63147. return self;
  63148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63149. }, function($ctx1) {$ctx1.fill(self,"collectionValues",{},$globals.AssociativeCollectionTest)});
  63150. //>>excludeEnd("ctx");
  63151. },
  63152. //>>excludeStart("ide", pragmas.excludeIdeData);
  63153. args: [],
  63154. source: "collectionValues\x0a\x09self subclassResponsibility",
  63155. referencedClasses: [],
  63156. //>>excludeEnd("ide");
  63157. messageSends: ["subclassResponsibility"]
  63158. }),
  63159. $globals.AssociativeCollectionTest);
  63160. $core.addMethod(
  63161. $core.method({
  63162. selector: "nonIndexesDo:",
  63163. protocol: 'fixture',
  63164. fn: function (aBlock){
  63165. var self=this;
  63166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63167. return $core.withContext(function($ctx1) {
  63168. //>>excludeEnd("ctx");
  63169. $recv(aBlock)._value_((5));
  63170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63171. $ctx1.sendIdx["value:"]=1;
  63172. //>>excludeEnd("ctx");
  63173. $recv(aBlock)._value_("z");
  63174. return self;
  63175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63176. }, function($ctx1) {$ctx1.fill(self,"nonIndexesDo:",{aBlock:aBlock},$globals.AssociativeCollectionTest)});
  63177. //>>excludeEnd("ctx");
  63178. },
  63179. //>>excludeStart("ide", pragmas.excludeIdeData);
  63180. args: ["aBlock"],
  63181. source: "nonIndexesDo: aBlock\x0a\x09aBlock value: 5.\x0a\x09aBlock value: 'z'",
  63182. referencedClasses: [],
  63183. //>>excludeEnd("ide");
  63184. messageSends: ["value:"]
  63185. }),
  63186. $globals.AssociativeCollectionTest);
  63187. $core.addMethod(
  63188. $core.method({
  63189. selector: "sampleNewIndex",
  63190. protocol: 'fixture',
  63191. fn: function (){
  63192. var self=this;
  63193. return "new";
  63194. },
  63195. //>>excludeStart("ide", pragmas.excludeIdeData);
  63196. args: [],
  63197. source: "sampleNewIndex\x0a\x09^ 'new'",
  63198. referencedClasses: [],
  63199. //>>excludeEnd("ide");
  63200. messageSends: []
  63201. }),
  63202. $globals.AssociativeCollectionTest);
  63203. $core.addMethod(
  63204. $core.method({
  63205. selector: "samplesDo:",
  63206. protocol: 'fixture',
  63207. fn: function (aBlock){
  63208. var self=this;
  63209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63210. return $core.withContext(function($ctx1) {
  63211. //>>excludeEnd("ctx");
  63212. $recv(aBlock)._value_value_("a",(2));
  63213. return self;
  63214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63215. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.AssociativeCollectionTest)});
  63216. //>>excludeEnd("ctx");
  63217. },
  63218. //>>excludeStart("ide", pragmas.excludeIdeData);
  63219. args: ["aBlock"],
  63220. source: "samplesDo: aBlock\x0a\x09aBlock value: 'a' value: 2",
  63221. referencedClasses: [],
  63222. //>>excludeEnd("ide");
  63223. messageSends: ["value:value:"]
  63224. }),
  63225. $globals.AssociativeCollectionTest);
  63226. $core.addMethod(
  63227. $core.method({
  63228. selector: "testAddAll",
  63229. protocol: 'tests',
  63230. fn: function (){
  63231. var self=this;
  63232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63233. return $core.withContext(function($ctx1) {
  63234. //>>excludeEnd("ctx");
  63235. var $2,$3,$4,$5,$1,$6,$8,$9,$10,$11,$7,$12,$14,$15,$13;
  63236. (
  63237. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63238. $ctx1.supercall = true,
  63239. //>>excludeEnd("ctx");
  63240. $globals.AssociativeCollectionTest.superclass.fn.prototype._testAddAll.apply($recv(self), []));
  63241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63242. $ctx1.supercall = false;
  63243. //>>excludeEnd("ctx");;
  63244. $2=self._collection();
  63245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63246. $ctx1.sendIdx["collection"]=1;
  63247. //>>excludeEnd("ctx");
  63248. $3=$2;
  63249. $4=self._collection();
  63250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63251. $ctx1.sendIdx["collection"]=2;
  63252. //>>excludeEnd("ctx");
  63253. $recv($3)._addAll_($4);
  63254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63255. $ctx1.sendIdx["addAll:"]=1;
  63256. //>>excludeEnd("ctx");
  63257. $5=$recv($2)._yourself();
  63258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63259. $ctx1.sendIdx["yourself"]=1;
  63260. //>>excludeEnd("ctx");
  63261. $1=$5;
  63262. $6=self._collection();
  63263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63264. $ctx1.sendIdx["collection"]=3;
  63265. //>>excludeEnd("ctx");
  63266. self._assert_equals_($1,$6);
  63267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63268. $ctx1.sendIdx["assert:equals:"]=1;
  63269. //>>excludeEnd("ctx");
  63270. $8=self._collection();
  63271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63272. $ctx1.sendIdx["collection"]=4;
  63273. //>>excludeEnd("ctx");
  63274. $9=$8;
  63275. $10=self._collectionWithNewValue();
  63276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63277. $ctx1.sendIdx["collectionWithNewValue"]=1;
  63278. //>>excludeEnd("ctx");
  63279. $recv($9)._addAll_($10);
  63280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63281. $ctx1.sendIdx["addAll:"]=2;
  63282. //>>excludeEnd("ctx");
  63283. $11=$recv($8)._yourself();
  63284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63285. $ctx1.sendIdx["yourself"]=2;
  63286. //>>excludeEnd("ctx");
  63287. $7=$11;
  63288. $12=self._collectionWithNewValue();
  63289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63290. $ctx1.sendIdx["collectionWithNewValue"]=2;
  63291. //>>excludeEnd("ctx");
  63292. self._assert_equals_($7,$12);
  63293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63294. $ctx1.sendIdx["assert:equals:"]=2;
  63295. //>>excludeEnd("ctx");
  63296. $14=self._collectionWithNewValue();
  63297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63298. $ctx1.sendIdx["collectionWithNewValue"]=3;
  63299. //>>excludeEnd("ctx");
  63300. $recv($14)._addAll_(self._collection());
  63301. $15=$recv($14)._yourself();
  63302. $13=$15;
  63303. self._assert_equals_($13,self._collectionWithNewValue());
  63304. return self;
  63305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63306. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.AssociativeCollectionTest)});
  63307. //>>excludeEnd("ctx");
  63308. },
  63309. //>>excludeStart("ide", pragmas.excludeIdeData);
  63310. args: [],
  63311. source: "testAddAll\x0a\x09super testAddAll.\x0a\x09self assert: (self collection addAll: self collection; yourself) equals: self collection.\x0a\x09self assert: (self collection addAll: self collectionWithNewValue; yourself) equals: self collectionWithNewValue.\x0a\x09self assert: (self collectionWithNewValue addAll: self collection; yourself) equals: self collectionWithNewValue",
  63312. referencedClasses: [],
  63313. //>>excludeEnd("ide");
  63314. messageSends: ["testAddAll", "assert:equals:", "addAll:", "collection", "yourself", "collectionWithNewValue"]
  63315. }),
  63316. $globals.AssociativeCollectionTest);
  63317. $core.addMethod(
  63318. $core.method({
  63319. selector: "testAsDictionary",
  63320. protocol: 'tests',
  63321. fn: function (){
  63322. var self=this;
  63323. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  63324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63325. return $core.withContext(function($ctx1) {
  63326. //>>excludeEnd("ctx");
  63327. self._assert_($recv($recv($recv(self._collectionClass())._new())._asDictionary())._isMemberOf_($Dictionary()));
  63328. return self;
  63329. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63330. }, function($ctx1) {$ctx1.fill(self,"testAsDictionary",{},$globals.AssociativeCollectionTest)});
  63331. //>>excludeEnd("ctx");
  63332. },
  63333. //>>excludeStart("ide", pragmas.excludeIdeData);
  63334. args: [],
  63335. source: "testAsDictionary\x0aself assert: ( self collectionClass new asDictionary isMemberOf: Dictionary ).",
  63336. referencedClasses: ["Dictionary"],
  63337. //>>excludeEnd("ide");
  63338. messageSends: ["assert:", "isMemberOf:", "asDictionary", "new", "collectionClass"]
  63339. }),
  63340. $globals.AssociativeCollectionTest);
  63341. $core.addMethod(
  63342. $core.method({
  63343. selector: "testAsHashedCollection",
  63344. protocol: 'tests',
  63345. fn: function (){
  63346. var self=this;
  63347. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  63348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63349. return $core.withContext(function($ctx1) {
  63350. //>>excludeEnd("ctx");
  63351. self._assert_($recv($recv($recv(self._collectionClass())._new())._asHashedCollection())._isMemberOf_($HashedCollection()));
  63352. return self;
  63353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63354. }, function($ctx1) {$ctx1.fill(self,"testAsHashedCollection",{},$globals.AssociativeCollectionTest)});
  63355. //>>excludeEnd("ctx");
  63356. },
  63357. //>>excludeStart("ide", pragmas.excludeIdeData);
  63358. args: [],
  63359. source: "testAsHashedCollection\x0aself assert: ( self collectionClass new asHashedCollection isMemberOf: HashedCollection ).",
  63360. referencedClasses: ["HashedCollection"],
  63361. //>>excludeEnd("ide");
  63362. messageSends: ["assert:", "isMemberOf:", "asHashedCollection", "new", "collectionClass"]
  63363. }),
  63364. $globals.AssociativeCollectionTest);
  63365. $core.addMethod(
  63366. $core.method({
  63367. selector: "testComma",
  63368. protocol: 'tests',
  63369. fn: function (){
  63370. var self=this;
  63371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63372. return $core.withContext(function($ctx1) {
  63373. //>>excludeEnd("ctx");
  63374. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$9;
  63375. (
  63376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63377. $ctx1.supercall = true,
  63378. //>>excludeEnd("ctx");
  63379. $globals.AssociativeCollectionTest.superclass.fn.prototype._testComma.apply($recv(self), []));
  63380. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63381. $ctx1.supercall = false;
  63382. //>>excludeEnd("ctx");;
  63383. $2=self._collection();
  63384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63385. $ctx1.sendIdx["collection"]=1;
  63386. //>>excludeEnd("ctx");
  63387. $3=self._collection();
  63388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63389. $ctx1.sendIdx["collection"]=2;
  63390. //>>excludeEnd("ctx");
  63391. $1=$recv($2).__comma($3);
  63392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63393. $ctx1.sendIdx[","]=1;
  63394. //>>excludeEnd("ctx");
  63395. $4=self._collection();
  63396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63397. $ctx1.sendIdx["collection"]=3;
  63398. //>>excludeEnd("ctx");
  63399. self._assert_equals_($1,$4);
  63400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63401. $ctx1.sendIdx["assert:equals:"]=1;
  63402. //>>excludeEnd("ctx");
  63403. $6=self._collection();
  63404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63405. $ctx1.sendIdx["collection"]=4;
  63406. //>>excludeEnd("ctx");
  63407. $7=self._collectionWithNewValue();
  63408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63409. $ctx1.sendIdx["collectionWithNewValue"]=1;
  63410. //>>excludeEnd("ctx");
  63411. $5=$recv($6).__comma($7);
  63412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63413. $ctx1.sendIdx[","]=2;
  63414. //>>excludeEnd("ctx");
  63415. $8=self._collectionWithNewValue();
  63416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63417. $ctx1.sendIdx["collectionWithNewValue"]=2;
  63418. //>>excludeEnd("ctx");
  63419. self._assert_equals_($5,$8);
  63420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63421. $ctx1.sendIdx["assert:equals:"]=2;
  63422. //>>excludeEnd("ctx");
  63423. $10=self._collectionWithNewValue();
  63424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63425. $ctx1.sendIdx["collectionWithNewValue"]=3;
  63426. //>>excludeEnd("ctx");
  63427. $9=$recv($10).__comma(self._collection());
  63428. self._assert_equals_($9,self._collectionWithNewValue());
  63429. return self;
  63430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63431. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.AssociativeCollectionTest)});
  63432. //>>excludeEnd("ctx");
  63433. },
  63434. //>>excludeStart("ide", pragmas.excludeIdeData);
  63435. args: [],
  63436. source: "testComma\x0a\x09super testComma.\x0a\x09self assert: self collection, self collection equals: self collection.\x0a\x09self assert: self collection, self collectionWithNewValue equals: self collectionWithNewValue.\x0a\x09self assert: self collectionWithNewValue, self collection equals: self collectionWithNewValue",
  63437. referencedClasses: [],
  63438. //>>excludeEnd("ide");
  63439. messageSends: ["testComma", "assert:equals:", ",", "collection", "collectionWithNewValue"]
  63440. }),
  63441. $globals.AssociativeCollectionTest);
  63442. $core.addMethod(
  63443. $core.method({
  63444. selector: "testFrom",
  63445. protocol: 'tests',
  63446. fn: function (){
  63447. var self=this;
  63448. var associations;
  63449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63450. return $core.withContext(function($ctx1) {
  63451. //>>excludeEnd("ctx");
  63452. var $1;
  63453. $1="a".__minus_gt((1));
  63454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63455. $ctx1.sendIdx["->"]=1;
  63456. //>>excludeEnd("ctx");
  63457. associations=[$1,"b".__minus_gt((2))];
  63458. self._assertSameContents_as_($recv($recv(self._class())._collectionClass())._from_(associations),$globals.HashedCollection._newFromPairs_(["a",(1),"b",(2)]));
  63459. return self;
  63460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63461. }, function($ctx1) {$ctx1.fill(self,"testFrom",{associations:associations},$globals.AssociativeCollectionTest)});
  63462. //>>excludeEnd("ctx");
  63463. },
  63464. //>>excludeStart("ide", pragmas.excludeIdeData);
  63465. args: [],
  63466. source: "testFrom\x0a\x22Accept a collection of associations.\x22\x0a| associations |\x0aassociations := { 'a' -> 1. 'b' -> 2 }.\x0aself assertSameContents: ( self class collectionClass from: associations ) as: #{ 'a' -> 1. 'b' -> 2 }.",
  63467. referencedClasses: [],
  63468. //>>excludeEnd("ide");
  63469. messageSends: ["->", "assertSameContents:as:", "from:", "collectionClass", "class"]
  63470. }),
  63471. $globals.AssociativeCollectionTest);
  63472. $core.addMethod(
  63473. $core.method({
  63474. selector: "testKeys",
  63475. protocol: 'tests',
  63476. fn: function (){
  63477. var self=this;
  63478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63479. return $core.withContext(function($ctx1) {
  63480. //>>excludeEnd("ctx");
  63481. var $2,$1,$3,$4;
  63482. $2=$recv($recv(self._collectionClass())._new())._keys();
  63483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63484. $ctx1.sendIdx["keys"]=1;
  63485. //>>excludeEnd("ctx");
  63486. $1=$recv($2)._isEmpty();
  63487. self._assert_($1);
  63488. $3=$recv(self._collection())._keys();
  63489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63490. $ctx1.sendIdx["keys"]=2;
  63491. //>>excludeEnd("ctx");
  63492. $4=self._collectionKeys();
  63493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63494. $ctx1.sendIdx["collectionKeys"]=1;
  63495. //>>excludeEnd("ctx");
  63496. self._assertSameContents_as_($3,$4);
  63497. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63498. $ctx1.sendIdx["assertSameContents:as:"]=1;
  63499. //>>excludeEnd("ctx");
  63500. self._assertSameContents_as_($recv(self._collectionWithNewValue())._keys(),$recv(self._collectionKeys()).__comma([self._sampleNewIndex()]));
  63501. return self;
  63502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63503. }, function($ctx1) {$ctx1.fill(self,"testKeys",{},$globals.AssociativeCollectionTest)});
  63504. //>>excludeEnd("ctx");
  63505. },
  63506. //>>excludeStart("ide", pragmas.excludeIdeData);
  63507. args: [],
  63508. source: "testKeys\x0a\x09self assert:self collectionClass new keys isEmpty.\x0a\x09self assertSameContents:self collection keys as: self collectionKeys.\x0a\x09self assertSameContents:self collectionWithNewValue keys as: self collectionKeys, { self sampleNewIndex }",
  63509. referencedClasses: [],
  63510. //>>excludeEnd("ide");
  63511. messageSends: ["assert:", "isEmpty", "keys", "new", "collectionClass", "assertSameContents:as:", "collection", "collectionKeys", "collectionWithNewValue", ",", "sampleNewIndex"]
  63512. }),
  63513. $globals.AssociativeCollectionTest);
  63514. $core.addMethod(
  63515. $core.method({
  63516. selector: "testNewFromPairs",
  63517. protocol: 'tests',
  63518. fn: function (){
  63519. var self=this;
  63520. var flattenedAssociations;
  63521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63522. return $core.withContext(function($ctx1) {
  63523. //>>excludeEnd("ctx");
  63524. flattenedAssociations=["a",(1),"b",(2)];
  63525. self._assertSameContents_as_($recv($recv(self._class())._collectionClass())._newFromPairs_(flattenedAssociations),$globals.HashedCollection._newFromPairs_(["a",(1),"b",(2)]));
  63526. return self;
  63527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63528. }, function($ctx1) {$ctx1.fill(self,"testNewFromPairs",{flattenedAssociations:flattenedAssociations},$globals.AssociativeCollectionTest)});
  63529. //>>excludeEnd("ctx");
  63530. },
  63531. //>>excludeStart("ide", pragmas.excludeIdeData);
  63532. args: [],
  63533. source: "testNewFromPairs\x0a\x22Accept an array in which all odd indexes are keys and evens are values.\x22\x0a| flattenedAssociations |\x0aflattenedAssociations := { 'a'. 1. 'b'. 2 }.\x0aself assertSameContents: ( self class collectionClass newFromPairs: flattenedAssociations ) as: #{ 'a' -> 1. 'b' -> 2 }.",
  63534. referencedClasses: [],
  63535. //>>excludeEnd("ide");
  63536. messageSends: ["assertSameContents:as:", "newFromPairs:", "collectionClass", "class"]
  63537. }),
  63538. $globals.AssociativeCollectionTest);
  63539. $core.addMethod(
  63540. $core.method({
  63541. selector: "testPrintString",
  63542. protocol: 'tests',
  63543. fn: function (){
  63544. var self=this;
  63545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63546. return $core.withContext(function($ctx1) {
  63547. //>>excludeEnd("ctx");
  63548. var $3,$2,$4,$1,$5;
  63549. $3=self._collectionClass();
  63550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63551. $ctx1.sendIdx["collectionClass"]=1;
  63552. //>>excludeEnd("ctx");
  63553. $2=$recv($3)._new();
  63554. $recv($2)._at_put_("firstname","James");
  63555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63556. $ctx1.sendIdx["at:put:"]=1;
  63557. //>>excludeEnd("ctx");
  63558. $recv($2)._at_put_("lastname","Bond");
  63559. $4=$recv($2)._printString();
  63560. $1=$4;
  63561. $5=$recv("a ".__comma($recv(self._collectionClass())._name())).__comma(" ('firstname' -> 'James' , 'lastname' -> 'Bond')");
  63562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63563. $ctx1.sendIdx[","]=1;
  63564. //>>excludeEnd("ctx");
  63565. self._assert_equals_($1,$5);
  63566. return self;
  63567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63568. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{},$globals.AssociativeCollectionTest)});
  63569. //>>excludeEnd("ctx");
  63570. },
  63571. //>>excludeStart("ide", pragmas.excludeIdeData);
  63572. args: [],
  63573. source: "testPrintString\x0a\x09self\x0a\x09\x09assert: (self collectionClass new\x0a\x09\x09\x09\x09\x09\x09\x09at:'firstname' put: 'James';\x0a\x09\x09\x09\x09\x09\x09\x09at:'lastname' put: 'Bond';\x0a\x09\x09\x09\x09\x09\x09\x09printString)\x0a\x09\x09equals: 'a ', self collectionClass name, ' (''firstname'' -> ''James'' , ''lastname'' -> ''Bond'')'",
  63574. referencedClasses: [],
  63575. //>>excludeEnd("ide");
  63576. messageSends: ["assert:equals:", "at:put:", "new", "collectionClass", "printString", ",", "name"]
  63577. }),
  63578. $globals.AssociativeCollectionTest);
  63579. $core.addMethod(
  63580. $core.method({
  63581. selector: "testRemoveKey",
  63582. protocol: 'tests',
  63583. fn: function (){
  63584. var self=this;
  63585. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  63586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63587. return $core.withContext(function($ctx1) {
  63588. //>>excludeEnd("ctx");
  63589. var $1,$2,$3,$5,$6,$4,$7,$8;
  63590. self._nonIndexesDo_((function(each){
  63591. var collection;
  63592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63593. return $core.withContext(function($ctx2) {
  63594. //>>excludeEnd("ctx");
  63595. collection=self._collection();
  63596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63597. $ctx2.sendIdx["collection"]=1;
  63598. //>>excludeEnd("ctx");
  63599. collection;
  63600. self._should_raise_((function(){
  63601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63602. return $core.withContext(function($ctx3) {
  63603. //>>excludeEnd("ctx");
  63604. return $recv(collection)._removeKey_(each);
  63605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63606. $ctx3.sendIdx["removeKey:"]=1;
  63607. //>>excludeEnd("ctx");
  63608. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63609. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  63610. //>>excludeEnd("ctx");
  63611. }),$Error());
  63612. $1=collection;
  63613. $2=self._collection();
  63614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63615. $ctx2.sendIdx["collection"]=2;
  63616. //>>excludeEnd("ctx");
  63617. return self._assert_equals_($1,$2);
  63618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63619. $ctx2.sendIdx["assert:equals:"]=1;
  63620. //>>excludeEnd("ctx");
  63621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63622. }, function($ctx2) {$ctx2.fillBlock({each:each,collection:collection},$ctx1,1)});
  63623. //>>excludeEnd("ctx");
  63624. }));
  63625. self._samplesDo_((function(index,value){
  63626. var collection;
  63627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63628. return $core.withContext(function($ctx2) {
  63629. //>>excludeEnd("ctx");
  63630. collection=self._collection();
  63631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63632. $ctx2.sendIdx["collection"]=3;
  63633. //>>excludeEnd("ctx");
  63634. collection;
  63635. $3=$recv(collection)._removeKey_(index);
  63636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63637. $ctx2.sendIdx["removeKey:"]=2;
  63638. //>>excludeEnd("ctx");
  63639. self._assert_equals_($3,value);
  63640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63641. $ctx2.sendIdx["assert:equals:"]=2;
  63642. //>>excludeEnd("ctx");
  63643. $5=collection;
  63644. $6=self._collection();
  63645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63646. $ctx2.sendIdx["collection"]=4;
  63647. //>>excludeEnd("ctx");
  63648. $4=$recv($5).__eq($6);
  63649. return self._deny_($4);
  63650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63651. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,3)});
  63652. //>>excludeEnd("ctx");
  63653. }));
  63654. $7=self._collectionWithNewValue();
  63655. $recv($7)._removeKey_(self._sampleNewIndex());
  63656. $8=$recv($7)._yourself();
  63657. self._assert_equals_($8,self._collection());
  63658. return self;
  63659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63660. }, function($ctx1) {$ctx1.fill(self,"testRemoveKey",{},$globals.AssociativeCollectionTest)});
  63661. //>>excludeEnd("ctx");
  63662. },
  63663. //>>excludeStart("ide", pragmas.excludeIdeData);
  63664. args: [],
  63665. source: "testRemoveKey\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09| collection |\x0a\x09\x09collection := self collection.\x0a\x09\x09self should: [ collection removeKey: each ] raise: Error.\x0a\x09\x09self assert: collection equals: self collection ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09| collection |\x0a\x09\x09collection := self collection.\x0a\x09\x09self assert: (collection removeKey: index) equals: value.\x0a\x09\x09self deny: collection = self collection ].\x0a\x09self\x0a\x09\x09assert: (self collectionWithNewValue removeKey: self sampleNewIndex; yourself)\x0a\x09\x09equals: self collection",
  63666. referencedClasses: ["Error"],
  63667. //>>excludeEnd("ide");
  63668. messageSends: ["nonIndexesDo:", "collection", "should:raise:", "removeKey:", "assert:equals:", "samplesDo:", "deny:", "=", "collectionWithNewValue", "sampleNewIndex", "yourself"]
  63669. }),
  63670. $globals.AssociativeCollectionTest);
  63671. $core.addMethod(
  63672. $core.method({
  63673. selector: "testRemoveKeyIfAbsent",
  63674. protocol: 'tests',
  63675. fn: function (){
  63676. var self=this;
  63677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63678. return $core.withContext(function($ctx1) {
  63679. //>>excludeEnd("ctx");
  63680. var $1,$2,$3,$4,$5,$7,$8,$6,$9,$10;
  63681. self._nonIndexesDo_((function(each){
  63682. var collection;
  63683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63684. return $core.withContext(function($ctx2) {
  63685. //>>excludeEnd("ctx");
  63686. collection=self._collection();
  63687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63688. $ctx2.sendIdx["collection"]=1;
  63689. //>>excludeEnd("ctx");
  63690. collection;
  63691. $1=$recv(collection)._removeKey_ifAbsent_(each,(function(){
  63692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63693. return $core.withContext(function($ctx3) {
  63694. //>>excludeEnd("ctx");
  63695. return self._sampleNewValue();
  63696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63697. $ctx3.sendIdx["sampleNewValue"]=1;
  63698. //>>excludeEnd("ctx");
  63699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63700. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  63701. //>>excludeEnd("ctx");
  63702. }));
  63703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63704. $ctx2.sendIdx["removeKey:ifAbsent:"]=1;
  63705. //>>excludeEnd("ctx");
  63706. $2=self._sampleNewValue();
  63707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63708. $ctx2.sendIdx["sampleNewValue"]=2;
  63709. //>>excludeEnd("ctx");
  63710. self._assert_equals_($1,$2);
  63711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63712. $ctx2.sendIdx["assert:equals:"]=1;
  63713. //>>excludeEnd("ctx");
  63714. $3=collection;
  63715. $4=self._collection();
  63716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63717. $ctx2.sendIdx["collection"]=2;
  63718. //>>excludeEnd("ctx");
  63719. return self._assert_equals_($3,$4);
  63720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63721. $ctx2.sendIdx["assert:equals:"]=2;
  63722. //>>excludeEnd("ctx");
  63723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63724. }, function($ctx2) {$ctx2.fillBlock({each:each,collection:collection},$ctx1,1)});
  63725. //>>excludeEnd("ctx");
  63726. }));
  63727. self._samplesDo_((function(index,value){
  63728. var collection;
  63729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63730. return $core.withContext(function($ctx2) {
  63731. //>>excludeEnd("ctx");
  63732. collection=self._collection();
  63733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63734. $ctx2.sendIdx["collection"]=3;
  63735. //>>excludeEnd("ctx");
  63736. collection;
  63737. $5=$recv(collection)._removeKey_ifAbsent_(index,(function(){
  63738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63739. return $core.withContext(function($ctx3) {
  63740. //>>excludeEnd("ctx");
  63741. return self._sampleNewValue();
  63742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63743. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,4)});
  63744. //>>excludeEnd("ctx");
  63745. }));
  63746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63747. $ctx2.sendIdx["removeKey:ifAbsent:"]=2;
  63748. //>>excludeEnd("ctx");
  63749. self._assert_equals_($5,value);
  63750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63751. $ctx2.sendIdx["assert:equals:"]=3;
  63752. //>>excludeEnd("ctx");
  63753. $7=collection;
  63754. $8=self._collection();
  63755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63756. $ctx2.sendIdx["collection"]=4;
  63757. //>>excludeEnd("ctx");
  63758. $6=$recv($7).__eq($8);
  63759. return self._deny_($6);
  63760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63761. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,3)});
  63762. //>>excludeEnd("ctx");
  63763. }));
  63764. $9=self._collectionWithNewValue();
  63765. $recv($9)._removeKey_ifAbsent_(self._sampleNewIndex(),(function(){
  63766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63767. return $core.withContext(function($ctx2) {
  63768. //>>excludeEnd("ctx");
  63769. return self._assert_(false);
  63770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63771. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  63772. //>>excludeEnd("ctx");
  63773. }));
  63774. $10=$recv($9)._yourself();
  63775. self._assert_equals_($10,self._collection());
  63776. return self;
  63777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63778. }, function($ctx1) {$ctx1.fill(self,"testRemoveKeyIfAbsent",{},$globals.AssociativeCollectionTest)});
  63779. //>>excludeEnd("ctx");
  63780. },
  63781. //>>excludeStart("ide", pragmas.excludeIdeData);
  63782. args: [],
  63783. source: "testRemoveKeyIfAbsent\x0a\x09self nonIndexesDo: [ :each |\x0a\x09\x09| collection |\x0a\x09\x09collection := self collection.\x0a\x09\x09self assert: (collection removeKey: each ifAbsent: [ self sampleNewValue ]) equals: self sampleNewValue.\x0a\x09\x09self assert: collection equals: self collection ].\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09| collection |\x0a\x09\x09collection := self collection.\x0a\x09\x09self assert: (collection removeKey: index ifAbsent: [ self sampleNewValue ]) equals: value.\x0a\x09\x09self deny: collection = self collection ].\x0a\x09self\x0a\x09\x09assert: (self collectionWithNewValue removeKey: self sampleNewIndex ifAbsent: [ self assert: false ]; yourself)\x0a\x09\x09equals: self collection",
  63784. referencedClasses: [],
  63785. //>>excludeEnd("ide");
  63786. messageSends: ["nonIndexesDo:", "collection", "assert:equals:", "removeKey:ifAbsent:", "sampleNewValue", "samplesDo:", "deny:", "=", "collectionWithNewValue", "sampleNewIndex", "assert:", "yourself"]
  63787. }),
  63788. $globals.AssociativeCollectionTest);
  63789. $core.addMethod(
  63790. $core.method({
  63791. selector: "testValues",
  63792. protocol: 'tests',
  63793. fn: function (){
  63794. var self=this;
  63795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63796. return $core.withContext(function($ctx1) {
  63797. //>>excludeEnd("ctx");
  63798. var $2,$1,$3,$4;
  63799. $2=$recv($recv(self._collectionClass())._new())._values();
  63800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63801. $ctx1.sendIdx["values"]=1;
  63802. //>>excludeEnd("ctx");
  63803. $1=$recv($2)._isEmpty();
  63804. self._assert_($1);
  63805. $3=$recv(self._collection())._values();
  63806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63807. $ctx1.sendIdx["values"]=2;
  63808. //>>excludeEnd("ctx");
  63809. $4=self._collectionValues();
  63810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63811. $ctx1.sendIdx["collectionValues"]=1;
  63812. //>>excludeEnd("ctx");
  63813. self._assertSameContents_as_($3,$4);
  63814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63815. $ctx1.sendIdx["assertSameContents:as:"]=1;
  63816. //>>excludeEnd("ctx");
  63817. self._assertSameContents_as_($recv(self._collectionWithNewValue())._values(),$recv(self._collectionValues()).__comma([self._sampleNewValue()]));
  63818. return self;
  63819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63820. }, function($ctx1) {$ctx1.fill(self,"testValues",{},$globals.AssociativeCollectionTest)});
  63821. //>>excludeEnd("ctx");
  63822. },
  63823. //>>excludeStart("ide", pragmas.excludeIdeData);
  63824. args: [],
  63825. source: "testValues\x0a\x09self assert:self collectionClass new values isEmpty.\x0a\x09self assertSameContents:self collection values as: self collectionValues.\x0a\x09self assertSameContents:self collectionWithNewValue values as: self collectionValues, { self sampleNewValue }",
  63826. referencedClasses: [],
  63827. //>>excludeEnd("ide");
  63828. messageSends: ["assert:", "isEmpty", "values", "new", "collectionClass", "assertSameContents:as:", "collection", "collectionValues", "collectionWithNewValue", ",", "sampleNewValue"]
  63829. }),
  63830. $globals.AssociativeCollectionTest);
  63831. $core.addClass('DictionaryTest', $globals.AssociativeCollectionTest, [], 'Kernel-Tests');
  63832. $core.addMethod(
  63833. $core.method({
  63834. selector: "collection",
  63835. protocol: 'fixture',
  63836. fn: function (){
  63837. var self=this;
  63838. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  63839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63840. return $core.withContext(function($ctx1) {
  63841. //>>excludeEnd("ctx");
  63842. var $2,$3,$1;
  63843. $2=$recv($Dictionary())._new();
  63844. $recv($2)._at_put_((1),(1));
  63845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63846. $ctx1.sendIdx["at:put:"]=1;
  63847. //>>excludeEnd("ctx");
  63848. $recv($2)._at_put_("a",(2));
  63849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63850. $ctx1.sendIdx["at:put:"]=2;
  63851. //>>excludeEnd("ctx");
  63852. $recv($2)._at_put_(true,(3));
  63853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63854. $ctx1.sendIdx["at:put:"]=3;
  63855. //>>excludeEnd("ctx");
  63856. $recv($2)._at_put_((1).__at((3)),(-4));
  63857. $3=$recv($2)._yourself();
  63858. $1=$3;
  63859. return $1;
  63860. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63861. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.DictionaryTest)});
  63862. //>>excludeEnd("ctx");
  63863. },
  63864. //>>excludeStart("ide", pragmas.excludeIdeData);
  63865. args: [],
  63866. source: "collection\x0a\x09^ Dictionary new\x0a\x09\x09at: 1 put: 1;\x0a\x09\x09at: 'a' put: 2;\x0a\x09\x09at: true put: 3;\x0a\x09\x09at: 1@3 put: -4;\x0a\x09\x09yourself",
  63867. referencedClasses: ["Dictionary"],
  63868. //>>excludeEnd("ide");
  63869. messageSends: ["at:put:", "new", "@", "yourself"]
  63870. }),
  63871. $globals.DictionaryTest);
  63872. $core.addMethod(
  63873. $core.method({
  63874. selector: "collectionKeys",
  63875. protocol: 'fixture',
  63876. fn: function (){
  63877. var self=this;
  63878. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63879. return $core.withContext(function($ctx1) {
  63880. //>>excludeEnd("ctx");
  63881. var $1;
  63882. $1=[(1),"a",true,(1).__at((3))];
  63883. return $1;
  63884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63885. }, function($ctx1) {$ctx1.fill(self,"collectionKeys",{},$globals.DictionaryTest)});
  63886. //>>excludeEnd("ctx");
  63887. },
  63888. //>>excludeStart("ide", pragmas.excludeIdeData);
  63889. args: [],
  63890. source: "collectionKeys\x0a\x09^ {1. 'a'. true. 1@3}",
  63891. referencedClasses: [],
  63892. //>>excludeEnd("ide");
  63893. messageSends: ["@"]
  63894. }),
  63895. $globals.DictionaryTest);
  63896. $core.addMethod(
  63897. $core.method({
  63898. selector: "collectionOfPrintStrings",
  63899. protocol: 'fixture',
  63900. fn: function (){
  63901. var self=this;
  63902. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  63903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63904. return $core.withContext(function($ctx1) {
  63905. //>>excludeEnd("ctx");
  63906. var $2,$3,$1;
  63907. $2=$recv($Dictionary())._new();
  63908. $recv($2)._at_put_((1),"1");
  63909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63910. $ctx1.sendIdx["at:put:"]=1;
  63911. //>>excludeEnd("ctx");
  63912. $recv($2)._at_put_("a","2");
  63913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63914. $ctx1.sendIdx["at:put:"]=2;
  63915. //>>excludeEnd("ctx");
  63916. $recv($2)._at_put_(true,"3");
  63917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63918. $ctx1.sendIdx["at:put:"]=3;
  63919. //>>excludeEnd("ctx");
  63920. $recv($2)._at_put_((1).__at((3)),"-4");
  63921. $3=$recv($2)._yourself();
  63922. $1=$3;
  63923. return $1;
  63924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63925. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.DictionaryTest)});
  63926. //>>excludeEnd("ctx");
  63927. },
  63928. //>>excludeStart("ide", pragmas.excludeIdeData);
  63929. args: [],
  63930. source: "collectionOfPrintStrings\x0a\x09^ Dictionary new\x0a\x09\x09at: 1 put: '1';\x0a\x09\x09at: 'a' put: '2';\x0a\x09\x09at: true put: '3';\x0a\x09\x09at: 1@3 put: '-4';\x0a\x09\x09yourself",
  63931. referencedClasses: ["Dictionary"],
  63932. //>>excludeEnd("ide");
  63933. messageSends: ["at:put:", "new", "@", "yourself"]
  63934. }),
  63935. $globals.DictionaryTest);
  63936. $core.addMethod(
  63937. $core.method({
  63938. selector: "collectionSize",
  63939. protocol: 'fixture',
  63940. fn: function (){
  63941. var self=this;
  63942. return (4);
  63943. },
  63944. //>>excludeStart("ide", pragmas.excludeIdeData);
  63945. args: [],
  63946. source: "collectionSize\x0a\x09^ 4",
  63947. referencedClasses: [],
  63948. //>>excludeEnd("ide");
  63949. messageSends: []
  63950. }),
  63951. $globals.DictionaryTest);
  63952. $core.addMethod(
  63953. $core.method({
  63954. selector: "collectionValues",
  63955. protocol: 'fixture',
  63956. fn: function (){
  63957. var self=this;
  63958. var $1;
  63959. $1=[(1),(2),(3),(-4)];
  63960. return $1;
  63961. },
  63962. //>>excludeStart("ide", pragmas.excludeIdeData);
  63963. args: [],
  63964. source: "collectionValues\x0a\x09^ {1. 2. 3. -4}",
  63965. referencedClasses: [],
  63966. //>>excludeEnd("ide");
  63967. messageSends: []
  63968. }),
  63969. $globals.DictionaryTest);
  63970. $core.addMethod(
  63971. $core.method({
  63972. selector: "collectionWithDuplicates",
  63973. protocol: 'fixture',
  63974. fn: function (){
  63975. var self=this;
  63976. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  63977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63978. return $core.withContext(function($ctx1) {
  63979. //>>excludeEnd("ctx");
  63980. var $2,$3,$1;
  63981. $2=$recv($Dictionary())._new();
  63982. $recv($2)._at_put_((1),(1));
  63983. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63984. $ctx1.sendIdx["at:put:"]=1;
  63985. //>>excludeEnd("ctx");
  63986. $recv($2)._at_put_("a",(2));
  63987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63988. $ctx1.sendIdx["at:put:"]=2;
  63989. //>>excludeEnd("ctx");
  63990. $recv($2)._at_put_(true,(3));
  63991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63992. $ctx1.sendIdx["at:put:"]=3;
  63993. //>>excludeEnd("ctx");
  63994. $recv($2)._at_put_((4),(-4));
  63995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63996. $ctx1.sendIdx["at:put:"]=4;
  63997. //>>excludeEnd("ctx");
  63998. $recv($2)._at_put_("b",(1));
  63999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64000. $ctx1.sendIdx["at:put:"]=5;
  64001. //>>excludeEnd("ctx");
  64002. $recv($2)._at_put_((3),(3));
  64003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64004. $ctx1.sendIdx["at:put:"]=6;
  64005. //>>excludeEnd("ctx");
  64006. $recv($2)._at_put_(false,(12));
  64007. $3=$recv($2)._yourself();
  64008. $1=$3;
  64009. return $1;
  64010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64011. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.DictionaryTest)});
  64012. //>>excludeEnd("ctx");
  64013. },
  64014. //>>excludeStart("ide", pragmas.excludeIdeData);
  64015. args: [],
  64016. source: "collectionWithDuplicates\x0a\x09^ Dictionary new\x0a\x09\x09at: 1 put: 1;\x0a\x09\x09at: 'a' put: 2;\x0a\x09\x09at: true put: 3;\x0a\x09\x09at: 4 put: -4;\x0a\x09\x09at: 'b' put: 1;\x0a\x09\x09at: 3 put: 3;\x0a\x09\x09at: false put: 12;\x0a\x09\x09yourself",
  64017. referencedClasses: ["Dictionary"],
  64018. //>>excludeEnd("ide");
  64019. messageSends: ["at:put:", "new", "yourself"]
  64020. }),
  64021. $globals.DictionaryTest);
  64022. $core.addMethod(
  64023. $core.method({
  64024. selector: "collectionWithNewValue",
  64025. protocol: 'fixture',
  64026. fn: function (){
  64027. var self=this;
  64028. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64030. return $core.withContext(function($ctx1) {
  64031. //>>excludeEnd("ctx");
  64032. var $2,$3,$1;
  64033. $2=$recv($Dictionary())._new();
  64034. $recv($2)._at_put_((1),(1));
  64035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64036. $ctx1.sendIdx["at:put:"]=1;
  64037. //>>excludeEnd("ctx");
  64038. $recv($2)._at_put_("a",(2));
  64039. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64040. $ctx1.sendIdx["at:put:"]=2;
  64041. //>>excludeEnd("ctx");
  64042. $recv($2)._at_put_(true,(3));
  64043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64044. $ctx1.sendIdx["at:put:"]=3;
  64045. //>>excludeEnd("ctx");
  64046. $recv($2)._at_put_((1).__at((3)),(-4));
  64047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64048. $ctx1.sendIdx["at:put:"]=4;
  64049. //>>excludeEnd("ctx");
  64050. $recv($2)._at_put_("new","N");
  64051. $3=$recv($2)._yourself();
  64052. $1=$3;
  64053. return $1;
  64054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64055. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.DictionaryTest)});
  64056. //>>excludeEnd("ctx");
  64057. },
  64058. //>>excludeStart("ide", pragmas.excludeIdeData);
  64059. args: [],
  64060. source: "collectionWithNewValue\x0a\x09^ Dictionary new\x0a\x09\x09at: 1 put: 1;\x0a\x09\x09at: 'a' put: 2;\x0a\x09\x09at: true put: 3;\x0a\x09\x09at: 1@3 put: -4;\x0a\x09\x09at: 'new' put: 'N';\x0a\x09\x09yourself",
  64061. referencedClasses: ["Dictionary"],
  64062. //>>excludeEnd("ide");
  64063. messageSends: ["at:put:", "new", "@", "yourself"]
  64064. }),
  64065. $globals.DictionaryTest);
  64066. $core.addMethod(
  64067. $core.method({
  64068. selector: "sampleNewValueAsCollection",
  64069. protocol: 'fixture',
  64070. fn: function (){
  64071. var self=this;
  64072. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64074. return $core.withContext(function($ctx1) {
  64075. //>>excludeEnd("ctx");
  64076. var $2,$3,$1;
  64077. $2=$recv($Dictionary())._new();
  64078. $recv($2)._at_put_("new","N");
  64079. $3=$recv($2)._yourself();
  64080. $1=$3;
  64081. return $1;
  64082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64083. }, function($ctx1) {$ctx1.fill(self,"sampleNewValueAsCollection",{},$globals.DictionaryTest)});
  64084. //>>excludeEnd("ctx");
  64085. },
  64086. //>>excludeStart("ide", pragmas.excludeIdeData);
  64087. args: [],
  64088. source: "sampleNewValueAsCollection\x0a\x09^ Dictionary new\x0a\x09\x09at: 'new' put: 'N';\x0a\x09\x09yourself",
  64089. referencedClasses: ["Dictionary"],
  64090. //>>excludeEnd("ide");
  64091. messageSends: ["at:put:", "new", "yourself"]
  64092. }),
  64093. $globals.DictionaryTest);
  64094. $core.addMethod(
  64095. $core.method({
  64096. selector: "samplesDo:",
  64097. protocol: 'fixture',
  64098. fn: function (aBlock){
  64099. var self=this;
  64100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64101. return $core.withContext(function($ctx1) {
  64102. //>>excludeEnd("ctx");
  64103. (
  64104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64105. $ctx1.supercall = true,
  64106. //>>excludeEnd("ctx");
  64107. $globals.DictionaryTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  64108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64109. $ctx1.supercall = false;
  64110. //>>excludeEnd("ctx");;
  64111. $recv(aBlock)._value_value_(true,(3));
  64112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64113. $ctx1.sendIdx["value:value:"]=1;
  64114. //>>excludeEnd("ctx");
  64115. $recv(aBlock)._value_value_((1).__at((3)),(-4));
  64116. return self;
  64117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64118. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.DictionaryTest)});
  64119. //>>excludeEnd("ctx");
  64120. },
  64121. //>>excludeStart("ide", pragmas.excludeIdeData);
  64122. args: ["aBlock"],
  64123. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: true value: 3.\x0a\x09aBlock value: 1@3 value: -4",
  64124. referencedClasses: [],
  64125. //>>excludeEnd("ide");
  64126. messageSends: ["samplesDo:", "value:value:", "@"]
  64127. }),
  64128. $globals.DictionaryTest);
  64129. $core.addMethod(
  64130. $core.method({
  64131. selector: "testAccessing",
  64132. protocol: 'tests',
  64133. fn: function (){
  64134. var self=this;
  64135. var d;
  64136. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64138. return $core.withContext(function($ctx1) {
  64139. //>>excludeEnd("ctx");
  64140. var $1,$2,$3,$4,$5,$6,$7,$9,$10,$8,$12,$13,$11;
  64141. d=$recv($Dictionary())._new();
  64142. $recv(d)._at_put_("hello","world");
  64143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64144. $ctx1.sendIdx["at:put:"]=1;
  64145. //>>excludeEnd("ctx");
  64146. $1=$recv(d)._at_("hello");
  64147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64148. $ctx1.sendIdx["at:"]=1;
  64149. //>>excludeEnd("ctx");
  64150. self._assert_equals_($1,"world");
  64151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64152. $ctx1.sendIdx["assert:equals:"]=1;
  64153. //>>excludeEnd("ctx");
  64154. $2=$recv(d)._at_ifAbsent_("hello",(function(){
  64155. return nil;
  64156. }));
  64157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64158. $ctx1.sendIdx["at:ifAbsent:"]=1;
  64159. //>>excludeEnd("ctx");
  64160. self._assert_equals_($2,"world");
  64161. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64162. $ctx1.sendIdx["assert:equals:"]=2;
  64163. //>>excludeEnd("ctx");
  64164. self._deny_($recv($recv(d)._at_ifAbsent_("foo",(function(){
  64165. return nil;
  64166. }))).__eq("world"));
  64167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64168. $ctx1.sendIdx["deny:"]=1;
  64169. //>>excludeEnd("ctx");
  64170. $3=$recv(d)._includesKey_("hello");
  64171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64172. $ctx1.sendIdx["includesKey:"]=1;
  64173. //>>excludeEnd("ctx");
  64174. self._assert_($3);
  64175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64176. $ctx1.sendIdx["assert:"]=1;
  64177. //>>excludeEnd("ctx");
  64178. $4=$recv(d)._includesKey_("foo");
  64179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64180. $ctx1.sendIdx["includesKey:"]=2;
  64181. //>>excludeEnd("ctx");
  64182. self._deny_($4);
  64183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64184. $ctx1.sendIdx["deny:"]=2;
  64185. //>>excludeEnd("ctx");
  64186. $recv(d)._at_put_((1),(2));
  64187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64188. $ctx1.sendIdx["at:put:"]=2;
  64189. //>>excludeEnd("ctx");
  64190. $5=$recv(d)._at_((1));
  64191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64192. $ctx1.sendIdx["at:"]=2;
  64193. //>>excludeEnd("ctx");
  64194. self._assert_equals_($5,(2));
  64195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64196. $ctx1.sendIdx["assert:equals:"]=3;
  64197. //>>excludeEnd("ctx");
  64198. $6=d;
  64199. $7=(1).__at((3));
  64200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64201. $ctx1.sendIdx["@"]=1;
  64202. //>>excludeEnd("ctx");
  64203. $recv($6)._at_put_($7,(3));
  64204. $9=d;
  64205. $10=(1).__at((3));
  64206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64207. $ctx1.sendIdx["@"]=2;
  64208. //>>excludeEnd("ctx");
  64209. $8=$recv($9)._at_($10);
  64210. self._assert_equals_($8,(3));
  64211. $12=d;
  64212. $13=(1).__at((3));
  64213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64214. $ctx1.sendIdx["@"]=3;
  64215. //>>excludeEnd("ctx");
  64216. $11=$recv($12)._includesKey_($13);
  64217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64218. $ctx1.sendIdx["includesKey:"]=3;
  64219. //>>excludeEnd("ctx");
  64220. self._assert_($11);
  64221. self._deny_($recv(d)._includesKey_((3).__at((1))));
  64222. return self;
  64223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64224. }, function($ctx1) {$ctx1.fill(self,"testAccessing",{d:d},$globals.DictionaryTest)});
  64225. //>>excludeEnd("ctx");
  64226. },
  64227. //>>excludeStart("ide", pragmas.excludeIdeData);
  64228. args: [],
  64229. source: "testAccessing\x0a\x09| d |\x0a\x0a\x09d := Dictionary new.\x0a\x0a\x09d at: 'hello' put: 'world'.\x0a\x09self assert: (d at: 'hello') equals: 'world'.\x0a\x09self assert: (d at: 'hello' ifAbsent: [ nil ]) equals: 'world'.\x0a\x09self deny: (d at: 'foo' ifAbsent: [ nil ]) = 'world'.\x0a\x0a\x09self assert: (d includesKey: 'hello').\x0a\x09self deny: (d includesKey: 'foo').\x0a\x0a\x09d at: 1 put: 2.\x0a\x09self assert: (d at: 1) equals: 2.\x0a\x0a\x09d at: 1@3 put: 3.\x0a\x09self assert: (d at: 1@3) equals: 3.\x0a\x0a\x09self assert: (d includesKey: 1@3).\x0a\x09self deny: (d includesKey: 3@1)",
  64230. referencedClasses: ["Dictionary"],
  64231. //>>excludeEnd("ide");
  64232. messageSends: ["new", "at:put:", "assert:equals:", "at:", "at:ifAbsent:", "deny:", "=", "assert:", "includesKey:", "@"]
  64233. }),
  64234. $globals.DictionaryTest);
  64235. $core.addMethod(
  64236. $core.method({
  64237. selector: "testDynamicDictionaries",
  64238. protocol: 'tests',
  64239. fn: function (){
  64240. var self=this;
  64241. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64243. return $core.withContext(function($ctx1) {
  64244. //>>excludeEnd("ctx");
  64245. self._assert_equals_($recv($globals.HashedCollection._newFromPairs_(["hello",(1)]))._asDictionary(),$recv($Dictionary())._with_("hello".__minus_gt((1))));
  64246. return self;
  64247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64248. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaries",{},$globals.DictionaryTest)});
  64249. //>>excludeEnd("ctx");
  64250. },
  64251. //>>excludeStart("ide", pragmas.excludeIdeData);
  64252. args: [],
  64253. source: "testDynamicDictionaries\x0a\x09self assert: #{'hello' -> 1} asDictionary equals: (Dictionary with: 'hello' -> 1)",
  64254. referencedClasses: ["Dictionary"],
  64255. //>>excludeEnd("ide");
  64256. messageSends: ["assert:equals:", "asDictionary", "with:", "->"]
  64257. }),
  64258. $globals.DictionaryTest);
  64259. $core.addMethod(
  64260. $core.method({
  64261. selector: "collectionClass",
  64262. protocol: 'fixture',
  64263. fn: function (){
  64264. var self=this;
  64265. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  64266. return $Dictionary();
  64267. },
  64268. //>>excludeStart("ide", pragmas.excludeIdeData);
  64269. args: [],
  64270. source: "collectionClass\x0a\x09^ Dictionary",
  64271. referencedClasses: ["Dictionary"],
  64272. //>>excludeEnd("ide");
  64273. messageSends: []
  64274. }),
  64275. $globals.DictionaryTest.klass);
  64276. $core.addClass('HashedCollectionTest', $globals.AssociativeCollectionTest, [], 'Kernel-Tests');
  64277. $core.addMethod(
  64278. $core.method({
  64279. selector: "collection",
  64280. protocol: 'fixture',
  64281. fn: function (){
  64282. var self=this;
  64283. var $1;
  64284. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4)]);
  64285. return $1;
  64286. },
  64287. //>>excludeStart("ide", pragmas.excludeIdeData);
  64288. args: [],
  64289. source: "collection\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4 }",
  64290. referencedClasses: [],
  64291. //>>excludeEnd("ide");
  64292. messageSends: []
  64293. }),
  64294. $globals.HashedCollectionTest);
  64295. $core.addMethod(
  64296. $core.method({
  64297. selector: "collectionKeys",
  64298. protocol: 'fixture',
  64299. fn: function (){
  64300. var self=this;
  64301. var $1;
  64302. $1=["b","a","c","d"];
  64303. return $1;
  64304. },
  64305. //>>excludeStart("ide", pragmas.excludeIdeData);
  64306. args: [],
  64307. source: "collectionKeys\x0a\x09^ { 'b'. 'a'. 'c'. 'd' }",
  64308. referencedClasses: [],
  64309. //>>excludeEnd("ide");
  64310. messageSends: []
  64311. }),
  64312. $globals.HashedCollectionTest);
  64313. $core.addMethod(
  64314. $core.method({
  64315. selector: "collectionOfPrintStrings",
  64316. protocol: 'fixture',
  64317. fn: function (){
  64318. var self=this;
  64319. var $1;
  64320. $1=$globals.HashedCollection._newFromPairs_(["b","1","a","2","c","3","d","-4"]);
  64321. return $1;
  64322. },
  64323. //>>excludeStart("ide", pragmas.excludeIdeData);
  64324. args: [],
  64325. source: "collectionOfPrintStrings\x0a\x09^ #{ 'b' -> '1'. 'a' -> '2'. 'c' -> '3'. 'd' -> '-4' }",
  64326. referencedClasses: [],
  64327. //>>excludeEnd("ide");
  64328. messageSends: []
  64329. }),
  64330. $globals.HashedCollectionTest);
  64331. $core.addMethod(
  64332. $core.method({
  64333. selector: "collectionSize",
  64334. protocol: 'fixture',
  64335. fn: function (){
  64336. var self=this;
  64337. return (4);
  64338. },
  64339. //>>excludeStart("ide", pragmas.excludeIdeData);
  64340. args: [],
  64341. source: "collectionSize\x0a\x09^ 4",
  64342. referencedClasses: [],
  64343. //>>excludeEnd("ide");
  64344. messageSends: []
  64345. }),
  64346. $globals.HashedCollectionTest);
  64347. $core.addMethod(
  64348. $core.method({
  64349. selector: "collectionValues",
  64350. protocol: 'fixture',
  64351. fn: function (){
  64352. var self=this;
  64353. var $1;
  64354. $1=[(1),(2),(3),(-4)];
  64355. return $1;
  64356. },
  64357. //>>excludeStart("ide", pragmas.excludeIdeData);
  64358. args: [],
  64359. source: "collectionValues\x0a\x09^ { 1. 2. 3. -4 }",
  64360. referencedClasses: [],
  64361. //>>excludeEnd("ide");
  64362. messageSends: []
  64363. }),
  64364. $globals.HashedCollectionTest);
  64365. $core.addMethod(
  64366. $core.method({
  64367. selector: "collectionWithDuplicates",
  64368. protocol: 'fixture',
  64369. fn: function (){
  64370. var self=this;
  64371. var $1;
  64372. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4),"e",(1),"f",(2),"g",(10)]);
  64373. return $1;
  64374. },
  64375. //>>excludeStart("ide", pragmas.excludeIdeData);
  64376. args: [],
  64377. source: "collectionWithDuplicates\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4. 'e' -> 1. 'f' -> 2. 'g' -> 10 }",
  64378. referencedClasses: [],
  64379. //>>excludeEnd("ide");
  64380. messageSends: []
  64381. }),
  64382. $globals.HashedCollectionTest);
  64383. $core.addMethod(
  64384. $core.method({
  64385. selector: "collectionWithNewValue",
  64386. protocol: 'fixture',
  64387. fn: function (){
  64388. var self=this;
  64389. var $1;
  64390. $1=$globals.HashedCollection._newFromPairs_(["b",(1),"a",(2),"c",(3),"d",(-4),"new","N"]);
  64391. return $1;
  64392. },
  64393. //>>excludeStart("ide", pragmas.excludeIdeData);
  64394. args: [],
  64395. source: "collectionWithNewValue\x0a\x09^ #{ 'b' -> 1. 'a' -> 2. 'c' -> 3. 'd' -> -4. 'new' -> 'N' }",
  64396. referencedClasses: [],
  64397. //>>excludeEnd("ide");
  64398. messageSends: []
  64399. }),
  64400. $globals.HashedCollectionTest);
  64401. $core.addMethod(
  64402. $core.method({
  64403. selector: "sampleNewValueAsCollection",
  64404. protocol: 'fixture',
  64405. fn: function (){
  64406. var self=this;
  64407. var $1;
  64408. $1=$globals.HashedCollection._newFromPairs_(["new","N"]);
  64409. return $1;
  64410. },
  64411. //>>excludeStart("ide", pragmas.excludeIdeData);
  64412. args: [],
  64413. source: "sampleNewValueAsCollection\x0a\x09^ #{ 'new' -> 'N' }",
  64414. referencedClasses: [],
  64415. //>>excludeEnd("ide");
  64416. messageSends: []
  64417. }),
  64418. $globals.HashedCollectionTest);
  64419. $core.addMethod(
  64420. $core.method({
  64421. selector: "testDynamicDictionaries",
  64422. protocol: 'tests',
  64423. fn: function (){
  64424. var self=this;
  64425. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  64426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64427. return $core.withContext(function($ctx1) {
  64428. //>>excludeEnd("ctx");
  64429. self._assert_equals_($recv($globals.HashedCollection._newFromPairs_(["hello",(1)]))._asHashedCollection(),$recv($HashedCollection())._with_("hello".__minus_gt((1))));
  64430. return self;
  64431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64432. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaries",{},$globals.HashedCollectionTest)});
  64433. //>>excludeEnd("ctx");
  64434. },
  64435. //>>excludeStart("ide", pragmas.excludeIdeData);
  64436. args: [],
  64437. source: "testDynamicDictionaries\x0a\x09self assert: #{'hello' -> 1} asHashedCollection equals: (HashedCollection with: 'hello' -> 1)",
  64438. referencedClasses: ["HashedCollection"],
  64439. //>>excludeEnd("ide");
  64440. messageSends: ["assert:equals:", "asHashedCollection", "with:", "->"]
  64441. }),
  64442. $globals.HashedCollectionTest);
  64443. $core.addMethod(
  64444. $core.method({
  64445. selector: "collectionClass",
  64446. protocol: 'fixture',
  64447. fn: function (){
  64448. var self=this;
  64449. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  64450. return $HashedCollection();
  64451. },
  64452. //>>excludeStart("ide", pragmas.excludeIdeData);
  64453. args: [],
  64454. source: "collectionClass\x0a\x09^ HashedCollection",
  64455. referencedClasses: ["HashedCollection"],
  64456. //>>excludeEnd("ide");
  64457. messageSends: []
  64458. }),
  64459. $globals.HashedCollectionTest.klass);
  64460. $core.addClass('SequenceableCollectionTest', $globals.IndexableCollectionTest, [], 'Kernel-Tests');
  64461. $core.addMethod(
  64462. $core.method({
  64463. selector: "collectionFirst",
  64464. protocol: 'fixture',
  64465. fn: function (){
  64466. var self=this;
  64467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64468. return $core.withContext(function($ctx1) {
  64469. //>>excludeEnd("ctx");
  64470. self._subclassResponsibility();
  64471. return self;
  64472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64473. }, function($ctx1) {$ctx1.fill(self,"collectionFirst",{},$globals.SequenceableCollectionTest)});
  64474. //>>excludeEnd("ctx");
  64475. },
  64476. //>>excludeStart("ide", pragmas.excludeIdeData);
  64477. args: [],
  64478. source: "collectionFirst\x0a\x09self subclassResponsibility",
  64479. referencedClasses: [],
  64480. //>>excludeEnd("ide");
  64481. messageSends: ["subclassResponsibility"]
  64482. }),
  64483. $globals.SequenceableCollectionTest);
  64484. $core.addMethod(
  64485. $core.method({
  64486. selector: "collectionFirstTwo",
  64487. protocol: 'fixture',
  64488. fn: function (){
  64489. var self=this;
  64490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64491. return $core.withContext(function($ctx1) {
  64492. //>>excludeEnd("ctx");
  64493. self._subclassResponsibility();
  64494. return self;
  64495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64496. }, function($ctx1) {$ctx1.fill(self,"collectionFirstTwo",{},$globals.SequenceableCollectionTest)});
  64497. //>>excludeEnd("ctx");
  64498. },
  64499. //>>excludeStart("ide", pragmas.excludeIdeData);
  64500. args: [],
  64501. source: "collectionFirstTwo\x0a\x09self subclassResponsibility",
  64502. referencedClasses: [],
  64503. //>>excludeEnd("ide");
  64504. messageSends: ["subclassResponsibility"]
  64505. }),
  64506. $globals.SequenceableCollectionTest);
  64507. $core.addMethod(
  64508. $core.method({
  64509. selector: "collectionLast",
  64510. protocol: 'fixture',
  64511. fn: function (){
  64512. var self=this;
  64513. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64514. return $core.withContext(function($ctx1) {
  64515. //>>excludeEnd("ctx");
  64516. self._subclassResponsibility();
  64517. return self;
  64518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64519. }, function($ctx1) {$ctx1.fill(self,"collectionLast",{},$globals.SequenceableCollectionTest)});
  64520. //>>excludeEnd("ctx");
  64521. },
  64522. //>>excludeStart("ide", pragmas.excludeIdeData);
  64523. args: [],
  64524. source: "collectionLast\x0a\x09self subclassResponsibility",
  64525. referencedClasses: [],
  64526. //>>excludeEnd("ide");
  64527. messageSends: ["subclassResponsibility"]
  64528. }),
  64529. $globals.SequenceableCollectionTest);
  64530. $core.addMethod(
  64531. $core.method({
  64532. selector: "collectionLastTwo",
  64533. protocol: 'fixture',
  64534. fn: function (){
  64535. var self=this;
  64536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64537. return $core.withContext(function($ctx1) {
  64538. //>>excludeEnd("ctx");
  64539. self._subclassResponsibility();
  64540. return self;
  64541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64542. }, function($ctx1) {$ctx1.fill(self,"collectionLastTwo",{},$globals.SequenceableCollectionTest)});
  64543. //>>excludeEnd("ctx");
  64544. },
  64545. //>>excludeStart("ide", pragmas.excludeIdeData);
  64546. args: [],
  64547. source: "collectionLastTwo\x0a\x09self subclassResponsibility",
  64548. referencedClasses: [],
  64549. //>>excludeEnd("ide");
  64550. messageSends: ["subclassResponsibility"]
  64551. }),
  64552. $globals.SequenceableCollectionTest);
  64553. $core.addMethod(
  64554. $core.method({
  64555. selector: "nonIndexesDo:",
  64556. protocol: 'fixture',
  64557. fn: function (aBlock){
  64558. var self=this;
  64559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64560. return $core.withContext(function($ctx1) {
  64561. //>>excludeEnd("ctx");
  64562. $recv(aBlock)._value_((0));
  64563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64564. $ctx1.sendIdx["value:"]=1;
  64565. //>>excludeEnd("ctx");
  64566. $recv(aBlock)._value_($recv(self._collectionSize()).__plus((1)));
  64567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64568. $ctx1.sendIdx["value:"]=2;
  64569. //>>excludeEnd("ctx");
  64570. $recv(aBlock)._value_("z");
  64571. return self;
  64572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64573. }, function($ctx1) {$ctx1.fill(self,"nonIndexesDo:",{aBlock:aBlock},$globals.SequenceableCollectionTest)});
  64574. //>>excludeEnd("ctx");
  64575. },
  64576. //>>excludeStart("ide", pragmas.excludeIdeData);
  64577. args: ["aBlock"],
  64578. source: "nonIndexesDo: aBlock\x0a\x09aBlock value: 0.\x0a\x09aBlock value: self collectionSize + 1.\x0a\x09aBlock value: 'z'",
  64579. referencedClasses: [],
  64580. //>>excludeEnd("ide");
  64581. messageSends: ["value:", "+", "collectionSize"]
  64582. }),
  64583. $globals.SequenceableCollectionTest);
  64584. $core.addMethod(
  64585. $core.method({
  64586. selector: "samplesDo:",
  64587. protocol: 'fixture',
  64588. fn: function (aBlock){
  64589. var self=this;
  64590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64591. return $core.withContext(function($ctx1) {
  64592. //>>excludeEnd("ctx");
  64593. $recv(aBlock)._value_value_((1),self._collectionFirst());
  64594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64595. $ctx1.sendIdx["value:value:"]=1;
  64596. //>>excludeEnd("ctx");
  64597. $recv(aBlock)._value_value_(self._collectionSize(),self._collectionLast());
  64598. return self;
  64599. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64600. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.SequenceableCollectionTest)});
  64601. //>>excludeEnd("ctx");
  64602. },
  64603. //>>excludeStart("ide", pragmas.excludeIdeData);
  64604. args: ["aBlock"],
  64605. source: "samplesDo: aBlock\x0a\x09aBlock value: 1 value: self collectionFirst.\x0a\x09aBlock value: self collectionSize value: self collectionLast",
  64606. referencedClasses: [],
  64607. //>>excludeEnd("ide");
  64608. messageSends: ["value:value:", "collectionFirst", "collectionSize", "collectionLast"]
  64609. }),
  64610. $globals.SequenceableCollectionTest);
  64611. $core.addMethod(
  64612. $core.method({
  64613. selector: "testBeginsWith",
  64614. protocol: 'tests',
  64615. fn: function (){
  64616. var self=this;
  64617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64618. return $core.withContext(function($ctx1) {
  64619. //>>excludeEnd("ctx");
  64620. var $2,$1,$4,$5,$3,$7,$6;
  64621. $2=self._collection();
  64622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64623. $ctx1.sendIdx["collection"]=1;
  64624. //>>excludeEnd("ctx");
  64625. $1=$recv($2)._beginsWith_($recv(self._collectionClass())._new());
  64626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64627. $ctx1.sendIdx["beginsWith:"]=1;
  64628. //>>excludeEnd("ctx");
  64629. self._assert_($1);
  64630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64631. $ctx1.sendIdx["assert:"]=1;
  64632. //>>excludeEnd("ctx");
  64633. $4=self._collection();
  64634. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64635. $ctx1.sendIdx["collection"]=2;
  64636. //>>excludeEnd("ctx");
  64637. $5=self._collection();
  64638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64639. $ctx1.sendIdx["collection"]=3;
  64640. //>>excludeEnd("ctx");
  64641. $3=$recv($4)._beginsWith_($5);
  64642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64643. $ctx1.sendIdx["beginsWith:"]=2;
  64644. //>>excludeEnd("ctx");
  64645. self._assert_($3);
  64646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64647. $ctx1.sendIdx["assert:"]=2;
  64648. //>>excludeEnd("ctx");
  64649. $7=self._collection();
  64650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64651. $ctx1.sendIdx["collection"]=4;
  64652. //>>excludeEnd("ctx");
  64653. $6=$recv($7)._beginsWith_(self._collectionFirstTwo());
  64654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64655. $ctx1.sendIdx["beginsWith:"]=3;
  64656. //>>excludeEnd("ctx");
  64657. self._assert_($6);
  64658. self._deny_($recv(self._collection())._beginsWith_(self._collectionLastTwo()));
  64659. return self;
  64660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64661. }, function($ctx1) {$ctx1.fill(self,"testBeginsWith",{},$globals.SequenceableCollectionTest)});
  64662. //>>excludeEnd("ctx");
  64663. },
  64664. //>>excludeStart("ide", pragmas.excludeIdeData);
  64665. args: [],
  64666. source: "testBeginsWith\x0a\x09self assert: (self collection beginsWith: self collectionClass new).\x0a\x09self assert: (self collection beginsWith: self collection).\x0a\x09self assert: (self collection beginsWith: self collectionFirstTwo).\x0a\x09self deny: (self collection beginsWith: self collectionLastTwo)",
  64667. referencedClasses: [],
  64668. //>>excludeEnd("ide");
  64669. messageSends: ["assert:", "beginsWith:", "collection", "new", "collectionClass", "collectionFirstTwo", "deny:", "collectionLastTwo"]
  64670. }),
  64671. $globals.SequenceableCollectionTest);
  64672. $core.addMethod(
  64673. $core.method({
  64674. selector: "testEndsWith",
  64675. protocol: 'tests',
  64676. fn: function (){
  64677. var self=this;
  64678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64679. return $core.withContext(function($ctx1) {
  64680. //>>excludeEnd("ctx");
  64681. var $2,$1,$4,$5,$3,$7,$6;
  64682. $2=self._collection();
  64683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64684. $ctx1.sendIdx["collection"]=1;
  64685. //>>excludeEnd("ctx");
  64686. $1=$recv($2)._endsWith_($recv(self._collectionClass())._new());
  64687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64688. $ctx1.sendIdx["endsWith:"]=1;
  64689. //>>excludeEnd("ctx");
  64690. self._assert_($1);
  64691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64692. $ctx1.sendIdx["assert:"]=1;
  64693. //>>excludeEnd("ctx");
  64694. $4=self._collection();
  64695. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64696. $ctx1.sendIdx["collection"]=2;
  64697. //>>excludeEnd("ctx");
  64698. $5=self._collection();
  64699. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64700. $ctx1.sendIdx["collection"]=3;
  64701. //>>excludeEnd("ctx");
  64702. $3=$recv($4)._endsWith_($5);
  64703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64704. $ctx1.sendIdx["endsWith:"]=2;
  64705. //>>excludeEnd("ctx");
  64706. self._assert_($3);
  64707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64708. $ctx1.sendIdx["assert:"]=2;
  64709. //>>excludeEnd("ctx");
  64710. $7=self._collection();
  64711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64712. $ctx1.sendIdx["collection"]=4;
  64713. //>>excludeEnd("ctx");
  64714. $6=$recv($7)._endsWith_(self._collectionLastTwo());
  64715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64716. $ctx1.sendIdx["endsWith:"]=3;
  64717. //>>excludeEnd("ctx");
  64718. self._assert_($6);
  64719. self._deny_($recv(self._collection())._endsWith_(self._collectionFirstTwo()));
  64720. return self;
  64721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64722. }, function($ctx1) {$ctx1.fill(self,"testEndsWith",{},$globals.SequenceableCollectionTest)});
  64723. //>>excludeEnd("ctx");
  64724. },
  64725. //>>excludeStart("ide", pragmas.excludeIdeData);
  64726. args: [],
  64727. source: "testEndsWith\x0a\x09self assert: (self collection endsWith: self collectionClass new).\x0a\x09self assert: (self collection endsWith: self collection).\x0a\x09self assert: (self collection endsWith: self collectionLastTwo).\x0a\x09self deny: (self collection endsWith: self collectionFirstTwo)",
  64728. referencedClasses: [],
  64729. //>>excludeEnd("ide");
  64730. messageSends: ["assert:", "endsWith:", "collection", "new", "collectionClass", "collectionLastTwo", "deny:", "collectionFirstTwo"]
  64731. }),
  64732. $globals.SequenceableCollectionTest);
  64733. $core.addMethod(
  64734. $core.method({
  64735. selector: "testFirst",
  64736. protocol: 'tests',
  64737. fn: function (){
  64738. var self=this;
  64739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64740. return $core.withContext(function($ctx1) {
  64741. //>>excludeEnd("ctx");
  64742. self._assert_equals_($recv(self._collection())._first(),self._collectionFirst());
  64743. return self;
  64744. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64745. }, function($ctx1) {$ctx1.fill(self,"testFirst",{},$globals.SequenceableCollectionTest)});
  64746. //>>excludeEnd("ctx");
  64747. },
  64748. //>>excludeStart("ide", pragmas.excludeIdeData);
  64749. args: [],
  64750. source: "testFirst\x0a\x09self assert: self collection first equals: self collectionFirst",
  64751. referencedClasses: [],
  64752. //>>excludeEnd("ide");
  64753. messageSends: ["assert:equals:", "first", "collection", "collectionFirst"]
  64754. }),
  64755. $globals.SequenceableCollectionTest);
  64756. $core.addMethod(
  64757. $core.method({
  64758. selector: "testFirstN",
  64759. protocol: 'tests',
  64760. fn: function (){
  64761. var self=this;
  64762. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  64763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64764. return $core.withContext(function($ctx1) {
  64765. //>>excludeEnd("ctx");
  64766. var $2,$1,$4,$3,$6,$5,$7;
  64767. $2=self._collection();
  64768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64769. $ctx1.sendIdx["collection"]=1;
  64770. //>>excludeEnd("ctx");
  64771. $1=$recv($2)._first_((2));
  64772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64773. $ctx1.sendIdx["first:"]=1;
  64774. //>>excludeEnd("ctx");
  64775. self._assert_equals_($1,self._collectionFirstTwo());
  64776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64777. $ctx1.sendIdx["assert:equals:"]=1;
  64778. //>>excludeEnd("ctx");
  64779. $4=self._collection();
  64780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64781. $ctx1.sendIdx["collection"]=2;
  64782. //>>excludeEnd("ctx");
  64783. $3=$recv($4)._first_((0));
  64784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64785. $ctx1.sendIdx["first:"]=2;
  64786. //>>excludeEnd("ctx");
  64787. self._assert_equals_($3,$recv(self._collectionClass())._new());
  64788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64789. $ctx1.sendIdx["assert:equals:"]=2;
  64790. //>>excludeEnd("ctx");
  64791. $6=self._collection();
  64792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64793. $ctx1.sendIdx["collection"]=3;
  64794. //>>excludeEnd("ctx");
  64795. $5=$recv($6)._first_(self._collectionSize());
  64796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64797. $ctx1.sendIdx["first:"]=3;
  64798. //>>excludeEnd("ctx");
  64799. $7=self._collection();
  64800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64801. $ctx1.sendIdx["collection"]=4;
  64802. //>>excludeEnd("ctx");
  64803. self._assert_equals_($5,$7);
  64804. self._should_raise_((function(){
  64805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64806. return $core.withContext(function($ctx2) {
  64807. //>>excludeEnd("ctx");
  64808. return $recv(self._collection())._first_((33));
  64809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64810. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  64811. //>>excludeEnd("ctx");
  64812. }),$Error());
  64813. return self;
  64814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64815. }, function($ctx1) {$ctx1.fill(self,"testFirstN",{},$globals.SequenceableCollectionTest)});
  64816. //>>excludeEnd("ctx");
  64817. },
  64818. //>>excludeStart("ide", pragmas.excludeIdeData);
  64819. args: [],
  64820. source: "testFirstN\x0a\x09self \x0a\x09\x09assert: (self collection first: 2)\x0a\x09\x09equals: self collectionFirstTwo.\x0a\x09\x09\x0a\x09self\x0a\x09\x09assert: (self collection first: 0)\x0a\x09\x09equals: self collectionClass new.\x0a\x09\x09\x0a\x09self\x0a\x09\x09assert: (self collection first: self collectionSize)\x0a\x09\x09equals: self collection.\x0a\x09\x09\x0a\x09self should: [ self collection first: 33 ] raise: Error",
  64821. referencedClasses: ["Error"],
  64822. //>>excludeEnd("ide");
  64823. messageSends: ["assert:equals:", "first:", "collection", "collectionFirstTwo", "new", "collectionClass", "collectionSize", "should:raise:"]
  64824. }),
  64825. $globals.SequenceableCollectionTest);
  64826. $core.addMethod(
  64827. $core.method({
  64828. selector: "testFourth",
  64829. protocol: 'tests',
  64830. fn: function (){
  64831. var self=this;
  64832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64833. return $core.withContext(function($ctx1) {
  64834. //>>excludeEnd("ctx");
  64835. var $2,$1;
  64836. $2=self._collection();
  64837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64838. $ctx1.sendIdx["collection"]=1;
  64839. //>>excludeEnd("ctx");
  64840. $1=$recv($2)._fourth();
  64841. self._assert_equals_($1,$recv(self._collection())._at_((4)));
  64842. return self;
  64843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64844. }, function($ctx1) {$ctx1.fill(self,"testFourth",{},$globals.SequenceableCollectionTest)});
  64845. //>>excludeEnd("ctx");
  64846. },
  64847. //>>excludeStart("ide", pragmas.excludeIdeData);
  64848. args: [],
  64849. source: "testFourth\x0a\x09self assert: (self collection fourth) equals: (self collection at: 4)",
  64850. referencedClasses: [],
  64851. //>>excludeEnd("ide");
  64852. messageSends: ["assert:equals:", "fourth", "collection", "at:"]
  64853. }),
  64854. $globals.SequenceableCollectionTest);
  64855. $core.addMethod(
  64856. $core.method({
  64857. selector: "testIndexOfStartingAt",
  64858. protocol: 'tests',
  64859. fn: function (){
  64860. var self=this;
  64861. var jsNull;
  64862. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  64863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64864. return $core.withContext(function($ctx1) {
  64865. //>>excludeEnd("ctx");
  64866. var $2,$1,$4,$3;
  64867. jsNull=$recv($JSON())._parse_("null");
  64868. self._samplesDo_((function(index,value){
  64869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64870. return $core.withContext(function($ctx2) {
  64871. //>>excludeEnd("ctx");
  64872. $2=self._collection();
  64873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64874. $ctx2.sendIdx["collection"]=1;
  64875. //>>excludeEnd("ctx");
  64876. $1=$recv($2)._indexOf_startingAt_(value,(1));
  64877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64878. $ctx2.sendIdx["indexOf:startingAt:"]=1;
  64879. //>>excludeEnd("ctx");
  64880. self._assert_equals_($1,index);
  64881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64882. $ctx2.sendIdx["assert:equals:"]=1;
  64883. //>>excludeEnd("ctx");
  64884. $4=self._collection();
  64885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64886. $ctx2.sendIdx["collection"]=2;
  64887. //>>excludeEnd("ctx");
  64888. $3=$recv($4)._indexOf_startingAt_(value,index);
  64889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64890. $ctx2.sendIdx["indexOf:startingAt:"]=2;
  64891. //>>excludeEnd("ctx");
  64892. self._assert_equals_($3,index);
  64893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64894. $ctx2.sendIdx["assert:equals:"]=2;
  64895. //>>excludeEnd("ctx");
  64896. return self._assert_equals_($recv(self._collection())._indexOf_startingAt_(value,$recv(index).__plus((1))),(0));
  64897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64898. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value},$ctx1,1)});
  64899. //>>excludeEnd("ctx");
  64900. }));
  64901. return self;
  64902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64903. }, function($ctx1) {$ctx1.fill(self,"testIndexOfStartingAt",{jsNull:jsNull},$globals.SequenceableCollectionTest)});
  64904. //>>excludeEnd("ctx");
  64905. },
  64906. //>>excludeStart("ide", pragmas.excludeIdeData);
  64907. args: [],
  64908. source: "testIndexOfStartingAt\x0a\x09| jsNull |\x0a\x09jsNull := JSON parse: 'null'.\x0a\x09self samplesDo: [ :index :value |\x0a\x09\x09self assert: (self collection indexOf: value startingAt: 1) equals: index.\x0a\x09\x09self assert: (self collection indexOf: value startingAt: index) equals: index.\x0a\x09\x09self assert: (self collection indexOf: value startingAt: index+1) equals: 0 ]",
  64909. referencedClasses: ["JSON"],
  64910. //>>excludeEnd("ide");
  64911. messageSends: ["parse:", "samplesDo:", "assert:equals:", "indexOf:startingAt:", "collection", "+"]
  64912. }),
  64913. $globals.SequenceableCollectionTest);
  64914. $core.addMethod(
  64915. $core.method({
  64916. selector: "testIndexOfStartingAtWithNull",
  64917. protocol: 'tests',
  64918. fn: function (){
  64919. var self=this;
  64920. var jsNull;
  64921. function $JSON(){return $globals.JSON||(typeof JSON=="undefined"?nil:JSON)}
  64922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64923. return $core.withContext(function($ctx1) {
  64924. //>>excludeEnd("ctx");
  64925. var $1,$2;
  64926. jsNull=$recv($JSON())._parse_("null");
  64927. self._samplesDo_((function(index,value){
  64928. var collection;
  64929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64930. return $core.withContext(function($ctx2) {
  64931. //>>excludeEnd("ctx");
  64932. collection=self._collection();
  64933. collection;
  64934. $recv(collection)._at_put_(index,jsNull);
  64935. $1=$recv(collection)._indexOf_startingAt_(jsNull,(1));
  64936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64937. $ctx2.sendIdx["indexOf:startingAt:"]=1;
  64938. //>>excludeEnd("ctx");
  64939. self._assert_equals_($1,index);
  64940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64941. $ctx2.sendIdx["assert:equals:"]=1;
  64942. //>>excludeEnd("ctx");
  64943. $2=$recv(collection)._indexOf_startingAt_(jsNull,index);
  64944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64945. $ctx2.sendIdx["indexOf:startingAt:"]=2;
  64946. //>>excludeEnd("ctx");
  64947. self._assert_equals_($2,index);
  64948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64949. $ctx2.sendIdx["assert:equals:"]=2;
  64950. //>>excludeEnd("ctx");
  64951. return self._assert_equals_($recv(collection)._indexOf_startingAt_(jsNull,$recv(index).__plus((1))),(0));
  64952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64953. }, function($ctx2) {$ctx2.fillBlock({index:index,value:value,collection:collection},$ctx1,1)});
  64954. //>>excludeEnd("ctx");
  64955. }));
  64956. return self;
  64957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64958. }, function($ctx1) {$ctx1.fill(self,"testIndexOfStartingAtWithNull",{jsNull:jsNull},$globals.SequenceableCollectionTest)});
  64959. //>>excludeEnd("ctx");
  64960. },
  64961. //>>excludeStart("ide", pragmas.excludeIdeData);
  64962. args: [],
  64963. source: "testIndexOfStartingAtWithNull\x0a\x09| jsNull |\x0a\x09jsNull := JSON parse: 'null'.\x0a\x09self samplesDo: [ :index :value | | collection |\x0a\x09\x09collection := self collection.\x0a\x09\x09collection at: index put: jsNull.\x0a\x09\x09self assert: (collection indexOf: jsNull startingAt: 1) equals: index.\x0a\x09\x09self assert: (collection indexOf: jsNull startingAt: index) equals: index.\x0a\x09\x09self assert: (collection indexOf: jsNull startingAt: index+1) equals: 0 ]",
  64964. referencedClasses: ["JSON"],
  64965. //>>excludeEnd("ide");
  64966. messageSends: ["parse:", "samplesDo:", "collection", "at:put:", "assert:equals:", "indexOf:startingAt:", "+"]
  64967. }),
  64968. $globals.SequenceableCollectionTest);
  64969. $core.addMethod(
  64970. $core.method({
  64971. selector: "testLast",
  64972. protocol: 'tests',
  64973. fn: function (){
  64974. var self=this;
  64975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64976. return $core.withContext(function($ctx1) {
  64977. //>>excludeEnd("ctx");
  64978. self._assert_equals_($recv(self._collection())._last(),self._collectionLast());
  64979. return self;
  64980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64981. }, function($ctx1) {$ctx1.fill(self,"testLast",{},$globals.SequenceableCollectionTest)});
  64982. //>>excludeEnd("ctx");
  64983. },
  64984. //>>excludeStart("ide", pragmas.excludeIdeData);
  64985. args: [],
  64986. source: "testLast\x0a\x09self assert: self collection last equals: self collectionLast",
  64987. referencedClasses: [],
  64988. //>>excludeEnd("ide");
  64989. messageSends: ["assert:equals:", "last", "collection", "collectionLast"]
  64990. }),
  64991. $globals.SequenceableCollectionTest);
  64992. $core.addMethod(
  64993. $core.method({
  64994. selector: "testLastN",
  64995. protocol: 'tests',
  64996. fn: function (){
  64997. var self=this;
  64998. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  64999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65000. return $core.withContext(function($ctx1) {
  65001. //>>excludeEnd("ctx");
  65002. var $2,$1,$4,$3,$6,$5,$7;
  65003. $2=self._collection();
  65004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65005. $ctx1.sendIdx["collection"]=1;
  65006. //>>excludeEnd("ctx");
  65007. $1=$recv($2)._last_((2));
  65008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65009. $ctx1.sendIdx["last:"]=1;
  65010. //>>excludeEnd("ctx");
  65011. self._assert_equals_($1,self._collectionLastTwo());
  65012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65013. $ctx1.sendIdx["assert:equals:"]=1;
  65014. //>>excludeEnd("ctx");
  65015. $4=self._collection();
  65016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65017. $ctx1.sendIdx["collection"]=2;
  65018. //>>excludeEnd("ctx");
  65019. $3=$recv($4)._last_((0));
  65020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65021. $ctx1.sendIdx["last:"]=2;
  65022. //>>excludeEnd("ctx");
  65023. self._assert_equals_($3,$recv(self._collectionClass())._new());
  65024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65025. $ctx1.sendIdx["assert:equals:"]=2;
  65026. //>>excludeEnd("ctx");
  65027. $6=self._collection();
  65028. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65029. $ctx1.sendIdx["collection"]=3;
  65030. //>>excludeEnd("ctx");
  65031. $5=$recv($6)._last_(self._collectionSize());
  65032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65033. $ctx1.sendIdx["last:"]=3;
  65034. //>>excludeEnd("ctx");
  65035. $7=self._collection();
  65036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65037. $ctx1.sendIdx["collection"]=4;
  65038. //>>excludeEnd("ctx");
  65039. self._assert_equals_($5,$7);
  65040. self._should_raise_((function(){
  65041. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65042. return $core.withContext(function($ctx2) {
  65043. //>>excludeEnd("ctx");
  65044. return $recv(self._collection())._last_((33));
  65045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65046. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  65047. //>>excludeEnd("ctx");
  65048. }),$Error());
  65049. return self;
  65050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65051. }, function($ctx1) {$ctx1.fill(self,"testLastN",{},$globals.SequenceableCollectionTest)});
  65052. //>>excludeEnd("ctx");
  65053. },
  65054. //>>excludeStart("ide", pragmas.excludeIdeData);
  65055. args: [],
  65056. source: "testLastN\x0a\x09self \x0a\x09\x09assert: (self collection last: 2) \x0a\x09\x09equals: self collectionLastTwo.\x0a\x09\x09\x0a\x09self\x0a\x09\x09assert: (self collection last: 0)\x0a\x09\x09equals: self collectionClass new.\x0a\x0a\x09self\x0a\x09\x09assert: (self collection last: self collectionSize)\x0a\x09\x09equals: self collection.\x0a\x0a\x09self should: [ self collection last: 33 ] raise: Error",
  65057. referencedClasses: ["Error"],
  65058. //>>excludeEnd("ide");
  65059. messageSends: ["assert:equals:", "last:", "collection", "collectionLastTwo", "new", "collectionClass", "collectionSize", "should:raise:"]
  65060. }),
  65061. $globals.SequenceableCollectionTest);
  65062. $core.addMethod(
  65063. $core.method({
  65064. selector: "testSecond",
  65065. protocol: 'tests',
  65066. fn: function (){
  65067. var self=this;
  65068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65069. return $core.withContext(function($ctx1) {
  65070. //>>excludeEnd("ctx");
  65071. var $2,$1;
  65072. $2=self._collection();
  65073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65074. $ctx1.sendIdx["collection"]=1;
  65075. //>>excludeEnd("ctx");
  65076. $1=$recv($2)._second();
  65077. self._assert_equals_($1,$recv(self._collection())._at_((2)));
  65078. return self;
  65079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65080. }, function($ctx1) {$ctx1.fill(self,"testSecond",{},$globals.SequenceableCollectionTest)});
  65081. //>>excludeEnd("ctx");
  65082. },
  65083. //>>excludeStart("ide", pragmas.excludeIdeData);
  65084. args: [],
  65085. source: "testSecond\x0a\x09self assert: (self collection second) equals: (self collection at: 2)",
  65086. referencedClasses: [],
  65087. //>>excludeEnd("ide");
  65088. messageSends: ["assert:equals:", "second", "collection", "at:"]
  65089. }),
  65090. $globals.SequenceableCollectionTest);
  65091. $core.addMethod(
  65092. $core.method({
  65093. selector: "testThird",
  65094. protocol: 'tests',
  65095. fn: function (){
  65096. var self=this;
  65097. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65098. return $core.withContext(function($ctx1) {
  65099. //>>excludeEnd("ctx");
  65100. var $2,$1;
  65101. $2=self._collection();
  65102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65103. $ctx1.sendIdx["collection"]=1;
  65104. //>>excludeEnd("ctx");
  65105. $1=$recv($2)._third();
  65106. self._assert_equals_($1,$recv(self._collection())._at_((3)));
  65107. return self;
  65108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65109. }, function($ctx1) {$ctx1.fill(self,"testThird",{},$globals.SequenceableCollectionTest)});
  65110. //>>excludeEnd("ctx");
  65111. },
  65112. //>>excludeStart("ide", pragmas.excludeIdeData);
  65113. args: [],
  65114. source: "testThird\x0a\x09self assert: (self collection third) equals: (self collection at: 3)",
  65115. referencedClasses: [],
  65116. //>>excludeEnd("ide");
  65117. messageSends: ["assert:equals:", "third", "collection", "at:"]
  65118. }),
  65119. $globals.SequenceableCollectionTest);
  65120. $core.addClass('ArrayTest', $globals.SequenceableCollectionTest, [], 'Kernel-Tests');
  65121. $core.addMethod(
  65122. $core.method({
  65123. selector: "collection",
  65124. protocol: 'fixture',
  65125. fn: function (){
  65126. var self=this;
  65127. var $1;
  65128. $1=[(1), (2), (3), (-4)];
  65129. return $1;
  65130. },
  65131. //>>excludeStart("ide", pragmas.excludeIdeData);
  65132. args: [],
  65133. source: "collection\x0a\x09^ #(1 2 3 -4)",
  65134. referencedClasses: [],
  65135. //>>excludeEnd("ide");
  65136. messageSends: []
  65137. }),
  65138. $globals.ArrayTest);
  65139. $core.addMethod(
  65140. $core.method({
  65141. selector: "collectionFirst",
  65142. protocol: 'fixture',
  65143. fn: function (){
  65144. var self=this;
  65145. return (1);
  65146. },
  65147. //>>excludeStart("ide", pragmas.excludeIdeData);
  65148. args: [],
  65149. source: "collectionFirst\x0a\x09^ 1",
  65150. referencedClasses: [],
  65151. //>>excludeEnd("ide");
  65152. messageSends: []
  65153. }),
  65154. $globals.ArrayTest);
  65155. $core.addMethod(
  65156. $core.method({
  65157. selector: "collectionFirstTwo",
  65158. protocol: 'fixture',
  65159. fn: function (){
  65160. var self=this;
  65161. var $1;
  65162. $1=[(1), (2)];
  65163. return $1;
  65164. },
  65165. //>>excludeStart("ide", pragmas.excludeIdeData);
  65166. args: [],
  65167. source: "collectionFirstTwo\x0a\x09^ #(1 2)",
  65168. referencedClasses: [],
  65169. //>>excludeEnd("ide");
  65170. messageSends: []
  65171. }),
  65172. $globals.ArrayTest);
  65173. $core.addMethod(
  65174. $core.method({
  65175. selector: "collectionLast",
  65176. protocol: 'fixture',
  65177. fn: function (){
  65178. var self=this;
  65179. return (-4);
  65180. },
  65181. //>>excludeStart("ide", pragmas.excludeIdeData);
  65182. args: [],
  65183. source: "collectionLast\x0a\x09^ -4",
  65184. referencedClasses: [],
  65185. //>>excludeEnd("ide");
  65186. messageSends: []
  65187. }),
  65188. $globals.ArrayTest);
  65189. $core.addMethod(
  65190. $core.method({
  65191. selector: "collectionLastTwo",
  65192. protocol: 'fixture',
  65193. fn: function (){
  65194. var self=this;
  65195. var $1;
  65196. $1=[(3), (-4)];
  65197. return $1;
  65198. },
  65199. //>>excludeStart("ide", pragmas.excludeIdeData);
  65200. args: [],
  65201. source: "collectionLastTwo\x0a\x09^ #(3 -4)",
  65202. referencedClasses: [],
  65203. //>>excludeEnd("ide");
  65204. messageSends: []
  65205. }),
  65206. $globals.ArrayTest);
  65207. $core.addMethod(
  65208. $core.method({
  65209. selector: "collectionOfPrintStrings",
  65210. protocol: 'fixture',
  65211. fn: function (){
  65212. var self=this;
  65213. var $1;
  65214. $1=["1", "2", "3", "-4"];
  65215. return $1;
  65216. },
  65217. //>>excludeStart("ide", pragmas.excludeIdeData);
  65218. args: [],
  65219. source: "collectionOfPrintStrings\x0a\x09^ #('1' '2' '3' '-4')",
  65220. referencedClasses: [],
  65221. //>>excludeEnd("ide");
  65222. messageSends: []
  65223. }),
  65224. $globals.ArrayTest);
  65225. $core.addMethod(
  65226. $core.method({
  65227. selector: "collectionSize",
  65228. protocol: 'fixture',
  65229. fn: function (){
  65230. var self=this;
  65231. return (4);
  65232. },
  65233. //>>excludeStart("ide", pragmas.excludeIdeData);
  65234. args: [],
  65235. source: "collectionSize\x0a\x09^ 4",
  65236. referencedClasses: [],
  65237. //>>excludeEnd("ide");
  65238. messageSends: []
  65239. }),
  65240. $globals.ArrayTest);
  65241. $core.addMethod(
  65242. $core.method({
  65243. selector: "collectionWithDuplicates",
  65244. protocol: 'fixture',
  65245. fn: function (){
  65246. var self=this;
  65247. var $1;
  65248. $1=["a", "b", "c", (1), (2), (1), "a"];
  65249. return $1;
  65250. },
  65251. //>>excludeStart("ide", pragmas.excludeIdeData);
  65252. args: [],
  65253. source: "collectionWithDuplicates\x0a\x09^ #('a' 'b' 'c' 1 2 1 'a')",
  65254. referencedClasses: [],
  65255. //>>excludeEnd("ide");
  65256. messageSends: []
  65257. }),
  65258. $globals.ArrayTest);
  65259. $core.addMethod(
  65260. $core.method({
  65261. selector: "collectionWithNewValue",
  65262. protocol: 'fixture',
  65263. fn: function (){
  65264. var self=this;
  65265. var $1;
  65266. $1=[(1), (2), (3), (-4), "N"];
  65267. return $1;
  65268. },
  65269. //>>excludeStart("ide", pragmas.excludeIdeData);
  65270. args: [],
  65271. source: "collectionWithNewValue\x0a\x09^ #(1 2 3 -4 'N')",
  65272. referencedClasses: [],
  65273. //>>excludeEnd("ide");
  65274. messageSends: []
  65275. }),
  65276. $globals.ArrayTest);
  65277. $core.addMethod(
  65278. $core.method({
  65279. selector: "sampleNewIndex",
  65280. protocol: 'fixture',
  65281. fn: function (){
  65282. var self=this;
  65283. return (5);
  65284. },
  65285. //>>excludeStart("ide", pragmas.excludeIdeData);
  65286. args: [],
  65287. source: "sampleNewIndex\x0a\x09^ 5",
  65288. referencedClasses: [],
  65289. //>>excludeEnd("ide");
  65290. messageSends: []
  65291. }),
  65292. $globals.ArrayTest);
  65293. $core.addMethod(
  65294. $core.method({
  65295. selector: "samplesDo:",
  65296. protocol: 'fixture',
  65297. fn: function (aBlock){
  65298. var self=this;
  65299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65300. return $core.withContext(function($ctx1) {
  65301. //>>excludeEnd("ctx");
  65302. (
  65303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65304. $ctx1.supercall = true,
  65305. //>>excludeEnd("ctx");
  65306. $globals.ArrayTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  65307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65308. $ctx1.supercall = false;
  65309. //>>excludeEnd("ctx");;
  65310. $recv(aBlock)._value_value_((3),(3));
  65311. return self;
  65312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65313. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.ArrayTest)});
  65314. //>>excludeEnd("ctx");
  65315. },
  65316. //>>excludeStart("ide", pragmas.excludeIdeData);
  65317. args: ["aBlock"],
  65318. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: 3 value: 3.",
  65319. referencedClasses: [],
  65320. //>>excludeEnd("ide");
  65321. messageSends: ["samplesDo:", "value:value:"]
  65322. }),
  65323. $globals.ArrayTest);
  65324. $core.addMethod(
  65325. $core.method({
  65326. selector: "testAdd",
  65327. protocol: 'tests',
  65328. fn: function (){
  65329. var self=this;
  65330. var array;
  65331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65332. return $core.withContext(function($ctx1) {
  65333. //>>excludeEnd("ctx");
  65334. array=self._collection();
  65335. $recv(array)._add_((6));
  65336. self._assert_equals_($recv(array)._last(),(6));
  65337. return self;
  65338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65339. }, function($ctx1) {$ctx1.fill(self,"testAdd",{array:array},$globals.ArrayTest)});
  65340. //>>excludeEnd("ctx");
  65341. },
  65342. //>>excludeStart("ide", pragmas.excludeIdeData);
  65343. args: [],
  65344. source: "testAdd \x0a\x09| array | \x0a\x09array := self collection. \x0a\x09array add: 6.\x0a\x09\x0a\x09self assert: array last equals: 6",
  65345. referencedClasses: [],
  65346. //>>excludeEnd("ide");
  65347. messageSends: ["collection", "add:", "assert:equals:", "last"]
  65348. }),
  65349. $globals.ArrayTest);
  65350. $core.addMethod(
  65351. $core.method({
  65352. selector: "testAddFirst",
  65353. protocol: 'tests',
  65354. fn: function (){
  65355. var self=this;
  65356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65357. return $core.withContext(function($ctx1) {
  65358. //>>excludeEnd("ctx");
  65359. var $1,$2;
  65360. $1=self._collection();
  65361. $recv($1)._addFirst_((0));
  65362. $2=$recv($1)._yourself();
  65363. self._assert_equals_($recv($2)._first(),(0));
  65364. return self;
  65365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65366. }, function($ctx1) {$ctx1.fill(self,"testAddFirst",{},$globals.ArrayTest)});
  65367. //>>excludeEnd("ctx");
  65368. },
  65369. //>>excludeStart("ide", pragmas.excludeIdeData);
  65370. args: [],
  65371. source: "testAddFirst\x0a\x09self assert: (self collection addFirst: 0; yourself) first equals: 0",
  65372. referencedClasses: [],
  65373. //>>excludeEnd("ide");
  65374. messageSends: ["assert:equals:", "first", "addFirst:", "collection", "yourself"]
  65375. }),
  65376. $globals.ArrayTest);
  65377. $core.addMethod(
  65378. $core.method({
  65379. selector: "testPrintString",
  65380. protocol: 'tests',
  65381. fn: function (){
  65382. var self=this;
  65383. var array;
  65384. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  65385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65386. return $core.withContext(function($ctx1) {
  65387. //>>excludeEnd("ctx");
  65388. var $1,$2,$3,$4,$5,$6,$7,$8,$9;
  65389. array=$recv($Array())._new();
  65390. $1=$recv(array)._printString();
  65391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65392. $ctx1.sendIdx["printString"]=1;
  65393. //>>excludeEnd("ctx");
  65394. self._assert_equals_($1,"an Array ()");
  65395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65396. $ctx1.sendIdx["assert:equals:"]=1;
  65397. //>>excludeEnd("ctx");
  65398. $2=array;
  65399. $recv($2)._add_((1));
  65400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65401. $ctx1.sendIdx["add:"]=1;
  65402. //>>excludeEnd("ctx");
  65403. $3=$recv($2)._add_((3));
  65404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65405. $ctx1.sendIdx["add:"]=2;
  65406. //>>excludeEnd("ctx");
  65407. $4=$recv(array)._printString();
  65408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65409. $ctx1.sendIdx["printString"]=2;
  65410. //>>excludeEnd("ctx");
  65411. self._assert_equals_($4,"an Array (1 3)");
  65412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65413. $ctx1.sendIdx["assert:equals:"]=2;
  65414. //>>excludeEnd("ctx");
  65415. $recv(array)._add_("foo");
  65416. $5=$recv(array)._printString();
  65417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65418. $ctx1.sendIdx["printString"]=3;
  65419. //>>excludeEnd("ctx");
  65420. self._assert_equals_($5,"an Array (1 3 'foo')");
  65421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65422. $ctx1.sendIdx["assert:equals:"]=3;
  65423. //>>excludeEnd("ctx");
  65424. $6=array;
  65425. $recv($6)._remove_((1));
  65426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65427. $ctx1.sendIdx["remove:"]=1;
  65428. //>>excludeEnd("ctx");
  65429. $7=$recv($6)._remove_((3));
  65430. $8=$recv(array)._printString();
  65431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65432. $ctx1.sendIdx["printString"]=4;
  65433. //>>excludeEnd("ctx");
  65434. self._assert_equals_($8,"an Array ('foo')");
  65435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65436. $ctx1.sendIdx["assert:equals:"]=4;
  65437. //>>excludeEnd("ctx");
  65438. $recv(array)._addLast_((3));
  65439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65440. $ctx1.sendIdx["addLast:"]=1;
  65441. //>>excludeEnd("ctx");
  65442. $9=$recv(array)._printString();
  65443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65444. $ctx1.sendIdx["printString"]=5;
  65445. //>>excludeEnd("ctx");
  65446. self._assert_equals_($9,"an Array ('foo' 3)");
  65447. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65448. $ctx1.sendIdx["assert:equals:"]=5;
  65449. //>>excludeEnd("ctx");
  65450. $recv(array)._addLast_((3));
  65451. self._assert_equals_($recv(array)._printString(),"an Array ('foo' 3 3)");
  65452. return self;
  65453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65454. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{array:array},$globals.ArrayTest)});
  65455. //>>excludeEnd("ctx");
  65456. },
  65457. //>>excludeStart("ide", pragmas.excludeIdeData);
  65458. args: [],
  65459. source: "testPrintString\x0a\x09| array |\x0a\x09array := Array new.\x0a\x09self assert: array printString equals: 'an Array ()'.\x0a\x09array add: 1; add: 3.\x0a\x09self assert: array printString equals: 'an Array (1 3)'.\x0a\x09array add: 'foo'.\x0a\x09self assert: array printString equals: 'an Array (1 3 ''foo'')'.\x0a\x09array remove: 1; remove: 3.\x0a\x09self assert: array printString equals: 'an Array (''foo'')'.\x0a\x09array addLast: 3.\x0a\x09self assert: array printString equals: 'an Array (''foo'' 3)'.\x0a\x09array addLast: 3.\x0a\x09self assert: array printString equals: 'an Array (''foo'' 3 3)'.",
  65460. referencedClasses: ["Array"],
  65461. //>>excludeEnd("ide");
  65462. messageSends: ["new", "assert:equals:", "printString", "add:", "remove:", "addLast:"]
  65463. }),
  65464. $globals.ArrayTest);
  65465. $core.addMethod(
  65466. $core.method({
  65467. selector: "testRemove",
  65468. protocol: 'tests',
  65469. fn: function (){
  65470. var self=this;
  65471. var array;
  65472. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  65473. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65474. return $core.withContext(function($ctx1) {
  65475. //>>excludeEnd("ctx");
  65476. array=[(1), (2), (3), (4), (5)];
  65477. $recv(array)._remove_((3));
  65478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65479. $ctx1.sendIdx["remove:"]=1;
  65480. //>>excludeEnd("ctx");
  65481. self._assert_equals_(array,[(1), (2), (4), (5)]);
  65482. self._should_raise_((function(){
  65483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65484. return $core.withContext(function($ctx2) {
  65485. //>>excludeEnd("ctx");
  65486. return $recv(array)._remove_((3));
  65487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65488. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  65489. //>>excludeEnd("ctx");
  65490. }),$Error());
  65491. return self;
  65492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65493. }, function($ctx1) {$ctx1.fill(self,"testRemove",{array:array},$globals.ArrayTest)});
  65494. //>>excludeEnd("ctx");
  65495. },
  65496. //>>excludeStart("ide", pragmas.excludeIdeData);
  65497. args: [],
  65498. source: "testRemove \x0a\x09| array |\x0a\x09array := #(1 2 3 4 5). \x0a\x09array remove: 3.\x0a\x0a\x09self assert: array equals: #(1 2 4 5).\x0a\x09self should: [ array remove: 3 ] raise: Error",
  65499. referencedClasses: ["Error"],
  65500. //>>excludeEnd("ide");
  65501. messageSends: ["remove:", "assert:equals:", "should:raise:"]
  65502. }),
  65503. $globals.ArrayTest);
  65504. $core.addMethod(
  65505. $core.method({
  65506. selector: "testRemoveFromTo",
  65507. protocol: 'tests',
  65508. fn: function (){
  65509. var self=this;
  65510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65511. return $core.withContext(function($ctx1) {
  65512. //>>excludeEnd("ctx");
  65513. var $1,$2;
  65514. $1=[(1), (2), (3), (4)]._removeFrom_to_((1),(3));
  65515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65516. $ctx1.sendIdx["removeFrom:to:"]=1;
  65517. //>>excludeEnd("ctx");
  65518. self._assert_equals_($1,[(4)]);
  65519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65520. $ctx1.sendIdx["assert:equals:"]=1;
  65521. //>>excludeEnd("ctx");
  65522. $2=[(1), (2), (3), (4)]._removeFrom_to_((2),(3));
  65523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65524. $ctx1.sendIdx["removeFrom:to:"]=2;
  65525. //>>excludeEnd("ctx");
  65526. self._assert_equals_($2,[(1), (4)]);
  65527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65528. $ctx1.sendIdx["assert:equals:"]=2;
  65529. //>>excludeEnd("ctx");
  65530. self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(4)),[(1)]);
  65531. return self;
  65532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65533. }, function($ctx1) {$ctx1.fill(self,"testRemoveFromTo",{},$globals.ArrayTest)});
  65534. //>>excludeEnd("ctx");
  65535. },
  65536. //>>excludeStart("ide", pragmas.excludeIdeData);
  65537. args: [],
  65538. source: "testRemoveFromTo\x0a\x09\x0a\x09self assert: (#(1 2 3 4) removeFrom: 1 to: 3) equals: #(4).\x0a\x09self assert: (#(1 2 3 4) removeFrom: 2 to: 3) equals: #(1 4).\x0a\x09self assert: (#(1 2 3 4) removeFrom: 2 to: 4) equals: #(1)",
  65539. referencedClasses: [],
  65540. //>>excludeEnd("ide");
  65541. messageSends: ["assert:equals:", "removeFrom:to:"]
  65542. }),
  65543. $globals.ArrayTest);
  65544. $core.addMethod(
  65545. $core.method({
  65546. selector: "testRemoveIndex",
  65547. protocol: 'tests',
  65548. fn: function (){
  65549. var self=this;
  65550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65551. return $core.withContext(function($ctx1) {
  65552. //>>excludeEnd("ctx");
  65553. var $1,$2;
  65554. $1=[(1), (2), (3), (4)]._removeIndex_((2));
  65555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65556. $ctx1.sendIdx["removeIndex:"]=1;
  65557. //>>excludeEnd("ctx");
  65558. self._assert_equals_($1,[(1), (3), (4)]);
  65559. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65560. $ctx1.sendIdx["assert:equals:"]=1;
  65561. //>>excludeEnd("ctx");
  65562. $2=[(1), (2), (3), (4)]._removeIndex_((1));
  65563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65564. $ctx1.sendIdx["removeIndex:"]=2;
  65565. //>>excludeEnd("ctx");
  65566. self._assert_equals_($2,[(2), (3), (4)]);
  65567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65568. $ctx1.sendIdx["assert:equals:"]=2;
  65569. //>>excludeEnd("ctx");
  65570. self._assert_equals_(["hello"]._removeIndex_((1)),[]);
  65571. return self;
  65572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65573. }, function($ctx1) {$ctx1.fill(self,"testRemoveIndex",{},$globals.ArrayTest)});
  65574. //>>excludeEnd("ctx");
  65575. },
  65576. //>>excludeStart("ide", pragmas.excludeIdeData);
  65577. args: [],
  65578. source: "testRemoveIndex\x0a\x09\x0a\x09self assert: (#(1 2 3 4) removeIndex: 2) equals: #(1 3 4).\x0a\x09self assert: (#(1 2 3 4) removeIndex: 1) equals: #(2 3 4).\x0a\x09self assert: (#('hello') removeIndex: 1) equals: #()",
  65579. referencedClasses: [],
  65580. //>>excludeEnd("ide");
  65581. messageSends: ["assert:equals:", "removeIndex:"]
  65582. }),
  65583. $globals.ArrayTest);
  65584. $core.addMethod(
  65585. $core.method({
  65586. selector: "testRemoveLast",
  65587. protocol: 'tests',
  65588. fn: function (){
  65589. var self=this;
  65590. var array;
  65591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65592. return $core.withContext(function($ctx1) {
  65593. //>>excludeEnd("ctx");
  65594. array=[(1), (2)];
  65595. $recv(array)._removeLast();
  65596. self._assert_equals_($recv(array)._last(),(1));
  65597. return self;
  65598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65599. }, function($ctx1) {$ctx1.fill(self,"testRemoveLast",{array:array},$globals.ArrayTest)});
  65600. //>>excludeEnd("ctx");
  65601. },
  65602. //>>excludeStart("ide", pragmas.excludeIdeData);
  65603. args: [],
  65604. source: "testRemoveLast \x0a\x09| array |\x0a\x09array := #(1 2). \x0a\x09array removeLast.\x0a\x09\x0a\x09self assert: array last equals: 1",
  65605. referencedClasses: [],
  65606. //>>excludeEnd("ide");
  65607. messageSends: ["removeLast", "assert:equals:", "last"]
  65608. }),
  65609. $globals.ArrayTest);
  65610. $core.addMethod(
  65611. $core.method({
  65612. selector: "testReversed",
  65613. protocol: 'tests',
  65614. fn: function (){
  65615. var self=this;
  65616. var array;
  65617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65618. return $core.withContext(function($ctx1) {
  65619. //>>excludeEnd("ctx");
  65620. array=[(5), (4), (3), (2), (1)];
  65621. self._assert_equals_($recv(array)._reversed(),[(1), (2), (3), (4), (5)]);
  65622. return self;
  65623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65624. }, function($ctx1) {$ctx1.fill(self,"testReversed",{array:array},$globals.ArrayTest)});
  65625. //>>excludeEnd("ctx");
  65626. },
  65627. //>>excludeStart("ide", pragmas.excludeIdeData);
  65628. args: [],
  65629. source: "testReversed\x0a\x09|array|\x0a\x09array := #(5 4 3 2 1). \x0a\x09self assert: (array reversed) equals: #(1 2 3 4 5)",
  65630. referencedClasses: [],
  65631. //>>excludeEnd("ide");
  65632. messageSends: ["assert:equals:", "reversed"]
  65633. }),
  65634. $globals.ArrayTest);
  65635. $core.addMethod(
  65636. $core.method({
  65637. selector: "testSort",
  65638. protocol: 'tests',
  65639. fn: function (){
  65640. var self=this;
  65641. var array;
  65642. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65643. return $core.withContext(function($ctx1) {
  65644. //>>excludeEnd("ctx");
  65645. array=[(10), (1), (5)];
  65646. $recv(array)._sort();
  65647. self._assert_equals_(array,[(1), (5), (10)]);
  65648. return self;
  65649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65650. }, function($ctx1) {$ctx1.fill(self,"testSort",{array:array},$globals.ArrayTest)});
  65651. //>>excludeEnd("ctx");
  65652. },
  65653. //>>excludeStart("ide", pragmas.excludeIdeData);
  65654. args: [],
  65655. source: "testSort\x0a\x09| array |\x0a\x09array := #(10 1 5). \x0a\x09array sort.\x0a\x09self assert: array equals: #(1 5 10)",
  65656. referencedClasses: [],
  65657. //>>excludeEnd("ide");
  65658. messageSends: ["sort", "assert:equals:"]
  65659. }),
  65660. $globals.ArrayTest);
  65661. $core.addMethod(
  65662. $core.method({
  65663. selector: "collectionClass",
  65664. protocol: 'fixture',
  65665. fn: function (){
  65666. var self=this;
  65667. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  65668. return $Array();
  65669. },
  65670. //>>excludeStart("ide", pragmas.excludeIdeData);
  65671. args: [],
  65672. source: "collectionClass\x0a\x09^ Array",
  65673. referencedClasses: ["Array"],
  65674. //>>excludeEnd("ide");
  65675. messageSends: []
  65676. }),
  65677. $globals.ArrayTest.klass);
  65678. $core.addClass('StringTest', $globals.SequenceableCollectionTest, [], 'Kernel-Tests');
  65679. $core.addMethod(
  65680. $core.method({
  65681. selector: "collection",
  65682. protocol: 'fixture',
  65683. fn: function (){
  65684. var self=this;
  65685. return "helLo";
  65686. },
  65687. //>>excludeStart("ide", pragmas.excludeIdeData);
  65688. args: [],
  65689. source: "collection\x0a\x09^ 'helLo'",
  65690. referencedClasses: [],
  65691. //>>excludeEnd("ide");
  65692. messageSends: []
  65693. }),
  65694. $globals.StringTest);
  65695. $core.addMethod(
  65696. $core.method({
  65697. selector: "collectionFirst",
  65698. protocol: 'fixture',
  65699. fn: function (){
  65700. var self=this;
  65701. return "h";
  65702. },
  65703. //>>excludeStart("ide", pragmas.excludeIdeData);
  65704. args: [],
  65705. source: "collectionFirst\x0a\x09^ 'h'",
  65706. referencedClasses: [],
  65707. //>>excludeEnd("ide");
  65708. messageSends: []
  65709. }),
  65710. $globals.StringTest);
  65711. $core.addMethod(
  65712. $core.method({
  65713. selector: "collectionFirstTwo",
  65714. protocol: 'fixture',
  65715. fn: function (){
  65716. var self=this;
  65717. return "he";
  65718. },
  65719. //>>excludeStart("ide", pragmas.excludeIdeData);
  65720. args: [],
  65721. source: "collectionFirstTwo\x0a\x09^ 'he'",
  65722. referencedClasses: [],
  65723. //>>excludeEnd("ide");
  65724. messageSends: []
  65725. }),
  65726. $globals.StringTest);
  65727. $core.addMethod(
  65728. $core.method({
  65729. selector: "collectionLast",
  65730. protocol: 'fixture',
  65731. fn: function (){
  65732. var self=this;
  65733. return "o";
  65734. },
  65735. //>>excludeStart("ide", pragmas.excludeIdeData);
  65736. args: [],
  65737. source: "collectionLast\x0a\x09^ 'o'",
  65738. referencedClasses: [],
  65739. //>>excludeEnd("ide");
  65740. messageSends: []
  65741. }),
  65742. $globals.StringTest);
  65743. $core.addMethod(
  65744. $core.method({
  65745. selector: "collectionLastTwo",
  65746. protocol: 'fixture',
  65747. fn: function (){
  65748. var self=this;
  65749. return "Lo";
  65750. },
  65751. //>>excludeStart("ide", pragmas.excludeIdeData);
  65752. args: [],
  65753. source: "collectionLastTwo\x0a\x09^ 'Lo'",
  65754. referencedClasses: [],
  65755. //>>excludeEnd("ide");
  65756. messageSends: []
  65757. }),
  65758. $globals.StringTest);
  65759. $core.addMethod(
  65760. $core.method({
  65761. selector: "collectionOfPrintStrings",
  65762. protocol: 'fixture',
  65763. fn: function (){
  65764. var self=this;
  65765. return "'h''e''l''L''o'";
  65766. },
  65767. //>>excludeStart("ide", pragmas.excludeIdeData);
  65768. args: [],
  65769. source: "collectionOfPrintStrings\x0a\x09^ '''h''''e''''l''''L''''o'''",
  65770. referencedClasses: [],
  65771. //>>excludeEnd("ide");
  65772. messageSends: []
  65773. }),
  65774. $globals.StringTest);
  65775. $core.addMethod(
  65776. $core.method({
  65777. selector: "collectionSize",
  65778. protocol: 'fixture',
  65779. fn: function (){
  65780. var self=this;
  65781. return (5);
  65782. },
  65783. //>>excludeStart("ide", pragmas.excludeIdeData);
  65784. args: [],
  65785. source: "collectionSize\x0a\x09^ 5",
  65786. referencedClasses: [],
  65787. //>>excludeEnd("ide");
  65788. messageSends: []
  65789. }),
  65790. $globals.StringTest);
  65791. $core.addMethod(
  65792. $core.method({
  65793. selector: "collectionWithDuplicates",
  65794. protocol: 'fixture',
  65795. fn: function (){
  65796. var self=this;
  65797. return "abbaerte";
  65798. },
  65799. //>>excludeStart("ide", pragmas.excludeIdeData);
  65800. args: [],
  65801. source: "collectionWithDuplicates\x0a\x09^ 'abbaerte'",
  65802. referencedClasses: [],
  65803. //>>excludeEnd("ide");
  65804. messageSends: []
  65805. }),
  65806. $globals.StringTest);
  65807. $core.addMethod(
  65808. $core.method({
  65809. selector: "collectionWithNewValue",
  65810. protocol: 'fixture',
  65811. fn: function (){
  65812. var self=this;
  65813. return "helLoN";
  65814. },
  65815. //>>excludeStart("ide", pragmas.excludeIdeData);
  65816. args: [],
  65817. source: "collectionWithNewValue\x0a\x09^ 'helLoN'",
  65818. referencedClasses: [],
  65819. //>>excludeEnd("ide");
  65820. messageSends: []
  65821. }),
  65822. $globals.StringTest);
  65823. $core.addMethod(
  65824. $core.method({
  65825. selector: "sampleNewValueAsCollection",
  65826. protocol: 'fixture',
  65827. fn: function (){
  65828. var self=this;
  65829. return "N";
  65830. },
  65831. //>>excludeStart("ide", pragmas.excludeIdeData);
  65832. args: [],
  65833. source: "sampleNewValueAsCollection\x0a\x09^ 'N'",
  65834. referencedClasses: [],
  65835. //>>excludeEnd("ide");
  65836. messageSends: []
  65837. }),
  65838. $globals.StringTest);
  65839. $core.addMethod(
  65840. $core.method({
  65841. selector: "samplesDo:",
  65842. protocol: 'fixture',
  65843. fn: function (aBlock){
  65844. var self=this;
  65845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65846. return $core.withContext(function($ctx1) {
  65847. //>>excludeEnd("ctx");
  65848. (
  65849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65850. $ctx1.supercall = true,
  65851. //>>excludeEnd("ctx");
  65852. $globals.StringTest.superclass.fn.prototype._samplesDo_.apply($recv(self), [aBlock]));
  65853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65854. $ctx1.supercall = false;
  65855. //>>excludeEnd("ctx");;
  65856. $recv(aBlock)._value_value_((3),"l");
  65857. return self;
  65858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65859. }, function($ctx1) {$ctx1.fill(self,"samplesDo:",{aBlock:aBlock},$globals.StringTest)});
  65860. //>>excludeEnd("ctx");
  65861. },
  65862. //>>excludeStart("ide", pragmas.excludeIdeData);
  65863. args: ["aBlock"],
  65864. source: "samplesDo: aBlock\x0a\x09super samplesDo: aBlock.\x0a\x09aBlock value: 3 value: 'l'",
  65865. referencedClasses: [],
  65866. //>>excludeEnd("ide");
  65867. messageSends: ["samplesDo:", "value:value:"]
  65868. }),
  65869. $globals.StringTest);
  65870. $core.addMethod(
  65871. $core.method({
  65872. selector: "testAddAll",
  65873. protocol: 'tests',
  65874. fn: function (){
  65875. var self=this;
  65876. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  65877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65878. return $core.withContext(function($ctx1) {
  65879. //>>excludeEnd("ctx");
  65880. var $1;
  65881. self._should_raise_((function(){
  65882. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65883. return $core.withContext(function($ctx2) {
  65884. //>>excludeEnd("ctx");
  65885. $1=self._collection();
  65886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65887. $ctx2.sendIdx["collection"]=1;
  65888. //>>excludeEnd("ctx");
  65889. return $recv($1)._addAll_(self._collection());
  65890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65891. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  65892. //>>excludeEnd("ctx");
  65893. }),$Error());
  65894. return self;
  65895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65896. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.StringTest)});
  65897. //>>excludeEnd("ctx");
  65898. },
  65899. //>>excludeStart("ide", pragmas.excludeIdeData);
  65900. args: [],
  65901. source: "testAddAll\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ self collection addAll: self collection ] raise: Error",
  65902. referencedClasses: ["Error"],
  65903. //>>excludeEnd("ide");
  65904. messageSends: ["should:raise:", "addAll:", "collection"]
  65905. }),
  65906. $globals.StringTest);
  65907. $core.addMethod(
  65908. $core.method({
  65909. selector: "testAddRemove",
  65910. protocol: 'tests',
  65911. fn: function (){
  65912. var self=this;
  65913. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  65914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65915. return $core.withContext(function($ctx1) {
  65916. //>>excludeEnd("ctx");
  65917. self._should_raise_((function(){
  65918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65919. return $core.withContext(function($ctx2) {
  65920. //>>excludeEnd("ctx");
  65921. return "hello"._add_("a");
  65922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65923. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  65924. //>>excludeEnd("ctx");
  65925. }),$Error());
  65926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65927. $ctx1.sendIdx["should:raise:"]=1;
  65928. //>>excludeEnd("ctx");
  65929. self._should_raise_((function(){
  65930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65931. return $core.withContext(function($ctx2) {
  65932. //>>excludeEnd("ctx");
  65933. return "hello"._remove_("h");
  65934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65935. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  65936. //>>excludeEnd("ctx");
  65937. }),$Error());
  65938. return self;
  65939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65940. }, function($ctx1) {$ctx1.fill(self,"testAddRemove",{},$globals.StringTest)});
  65941. //>>excludeEnd("ctx");
  65942. },
  65943. //>>excludeStart("ide", pragmas.excludeIdeData);
  65944. args: [],
  65945. source: "testAddRemove\x0a\x09self should: [ 'hello' add: 'a' ] raise: Error.\x0a\x09self should: [ 'hello' remove: 'h' ] raise: Error",
  65946. referencedClasses: ["Error"],
  65947. //>>excludeEnd("ide");
  65948. messageSends: ["should:raise:", "add:", "remove:"]
  65949. }),
  65950. $globals.StringTest);
  65951. $core.addMethod(
  65952. $core.method({
  65953. selector: "testAsArray",
  65954. protocol: 'tests',
  65955. fn: function (){
  65956. var self=this;
  65957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65958. return $core.withContext(function($ctx1) {
  65959. //>>excludeEnd("ctx");
  65960. self._assert_equals_("hello"._asArray(),["h", "e", "l", "l", "o"]);
  65961. return self;
  65962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65963. }, function($ctx1) {$ctx1.fill(self,"testAsArray",{},$globals.StringTest)});
  65964. //>>excludeEnd("ctx");
  65965. },
  65966. //>>excludeStart("ide", pragmas.excludeIdeData);
  65967. args: [],
  65968. source: "testAsArray\x0a\x09self assert: 'hello' asArray equals: #('h' 'e' 'l' 'l' 'o').",
  65969. referencedClasses: [],
  65970. //>>excludeEnd("ide");
  65971. messageSends: ["assert:equals:", "asArray"]
  65972. }),
  65973. $globals.StringTest);
  65974. $core.addMethod(
  65975. $core.method({
  65976. selector: "testAsLowerCase",
  65977. protocol: 'tests',
  65978. fn: function (){
  65979. var self=this;
  65980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65981. return $core.withContext(function($ctx1) {
  65982. //>>excludeEnd("ctx");
  65983. self._assert_equals_("JACKIE"._asLowercase(),"jackie");
  65984. return self;
  65985. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  65986. }, function($ctx1) {$ctx1.fill(self,"testAsLowerCase",{},$globals.StringTest)});
  65987. //>>excludeEnd("ctx");
  65988. },
  65989. //>>excludeStart("ide", pragmas.excludeIdeData);
  65990. args: [],
  65991. source: "testAsLowerCase\x0a\x09self assert: 'JACKIE' asLowercase equals: 'jackie'.",
  65992. referencedClasses: [],
  65993. //>>excludeEnd("ide");
  65994. messageSends: ["assert:equals:", "asLowercase"]
  65995. }),
  65996. $globals.StringTest);
  65997. $core.addMethod(
  65998. $core.method({
  65999. selector: "testAsNumber",
  66000. protocol: 'tests',
  66001. fn: function (){
  66002. var self=this;
  66003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66004. return $core.withContext(function($ctx1) {
  66005. //>>excludeEnd("ctx");
  66006. var $1,$2;
  66007. $1="3"._asNumber();
  66008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66009. $ctx1.sendIdx["asNumber"]=1;
  66010. //>>excludeEnd("ctx");
  66011. self._assert_equals_($1,(3));
  66012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66013. $ctx1.sendIdx["assert:equals:"]=1;
  66014. //>>excludeEnd("ctx");
  66015. $2="-3"._asNumber();
  66016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66017. $ctx1.sendIdx["asNumber"]=2;
  66018. //>>excludeEnd("ctx");
  66019. self._assert_equals_($2,(-3));
  66020. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66021. $ctx1.sendIdx["assert:equals:"]=2;
  66022. //>>excludeEnd("ctx");
  66023. self._assert_equals_("-1.5"._asNumber(),(-1.5));
  66024. return self;
  66025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66026. }, function($ctx1) {$ctx1.fill(self,"testAsNumber",{},$globals.StringTest)});
  66027. //>>excludeEnd("ctx");
  66028. },
  66029. //>>excludeStart("ide", pragmas.excludeIdeData);
  66030. args: [],
  66031. source: "testAsNumber\x0a\x09self assert: '3' asNumber equals: 3.\x0a\x09self assert: '-3' asNumber equals: -3.\x0a\x09self assert: '-1.5' asNumber equals: -1.5.",
  66032. referencedClasses: [],
  66033. //>>excludeEnd("ide");
  66034. messageSends: ["assert:equals:", "asNumber"]
  66035. }),
  66036. $globals.StringTest);
  66037. $core.addMethod(
  66038. $core.method({
  66039. selector: "testAsUpperCase",
  66040. protocol: 'tests',
  66041. fn: function (){
  66042. var self=this;
  66043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66044. return $core.withContext(function($ctx1) {
  66045. //>>excludeEnd("ctx");
  66046. self._assert_equals_("jackie"._asUppercase(),"JACKIE");
  66047. return self;
  66048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66049. }, function($ctx1) {$ctx1.fill(self,"testAsUpperCase",{},$globals.StringTest)});
  66050. //>>excludeEnd("ctx");
  66051. },
  66052. //>>excludeStart("ide", pragmas.excludeIdeData);
  66053. args: [],
  66054. source: "testAsUpperCase\x0a\x09self assert: 'jackie' asUppercase equals: 'JACKIE'.",
  66055. referencedClasses: [],
  66056. //>>excludeEnd("ide");
  66057. messageSends: ["assert:equals:", "asUppercase"]
  66058. }),
  66059. $globals.StringTest);
  66060. $core.addMethod(
  66061. $core.method({
  66062. selector: "testAsciiValue",
  66063. protocol: 'tests',
  66064. fn: function (){
  66065. var self=this;
  66066. var characterA,characterU;
  66067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66068. return $core.withContext(function($ctx1) {
  66069. //>>excludeEnd("ctx");
  66070. var $1;
  66071. characterA="A";
  66072. characterU="U";
  66073. $1=$recv(characterA)._asciiValue();
  66074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66075. $ctx1.sendIdx["asciiValue"]=1;
  66076. //>>excludeEnd("ctx");
  66077. self._assert_equals_($1,(65));
  66078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66079. $ctx1.sendIdx["assert:equals:"]=1;
  66080. //>>excludeEnd("ctx");
  66081. self._assert_equals_($recv(characterU)._asciiValue(),(85));
  66082. return self;
  66083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66084. }, function($ctx1) {$ctx1.fill(self,"testAsciiValue",{characterA:characterA,characterU:characterU},$globals.StringTest)});
  66085. //>>excludeEnd("ctx");
  66086. },
  66087. //>>excludeStart("ide", pragmas.excludeIdeData);
  66088. args: [],
  66089. source: "testAsciiValue\x0a | characterA characterU |\x0a characterA := 'A'.\x0a characterU := 'U'.\x0a self assert: (characterA asciiValue) equals:65.\x0a self assert: (characterU asciiValue) equals:85",
  66090. referencedClasses: [],
  66091. //>>excludeEnd("ide");
  66092. messageSends: ["assert:equals:", "asciiValue"]
  66093. }),
  66094. $globals.StringTest);
  66095. $core.addMethod(
  66096. $core.method({
  66097. selector: "testAtIfAbsentPut",
  66098. protocol: 'tests',
  66099. fn: function (){
  66100. var self=this;
  66101. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66103. return $core.withContext(function($ctx1) {
  66104. //>>excludeEnd("ctx");
  66105. self._should_raise_((function(){
  66106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66107. return $core.withContext(function($ctx2) {
  66108. //>>excludeEnd("ctx");
  66109. return "hello"._at_ifAbsentPut_((6),(function(){
  66110. return "a";
  66111. }));
  66112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66113. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66114. //>>excludeEnd("ctx");
  66115. }),$Error());
  66116. return self;
  66117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66118. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsentPut",{},$globals.StringTest)});
  66119. //>>excludeEnd("ctx");
  66120. },
  66121. //>>excludeStart("ide", pragmas.excludeIdeData);
  66122. args: [],
  66123. source: "testAtIfAbsentPut\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ 'hello' at: 6 ifAbsentPut: [ 'a' ] ] raise: Error",
  66124. referencedClasses: ["Error"],
  66125. //>>excludeEnd("ide");
  66126. messageSends: ["should:raise:", "at:ifAbsentPut:"]
  66127. }),
  66128. $globals.StringTest);
  66129. $core.addMethod(
  66130. $core.method({
  66131. selector: "testAtPut",
  66132. protocol: 'tests',
  66133. fn: function (){
  66134. var self=this;
  66135. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66137. return $core.withContext(function($ctx1) {
  66138. //>>excludeEnd("ctx");
  66139. self._should_raise_((function(){
  66140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66141. return $core.withContext(function($ctx2) {
  66142. //>>excludeEnd("ctx");
  66143. return "hello"._at_put_((1),"a");
  66144. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66145. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66146. //>>excludeEnd("ctx");
  66147. }),$Error());
  66148. return self;
  66149. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66150. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{},$globals.StringTest)});
  66151. //>>excludeEnd("ctx");
  66152. },
  66153. //>>excludeStart("ide", pragmas.excludeIdeData);
  66154. args: [],
  66155. source: "testAtPut\x0a\x09\x22String instances are read-only\x22\x0a\x09self should: [ 'hello' at: 1 put: 'a' ] raise: Error",
  66156. referencedClasses: ["Error"],
  66157. //>>excludeEnd("ide");
  66158. messageSends: ["should:raise:", "at:put:"]
  66159. }),
  66160. $globals.StringTest);
  66161. $core.addMethod(
  66162. $core.method({
  66163. selector: "testCapitalized",
  66164. protocol: 'tests',
  66165. fn: function (){
  66166. var self=this;
  66167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66168. return $core.withContext(function($ctx1) {
  66169. //>>excludeEnd("ctx");
  66170. var $1,$2,$3;
  66171. $1="test"._capitalized();
  66172. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66173. $ctx1.sendIdx["capitalized"]=1;
  66174. //>>excludeEnd("ctx");
  66175. self._assert_equals_($1,"Test");
  66176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66177. $ctx1.sendIdx["assert:equals:"]=1;
  66178. //>>excludeEnd("ctx");
  66179. $2="Test"._capitalized();
  66180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66181. $ctx1.sendIdx["capitalized"]=2;
  66182. //>>excludeEnd("ctx");
  66183. self._assert_equals_($2,"Test");
  66184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66185. $ctx1.sendIdx["assert:equals:"]=2;
  66186. //>>excludeEnd("ctx");
  66187. self._assert_equals_(""._capitalized(),"");
  66188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66189. $ctx1.sendIdx["assert:equals:"]=3;
  66190. //>>excludeEnd("ctx");
  66191. $3="Test"._isCapitalized();
  66192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66193. $ctx1.sendIdx["isCapitalized"]=1;
  66194. //>>excludeEnd("ctx");
  66195. self._assert_equals_($3,true);
  66196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66197. $ctx1.sendIdx["assert:equals:"]=4;
  66198. //>>excludeEnd("ctx");
  66199. self._assert_equals_("test"._isCapitalized(),false);
  66200. return self;
  66201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66202. }, function($ctx1) {$ctx1.fill(self,"testCapitalized",{},$globals.StringTest)});
  66203. //>>excludeEnd("ctx");
  66204. },
  66205. //>>excludeStart("ide", pragmas.excludeIdeData);
  66206. args: [],
  66207. source: "testCapitalized\x0a\x09self assert: 'test' capitalized equals: 'Test'.\x0a\x09self assert: 'Test' capitalized equals: 'Test'.\x0a\x09self assert: '' capitalized equals: ''.\x0a\x09self assert: 'Test' isCapitalized equals: true.\x0a\x09self assert: 'test' isCapitalized equals: false.",
  66208. referencedClasses: [],
  66209. //>>excludeEnd("ide");
  66210. messageSends: ["assert:equals:", "capitalized", "isCapitalized"]
  66211. }),
  66212. $globals.StringTest);
  66213. $core.addMethod(
  66214. $core.method({
  66215. selector: "testCharCodeAt",
  66216. protocol: 'tests',
  66217. fn: function (){
  66218. var self=this;
  66219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66220. return $core.withContext(function($ctx1) {
  66221. //>>excludeEnd("ctx");
  66222. var $1,$2,$3,$4,$5;
  66223. $1="jackie"._charCodeAt_((1));
  66224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66225. $ctx1.sendIdx["charCodeAt:"]=1;
  66226. //>>excludeEnd("ctx");
  66227. self._assert_equals_($1,(106));
  66228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66229. $ctx1.sendIdx["assert:equals:"]=1;
  66230. //>>excludeEnd("ctx");
  66231. $2="jackie"._charCodeAt_((2));
  66232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66233. $ctx1.sendIdx["charCodeAt:"]=2;
  66234. //>>excludeEnd("ctx");
  66235. self._assert_equals_($2,(97));
  66236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66237. $ctx1.sendIdx["assert:equals:"]=2;
  66238. //>>excludeEnd("ctx");
  66239. $3="jackie"._charCodeAt_((3));
  66240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66241. $ctx1.sendIdx["charCodeAt:"]=3;
  66242. //>>excludeEnd("ctx");
  66243. self._assert_equals_($3,(99));
  66244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66245. $ctx1.sendIdx["assert:equals:"]=3;
  66246. //>>excludeEnd("ctx");
  66247. $4="jackie"._charCodeAt_((4));
  66248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66249. $ctx1.sendIdx["charCodeAt:"]=4;
  66250. //>>excludeEnd("ctx");
  66251. self._assert_equals_($4,(107));
  66252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66253. $ctx1.sendIdx["assert:equals:"]=4;
  66254. //>>excludeEnd("ctx");
  66255. $5="jackie"._charCodeAt_((5));
  66256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66257. $ctx1.sendIdx["charCodeAt:"]=5;
  66258. //>>excludeEnd("ctx");
  66259. self._assert_equals_($5,(105));
  66260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66261. $ctx1.sendIdx["assert:equals:"]=5;
  66262. //>>excludeEnd("ctx");
  66263. self._assert_equals_("jackie"._charCodeAt_((6)),(101));
  66264. return self;
  66265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66266. }, function($ctx1) {$ctx1.fill(self,"testCharCodeAt",{},$globals.StringTest)});
  66267. //>>excludeEnd("ctx");
  66268. },
  66269. //>>excludeStart("ide", pragmas.excludeIdeData);
  66270. args: [],
  66271. source: "testCharCodeAt\x0a\x09self assert: ('jackie' charCodeAt:1) equals: 106.\x0a\x09self assert: ('jackie' charCodeAt:2) equals: 97.\x0a\x09self assert: ('jackie' charCodeAt:3) equals: 99.\x0a\x09self assert: ('jackie' charCodeAt:4) equals: 107.\x0a\x09self assert: ('jackie' charCodeAt:5) equals: 105.\x0a\x09self assert: ('jackie' charCodeAt:6) equals: 101",
  66272. referencedClasses: [],
  66273. //>>excludeEnd("ide");
  66274. messageSends: ["assert:equals:", "charCodeAt:"]
  66275. }),
  66276. $globals.StringTest);
  66277. $core.addMethod(
  66278. $core.method({
  66279. selector: "testCopyFromTo",
  66280. protocol: 'tests',
  66281. fn: function (){
  66282. var self=this;
  66283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66284. return $core.withContext(function($ctx1) {
  66285. //>>excludeEnd("ctx");
  66286. var $1;
  66287. $1="jackie"._copyFrom_to_((1),(3));
  66288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66289. $ctx1.sendIdx["copyFrom:to:"]=1;
  66290. //>>excludeEnd("ctx");
  66291. self._assert_equals_($1,"jac");
  66292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66293. $ctx1.sendIdx["assert:equals:"]=1;
  66294. //>>excludeEnd("ctx");
  66295. self._assert_equals_("jackie"._copyFrom_to_((4),(6)),"kie");
  66296. return self;
  66297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66298. }, function($ctx1) {$ctx1.fill(self,"testCopyFromTo",{},$globals.StringTest)});
  66299. //>>excludeEnd("ctx");
  66300. },
  66301. //>>excludeStart("ide", pragmas.excludeIdeData);
  66302. args: [],
  66303. source: "testCopyFromTo\x0a\x09self assert: ('jackie' copyFrom: 1 to: 3) equals: 'jac'.\x0a\x09self assert: ('jackie' copyFrom: 4 to: 6) equals: 'kie'.",
  66304. referencedClasses: [],
  66305. //>>excludeEnd("ide");
  66306. messageSends: ["assert:equals:", "copyFrom:to:"]
  66307. }),
  66308. $globals.StringTest);
  66309. $core.addMethod(
  66310. $core.method({
  66311. selector: "testCopyWithoutAll",
  66312. protocol: 'tests',
  66313. fn: function (){
  66314. var self=this;
  66315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66316. return $core.withContext(function($ctx1) {
  66317. //>>excludeEnd("ctx");
  66318. self._assert_equals_("*hello* *world*"._copyWithoutAll_("*"),"hello world");
  66319. return self;
  66320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66321. }, function($ctx1) {$ctx1.fill(self,"testCopyWithoutAll",{},$globals.StringTest)});
  66322. //>>excludeEnd("ctx");
  66323. },
  66324. //>>excludeStart("ide", pragmas.excludeIdeData);
  66325. args: [],
  66326. source: "testCopyWithoutAll\x0a\x09self\x0a\x09\x09assert: ('*hello* *world*' copyWithoutAll: '*')\x0a\x09\x09equals: 'hello world'",
  66327. referencedClasses: [],
  66328. //>>excludeEnd("ide");
  66329. messageSends: ["assert:equals:", "copyWithoutAll:"]
  66330. }),
  66331. $globals.StringTest);
  66332. $core.addMethod(
  66333. $core.method({
  66334. selector: "testEquality",
  66335. protocol: 'tests',
  66336. fn: function (){
  66337. var self=this;
  66338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66339. return $core.withContext(function($ctx1) {
  66340. //>>excludeEnd("ctx");
  66341. var $1,$2,$3;
  66342. self._assert_equals_("hello","hello");
  66343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66344. $ctx1.sendIdx["assert:equals:"]=1;
  66345. //>>excludeEnd("ctx");
  66346. $1="hello".__eq("world");
  66347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66348. $ctx1.sendIdx["="]=1;
  66349. //>>excludeEnd("ctx");
  66350. self._deny_($1);
  66351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66352. $ctx1.sendIdx["deny:"]=1;
  66353. //>>excludeEnd("ctx");
  66354. $2="hello".__eq([]._at_ifAbsent_((1),(function(){
  66355. })));
  66356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66357. $ctx1.sendIdx["="]=2;
  66358. //>>excludeEnd("ctx");
  66359. self._deny_($2);
  66360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66361. $ctx1.sendIdx["deny:"]=2;
  66362. //>>excludeEnd("ctx");
  66363. $3="hello"._yourself();
  66364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66365. $ctx1.sendIdx["yourself"]=1;
  66366. //>>excludeEnd("ctx");
  66367. self._assert_equals_("hello",$3);
  66368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66369. $ctx1.sendIdx["assert:equals:"]=2;
  66370. //>>excludeEnd("ctx");
  66371. self._assert_equals_("hello"._yourself(),"hello");
  66372. self._deny_("".__eq((0)));
  66373. return self;
  66374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66375. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.StringTest)});
  66376. //>>excludeEnd("ctx");
  66377. },
  66378. //>>excludeStart("ide", pragmas.excludeIdeData);
  66379. args: [],
  66380. source: "testEquality\x0a\x09self assert: 'hello' equals: 'hello'.\x0a\x09self deny: 'hello' = 'world'.\x0a\x09\x0a\x09\x22Test for issue 459\x22\x0a\x09self deny: 'hello' = (#() at: 1 ifAbsent: [ ]).\x0a\x0a\x09self assert: 'hello' equals: 'hello' yourself.\x0a\x09self assert: 'hello' yourself equals: 'hello'.\x0a\x0a\x09\x22test JS falsy value\x22\x0a\x09self deny: '' = 0",
  66381. referencedClasses: [],
  66382. //>>excludeEnd("ide");
  66383. messageSends: ["assert:equals:", "deny:", "=", "at:ifAbsent:", "yourself"]
  66384. }),
  66385. $globals.StringTest);
  66386. $core.addMethod(
  66387. $core.method({
  66388. selector: "testIdentity",
  66389. protocol: 'tests',
  66390. fn: function (){
  66391. var self=this;
  66392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66393. return $core.withContext(function($ctx1) {
  66394. //>>excludeEnd("ctx");
  66395. var $1,$2,$4,$3,$5;
  66396. $1="hello".__eq_eq("hello");
  66397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66398. $ctx1.sendIdx["=="]=1;
  66399. //>>excludeEnd("ctx");
  66400. self._assert_($1);
  66401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66402. $ctx1.sendIdx["assert:"]=1;
  66403. //>>excludeEnd("ctx");
  66404. $2="hello".__eq_eq("world");
  66405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66406. $ctx1.sendIdx["=="]=2;
  66407. //>>excludeEnd("ctx");
  66408. self._deny_($2);
  66409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66410. $ctx1.sendIdx["deny:"]=1;
  66411. //>>excludeEnd("ctx");
  66412. $4="hello"._yourself();
  66413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66414. $ctx1.sendIdx["yourself"]=1;
  66415. //>>excludeEnd("ctx");
  66416. $3="hello".__eq_eq($4);
  66417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66418. $ctx1.sendIdx["=="]=3;
  66419. //>>excludeEnd("ctx");
  66420. self._assert_($3);
  66421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66422. $ctx1.sendIdx["assert:"]=2;
  66423. //>>excludeEnd("ctx");
  66424. $5=$recv("hello"._yourself()).__eq_eq("hello");
  66425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66426. $ctx1.sendIdx["=="]=4;
  66427. //>>excludeEnd("ctx");
  66428. self._assert_($5);
  66429. self._deny_("".__eq_eq((0)));
  66430. return self;
  66431. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66432. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.StringTest)});
  66433. //>>excludeEnd("ctx");
  66434. },
  66435. //>>excludeStart("ide", pragmas.excludeIdeData);
  66436. args: [],
  66437. source: "testIdentity\x0a\x09self assert: 'hello' == 'hello'.\x0a\x09self deny: 'hello' == 'world'.\x0a\x0a\x09self assert: 'hello' == 'hello' yourself.\x0a\x09self assert: 'hello' yourself == 'hello'.\x0a\x0a\x09\x22test JS falsy value\x22\x0a\x09self deny: '' == 0",
  66438. referencedClasses: [],
  66439. //>>excludeEnd("ide");
  66440. messageSends: ["assert:", "==", "deny:", "yourself"]
  66441. }),
  66442. $globals.StringTest);
  66443. $core.addMethod(
  66444. $core.method({
  66445. selector: "testIdentityHash",
  66446. protocol: 'tests',
  66447. fn: function (){
  66448. var self=this;
  66449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66450. return $core.withContext(function($ctx1) {
  66451. //>>excludeEnd("ctx");
  66452. var $1,$2,$4,$3;
  66453. $1="foo"._identityHash();
  66454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66455. $ctx1.sendIdx["identityHash"]=1;
  66456. //>>excludeEnd("ctx");
  66457. $2="foo"._identityHash();
  66458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66459. $ctx1.sendIdx["identityHash"]=2;
  66460. //>>excludeEnd("ctx");
  66461. self._assert_equals_($1,$2);
  66462. $4="foo"._identityHash();
  66463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66464. $ctx1.sendIdx["identityHash"]=3;
  66465. //>>excludeEnd("ctx");
  66466. $3=$recv($4).__eq("bar"._identityHash());
  66467. self._deny_($3);
  66468. return self;
  66469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66470. }, function($ctx1) {$ctx1.fill(self,"testIdentityHash",{},$globals.StringTest)});
  66471. //>>excludeEnd("ctx");
  66472. },
  66473. //>>excludeStart("ide", pragmas.excludeIdeData);
  66474. args: [],
  66475. source: "testIdentityHash\x0a\x09self assert: 'foo' identityHash equals: 'foo' identityHash.\x0a\x09self deny: ('foo' identityHash = 'bar' identityHash)",
  66476. referencedClasses: [],
  66477. //>>excludeEnd("ide");
  66478. messageSends: ["assert:equals:", "identityHash", "deny:", "="]
  66479. }),
  66480. $globals.StringTest);
  66481. $core.addMethod(
  66482. $core.method({
  66483. selector: "testIncludesSubString",
  66484. protocol: 'tests',
  66485. fn: function (){
  66486. var self=this;
  66487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66488. return $core.withContext(function($ctx1) {
  66489. //>>excludeEnd("ctx");
  66490. var $1;
  66491. $1="amber"._includesSubString_("ber");
  66492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66493. $ctx1.sendIdx["includesSubString:"]=1;
  66494. //>>excludeEnd("ctx");
  66495. self._assert_($1);
  66496. self._deny_("amber"._includesSubString_("zork"));
  66497. return self;
  66498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66499. }, function($ctx1) {$ctx1.fill(self,"testIncludesSubString",{},$globals.StringTest)});
  66500. //>>excludeEnd("ctx");
  66501. },
  66502. //>>excludeStart("ide", pragmas.excludeIdeData);
  66503. args: [],
  66504. source: "testIncludesSubString\x0a\x09self assert: ('amber' includesSubString: 'ber').\x0a\x09self deny: ('amber' includesSubString: 'zork').",
  66505. referencedClasses: [],
  66506. //>>excludeEnd("ide");
  66507. messageSends: ["assert:", "includesSubString:", "deny:"]
  66508. }),
  66509. $globals.StringTest);
  66510. $core.addMethod(
  66511. $core.method({
  66512. selector: "testIndexOfStartingAtWithNull",
  66513. protocol: 'tests',
  66514. fn: function (){
  66515. var self=this;
  66516. return self;
  66517. },
  66518. //>>excludeStart("ide", pragmas.excludeIdeData);
  66519. args: [],
  66520. source: "testIndexOfStartingAtWithNull\x0a\x09\x22String cannot hold JS null\x22",
  66521. referencedClasses: [],
  66522. //>>excludeEnd("ide");
  66523. messageSends: []
  66524. }),
  66525. $globals.StringTest);
  66526. $core.addMethod(
  66527. $core.method({
  66528. selector: "testIndexOfWithNull",
  66529. protocol: 'tests',
  66530. fn: function (){
  66531. var self=this;
  66532. return self;
  66533. },
  66534. //>>excludeStart("ide", pragmas.excludeIdeData);
  66535. args: [],
  66536. source: "testIndexOfWithNull\x0a\x09\x22String cannot hold JS null\x22",
  66537. referencedClasses: [],
  66538. //>>excludeEnd("ide");
  66539. messageSends: []
  66540. }),
  66541. $globals.StringTest);
  66542. $core.addMethod(
  66543. $core.method({
  66544. selector: "testIsVowel",
  66545. protocol: 'tests',
  66546. fn: function (){
  66547. var self=this;
  66548. var vowel,consonant;
  66549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66550. return $core.withContext(function($ctx1) {
  66551. //>>excludeEnd("ctx");
  66552. var $1;
  66553. vowel="u";
  66554. consonant="z";
  66555. $1=$recv(vowel)._isVowel();
  66556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66557. $ctx1.sendIdx["isVowel"]=1;
  66558. //>>excludeEnd("ctx");
  66559. self._assert_equals_($1,true);
  66560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66561. $ctx1.sendIdx["assert:equals:"]=1;
  66562. //>>excludeEnd("ctx");
  66563. self._assert_equals_($recv(consonant)._isVowel(),false);
  66564. return self;
  66565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66566. }, function($ctx1) {$ctx1.fill(self,"testIsVowel",{vowel:vowel,consonant:consonant},$globals.StringTest)});
  66567. //>>excludeEnd("ctx");
  66568. },
  66569. //>>excludeStart("ide", pragmas.excludeIdeData);
  66570. args: [],
  66571. source: "testIsVowel\x0a |vowel consonant|\x0a vowel := 'u'.\x0a consonant := 'z'.\x0a self assert: vowel isVowel equals: true.\x0a self assert: consonant isVowel equals: false",
  66572. referencedClasses: [],
  66573. //>>excludeEnd("ide");
  66574. messageSends: ["assert:equals:", "isVowel"]
  66575. }),
  66576. $globals.StringTest);
  66577. $core.addMethod(
  66578. $core.method({
  66579. selector: "testJoin",
  66580. protocol: 'tests',
  66581. fn: function (){
  66582. var self=this;
  66583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66584. return $core.withContext(function($ctx1) {
  66585. //>>excludeEnd("ctx");
  66586. self._assert_equals_(","._join_(["hello", "world"]),"hello,world");
  66587. return self;
  66588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66589. }, function($ctx1) {$ctx1.fill(self,"testJoin",{},$globals.StringTest)});
  66590. //>>excludeEnd("ctx");
  66591. },
  66592. //>>excludeStart("ide", pragmas.excludeIdeData);
  66593. args: [],
  66594. source: "testJoin\x0a\x09self assert: (',' join: #('hello' 'world')) equals: 'hello,world'",
  66595. referencedClasses: [],
  66596. //>>excludeEnd("ide");
  66597. messageSends: ["assert:equals:", "join:"]
  66598. }),
  66599. $globals.StringTest);
  66600. $core.addMethod(
  66601. $core.method({
  66602. selector: "testRemoveAll",
  66603. protocol: 'tests',
  66604. fn: function (){
  66605. var self=this;
  66606. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  66607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66608. return $core.withContext(function($ctx1) {
  66609. //>>excludeEnd("ctx");
  66610. self._should_raise_((function(){
  66611. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66612. return $core.withContext(function($ctx2) {
  66613. //>>excludeEnd("ctx");
  66614. return $recv(self._collection())._removeAll();
  66615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66616. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  66617. //>>excludeEnd("ctx");
  66618. }),$Error());
  66619. return self;
  66620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66621. }, function($ctx1) {$ctx1.fill(self,"testRemoveAll",{},$globals.StringTest)});
  66622. //>>excludeEnd("ctx");
  66623. },
  66624. //>>excludeStart("ide", pragmas.excludeIdeData);
  66625. args: [],
  66626. source: "testRemoveAll\x0a\x09self should: [ self collection removeAll ] raise: Error",
  66627. referencedClasses: ["Error"],
  66628. //>>excludeEnd("ide");
  66629. messageSends: ["should:raise:", "removeAll", "collection"]
  66630. }),
  66631. $globals.StringTest);
  66632. $core.addMethod(
  66633. $core.method({
  66634. selector: "testReversed",
  66635. protocol: 'tests',
  66636. fn: function (){
  66637. var self=this;
  66638. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66639. return $core.withContext(function($ctx1) {
  66640. //>>excludeEnd("ctx");
  66641. self._assert_equals_("jackiechan"._reversed(),"nahceikcaj");
  66642. return self;
  66643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66644. }, function($ctx1) {$ctx1.fill(self,"testReversed",{},$globals.StringTest)});
  66645. //>>excludeEnd("ctx");
  66646. },
  66647. //>>excludeStart("ide", pragmas.excludeIdeData);
  66648. args: [],
  66649. source: "testReversed\x0a\x09self assert: 'jackiechan' reversed equals: 'nahceikcaj'.",
  66650. referencedClasses: [],
  66651. //>>excludeEnd("ide");
  66652. messageSends: ["assert:equals:", "reversed"]
  66653. }),
  66654. $globals.StringTest);
  66655. $core.addMethod(
  66656. $core.method({
  66657. selector: "testStreamContents",
  66658. protocol: 'tests',
  66659. fn: function (){
  66660. var self=this;
  66661. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  66662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66663. return $core.withContext(function($ctx1) {
  66664. //>>excludeEnd("ctx");
  66665. var $1;
  66666. self._assert_equals_($recv($String())._streamContents_((function(aStream){
  66667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66668. return $core.withContext(function($ctx2) {
  66669. //>>excludeEnd("ctx");
  66670. $recv(aStream)._nextPutAll_("hello");
  66671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66672. $ctx2.sendIdx["nextPutAll:"]=1;
  66673. //>>excludeEnd("ctx");
  66674. $recv(aStream)._space();
  66675. $1=$recv(aStream)._nextPutAll_("world");
  66676. return $1;
  66677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66678. }, function($ctx2) {$ctx2.fillBlock({aStream:aStream},$ctx1,1)});
  66679. //>>excludeEnd("ctx");
  66680. })),"hello world");
  66681. return self;
  66682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66683. }, function($ctx1) {$ctx1.fill(self,"testStreamContents",{},$globals.StringTest)});
  66684. //>>excludeEnd("ctx");
  66685. },
  66686. //>>excludeStart("ide", pragmas.excludeIdeData);
  66687. args: [],
  66688. source: "testStreamContents\x0a\x09self\x0a\x09\x09assert: (String streamContents: [ :aStream |\x0a\x09\x09\x09aStream\x0a\x09\x09\x09\x09nextPutAll: 'hello'; space;\x0a\x09\x09\x09\x09nextPutAll: 'world' ])\x0a\x09\x09equals: 'hello world'",
  66689. referencedClasses: ["String"],
  66690. //>>excludeEnd("ide");
  66691. messageSends: ["assert:equals:", "streamContents:", "nextPutAll:", "space"]
  66692. }),
  66693. $globals.StringTest);
  66694. $core.addMethod(
  66695. $core.method({
  66696. selector: "testSubStrings",
  66697. protocol: 'tests',
  66698. fn: function (){
  66699. var self=this;
  66700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66701. return $core.withContext(function($ctx1) {
  66702. //>>excludeEnd("ctx");
  66703. self._assert_equals_("jackiechan"._subStrings_("ie"),["jack", "chan"]);
  66704. return self;
  66705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66706. }, function($ctx1) {$ctx1.fill(self,"testSubStrings",{},$globals.StringTest)});
  66707. //>>excludeEnd("ctx");
  66708. },
  66709. //>>excludeStart("ide", pragmas.excludeIdeData);
  66710. args: [],
  66711. source: "testSubStrings\x0a\x09self assert: ('jackiechan' subStrings: 'ie') equals: #( 'jack' 'chan' ).",
  66712. referencedClasses: [],
  66713. //>>excludeEnd("ide");
  66714. messageSends: ["assert:equals:", "subStrings:"]
  66715. }),
  66716. $globals.StringTest);
  66717. $core.addMethod(
  66718. $core.method({
  66719. selector: "testTrim",
  66720. protocol: 'tests',
  66721. fn: function (){
  66722. var self=this;
  66723. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66724. return $core.withContext(function($ctx1) {
  66725. //>>excludeEnd("ctx");
  66726. self._assert_equals_(" jackie"._trimLeft(),"jackie");
  66727. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66728. $ctx1.sendIdx["assert:equals:"]=1;
  66729. //>>excludeEnd("ctx");
  66730. self._assert_equals_("jackie "._trimRight(),"jackie");
  66731. return self;
  66732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66733. }, function($ctx1) {$ctx1.fill(self,"testTrim",{},$globals.StringTest)});
  66734. //>>excludeEnd("ctx");
  66735. },
  66736. //>>excludeStart("ide", pragmas.excludeIdeData);
  66737. args: [],
  66738. source: "testTrim\x0a\x09self assert: ' jackie' trimLeft equals: 'jackie'.\x0a\x09self assert: 'jackie ' trimRight equals: 'jackie'.",
  66739. referencedClasses: [],
  66740. //>>excludeEnd("ide");
  66741. messageSends: ["assert:equals:", "trimLeft", "trimRight"]
  66742. }),
  66743. $globals.StringTest);
  66744. $core.addMethod(
  66745. $core.method({
  66746. selector: "testValue",
  66747. protocol: 'tests',
  66748. fn: function (){
  66749. var self=this;
  66750. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66751. return $core.withContext(function($ctx1) {
  66752. //>>excludeEnd("ctx");
  66753. self._assert_equals_("asString"._value_((1)),"1");
  66754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66755. $ctx1.sendIdx["assert:equals:"]=1;
  66756. //>>excludeEnd("ctx");
  66757. self._assert_equals_([(1), (2), (3)]._collect_("asString"),["1", "2", "3"]);
  66758. return self;
  66759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66760. }, function($ctx1) {$ctx1.fill(self,"testValue",{},$globals.StringTest)});
  66761. //>>excludeEnd("ctx");
  66762. },
  66763. //>>excludeStart("ide", pragmas.excludeIdeData);
  66764. args: [],
  66765. source: "testValue\x0a\x0a\x09self assert: (#asString value: 1) equals: '1'.\x0a\x0a\x09\x22Which (since String and BlockClosure are now polymorphic) enables the nice idiom...\x22\x0a\x09self assert: (#(1 2 3) collect: #asString) equals: #('1' '2' '3')",
  66766. referencedClasses: [],
  66767. //>>excludeEnd("ide");
  66768. messageSends: ["assert:equals:", "value:", "collect:"]
  66769. }),
  66770. $globals.StringTest);
  66771. $core.addMethod(
  66772. $core.method({
  66773. selector: "collectionClass",
  66774. protocol: 'fixture',
  66775. fn: function (){
  66776. var self=this;
  66777. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  66778. return $String();
  66779. },
  66780. //>>excludeStart("ide", pragmas.excludeIdeData);
  66781. args: [],
  66782. source: "collectionClass\x0a\x09^ String",
  66783. referencedClasses: ["String"],
  66784. //>>excludeEnd("ide");
  66785. messageSends: []
  66786. }),
  66787. $globals.StringTest.klass);
  66788. $core.addClass('SetTest', $globals.CollectionTest, [], 'Kernel-Tests');
  66789. $core.addMethod(
  66790. $core.method({
  66791. selector: "collection",
  66792. protocol: 'fixture',
  66793. fn: function (){
  66794. var self=this;
  66795. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  66796. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  66797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66798. return $core.withContext(function($ctx1) {
  66799. //>>excludeEnd("ctx");
  66800. var $2,$3,$1;
  66801. $2=$recv($Set())._new();
  66802. $recv($2)._add_($Smalltalk());
  66803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66804. $ctx1.sendIdx["add:"]=1;
  66805. //>>excludeEnd("ctx");
  66806. $recv($2)._add_(nil);
  66807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66808. $ctx1.sendIdx["add:"]=2;
  66809. //>>excludeEnd("ctx");
  66810. $recv($2)._add_((3).__at((3)));
  66811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66812. $ctx1.sendIdx["add:"]=3;
  66813. //>>excludeEnd("ctx");
  66814. $recv($2)._add_(false);
  66815. $3=$recv($2)._yourself();
  66816. $1=$3;
  66817. return $1;
  66818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66819. }, function($ctx1) {$ctx1.fill(self,"collection",{},$globals.SetTest)});
  66820. //>>excludeEnd("ctx");
  66821. },
  66822. //>>excludeStart("ide", pragmas.excludeIdeData);
  66823. args: [],
  66824. source: "collection\x0a\x09^ Set new\x0a\x09\x09add: Smalltalk;\x0a\x09\x09add: nil;\x0a\x09\x09add: 3@3;\x0a\x09\x09add: false;\x0a\x09\x09yourself",
  66825. referencedClasses: ["Set", "Smalltalk"],
  66826. //>>excludeEnd("ide");
  66827. messageSends: ["add:", "new", "@", "yourself"]
  66828. }),
  66829. $globals.SetTest);
  66830. $core.addMethod(
  66831. $core.method({
  66832. selector: "collectionOfPrintStrings",
  66833. protocol: 'fixture',
  66834. fn: function (){
  66835. var self=this;
  66836. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  66837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66838. return $core.withContext(function($ctx1) {
  66839. //>>excludeEnd("ctx");
  66840. var $2,$3,$1;
  66841. $2=$recv($Set())._new();
  66842. $recv($2)._add_("a SmalltalkImage");
  66843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66844. $ctx1.sendIdx["add:"]=1;
  66845. //>>excludeEnd("ctx");
  66846. $recv($2)._add_("nil");
  66847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66848. $ctx1.sendIdx["add:"]=2;
  66849. //>>excludeEnd("ctx");
  66850. $recv($2)._add_("3@3");
  66851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66852. $ctx1.sendIdx["add:"]=3;
  66853. //>>excludeEnd("ctx");
  66854. $recv($2)._add_("false");
  66855. $3=$recv($2)._yourself();
  66856. $1=$3;
  66857. return $1;
  66858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66859. }, function($ctx1) {$ctx1.fill(self,"collectionOfPrintStrings",{},$globals.SetTest)});
  66860. //>>excludeEnd("ctx");
  66861. },
  66862. //>>excludeStart("ide", pragmas.excludeIdeData);
  66863. args: [],
  66864. source: "collectionOfPrintStrings\x0a\x09^ Set new\x0a\x09\x09add: 'a SmalltalkImage';\x0a\x09\x09add: 'nil';\x0a\x09\x09add: '3@3';\x0a\x09\x09add: 'false';\x0a\x09\x09yourself",
  66865. referencedClasses: ["Set"],
  66866. //>>excludeEnd("ide");
  66867. messageSends: ["add:", "new", "yourself"]
  66868. }),
  66869. $globals.SetTest);
  66870. $core.addMethod(
  66871. $core.method({
  66872. selector: "collectionSize",
  66873. protocol: 'fixture',
  66874. fn: function (){
  66875. var self=this;
  66876. return (4);
  66877. },
  66878. //>>excludeStart("ide", pragmas.excludeIdeData);
  66879. args: [],
  66880. source: "collectionSize\x0a\x09^ 4",
  66881. referencedClasses: [],
  66882. //>>excludeEnd("ide");
  66883. messageSends: []
  66884. }),
  66885. $globals.SetTest);
  66886. $core.addMethod(
  66887. $core.method({
  66888. selector: "collectionWithDuplicates",
  66889. protocol: 'fixture',
  66890. fn: function (){
  66891. var self=this;
  66892. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66893. return $core.withContext(function($ctx1) {
  66894. //>>excludeEnd("ctx");
  66895. var $2,$3,$1;
  66896. $2=self._collection();
  66897. $recv($2)._add_((0));
  66898. $3=$recv($2)._yourself();
  66899. $1=$3;
  66900. return $1;
  66901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66902. }, function($ctx1) {$ctx1.fill(self,"collectionWithDuplicates",{},$globals.SetTest)});
  66903. //>>excludeEnd("ctx");
  66904. },
  66905. //>>excludeStart("ide", pragmas.excludeIdeData);
  66906. args: [],
  66907. source: "collectionWithDuplicates\x0a\x09\x22Set has no duplicates\x22\x0a\x09^ self collection add: 0; yourself",
  66908. referencedClasses: [],
  66909. //>>excludeEnd("ide");
  66910. messageSends: ["add:", "collection", "yourself"]
  66911. }),
  66912. $globals.SetTest);
  66913. $core.addMethod(
  66914. $core.method({
  66915. selector: "collectionWithNewValue",
  66916. protocol: 'fixture',
  66917. fn: function (){
  66918. var self=this;
  66919. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  66920. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  66921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66922. return $core.withContext(function($ctx1) {
  66923. //>>excludeEnd("ctx");
  66924. var $2,$3,$1;
  66925. $2=$recv($Set())._new();
  66926. $recv($2)._add_($Smalltalk());
  66927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66928. $ctx1.sendIdx["add:"]=1;
  66929. //>>excludeEnd("ctx");
  66930. $recv($2)._add_(nil);
  66931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66932. $ctx1.sendIdx["add:"]=2;
  66933. //>>excludeEnd("ctx");
  66934. $recv($2)._add_((3).__at((3)));
  66935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66936. $ctx1.sendIdx["add:"]=3;
  66937. //>>excludeEnd("ctx");
  66938. $recv($2)._add_("N");
  66939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66940. $ctx1.sendIdx["add:"]=4;
  66941. //>>excludeEnd("ctx");
  66942. $recv($2)._add_(false);
  66943. $3=$recv($2)._yourself();
  66944. $1=$3;
  66945. return $1;
  66946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66947. }, function($ctx1) {$ctx1.fill(self,"collectionWithNewValue",{},$globals.SetTest)});
  66948. //>>excludeEnd("ctx");
  66949. },
  66950. //>>excludeStart("ide", pragmas.excludeIdeData);
  66951. args: [],
  66952. source: "collectionWithNewValue\x0a\x09^ Set new\x0a\x09\x09add: Smalltalk;\x0a\x09\x09add: nil;\x0a\x09\x09add: 3@3;\x0a\x09\x09add: 'N';\x0a\x09\x09add: false;\x0a\x09\x09yourself",
  66953. referencedClasses: ["Set", "Smalltalk"],
  66954. //>>excludeEnd("ide");
  66955. messageSends: ["add:", "new", "@", "yourself"]
  66956. }),
  66957. $globals.SetTest);
  66958. $core.addMethod(
  66959. $core.method({
  66960. selector: "testAddAll",
  66961. protocol: 'tests',
  66962. fn: function (){
  66963. var self=this;
  66964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66965. return $core.withContext(function($ctx1) {
  66966. //>>excludeEnd("ctx");
  66967. var $2,$3,$4,$5,$1,$6,$8,$9,$10,$11,$7,$12,$14,$15,$13;
  66968. (
  66969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66970. $ctx1.supercall = true,
  66971. //>>excludeEnd("ctx");
  66972. $globals.SetTest.superclass.fn.prototype._testAddAll.apply($recv(self), []));
  66973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66974. $ctx1.supercall = false;
  66975. //>>excludeEnd("ctx");;
  66976. $2=self._collection();
  66977. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66978. $ctx1.sendIdx["collection"]=1;
  66979. //>>excludeEnd("ctx");
  66980. $3=$2;
  66981. $4=self._collection();
  66982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66983. $ctx1.sendIdx["collection"]=2;
  66984. //>>excludeEnd("ctx");
  66985. $recv($3)._addAll_($4);
  66986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66987. $ctx1.sendIdx["addAll:"]=1;
  66988. //>>excludeEnd("ctx");
  66989. $5=$recv($2)._yourself();
  66990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66991. $ctx1.sendIdx["yourself"]=1;
  66992. //>>excludeEnd("ctx");
  66993. $1=$5;
  66994. $6=self._collection();
  66995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66996. $ctx1.sendIdx["collection"]=3;
  66997. //>>excludeEnd("ctx");
  66998. self._assert_equals_($1,$6);
  66999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67000. $ctx1.sendIdx["assert:equals:"]=1;
  67001. //>>excludeEnd("ctx");
  67002. $8=self._collection();
  67003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67004. $ctx1.sendIdx["collection"]=4;
  67005. //>>excludeEnd("ctx");
  67006. $9=$8;
  67007. $10=self._collectionWithNewValue();
  67008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67009. $ctx1.sendIdx["collectionWithNewValue"]=1;
  67010. //>>excludeEnd("ctx");
  67011. $recv($9)._addAll_($10);
  67012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67013. $ctx1.sendIdx["addAll:"]=2;
  67014. //>>excludeEnd("ctx");
  67015. $11=$recv($8)._yourself();
  67016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67017. $ctx1.sendIdx["yourself"]=2;
  67018. //>>excludeEnd("ctx");
  67019. $7=$11;
  67020. $12=self._collectionWithNewValue();
  67021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67022. $ctx1.sendIdx["collectionWithNewValue"]=2;
  67023. //>>excludeEnd("ctx");
  67024. self._assert_equals_($7,$12);
  67025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67026. $ctx1.sendIdx["assert:equals:"]=2;
  67027. //>>excludeEnd("ctx");
  67028. $14=self._collectionWithNewValue();
  67029. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67030. $ctx1.sendIdx["collectionWithNewValue"]=3;
  67031. //>>excludeEnd("ctx");
  67032. $recv($14)._addAll_(self._collection());
  67033. $15=$recv($14)._yourself();
  67034. $13=$15;
  67035. self._assert_equals_($13,self._collectionWithNewValue());
  67036. return self;
  67037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67038. }, function($ctx1) {$ctx1.fill(self,"testAddAll",{},$globals.SetTest)});
  67039. //>>excludeEnd("ctx");
  67040. },
  67041. //>>excludeStart("ide", pragmas.excludeIdeData);
  67042. args: [],
  67043. source: "testAddAll\x0a\x09super testAddAll.\x0a\x09self assert: (self collection addAll: self collection; yourself) equals: self collection.\x0a\x09self assert: (self collection addAll: self collectionWithNewValue; yourself) equals: self collectionWithNewValue.\x0a\x09self assert: (self collectionWithNewValue addAll: self collection; yourself) equals: self collectionWithNewValue",
  67044. referencedClasses: [],
  67045. //>>excludeEnd("ide");
  67046. messageSends: ["testAddAll", "assert:equals:", "addAll:", "collection", "yourself", "collectionWithNewValue"]
  67047. }),
  67048. $globals.SetTest);
  67049. $core.addMethod(
  67050. $core.method({
  67051. selector: "testAddRemove",
  67052. protocol: 'tests',
  67053. fn: function (){
  67054. var self=this;
  67055. var set;
  67056. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  67057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67058. return $core.withContext(function($ctx1) {
  67059. //>>excludeEnd("ctx");
  67060. var $1,$2;
  67061. set=$recv($Set())._new();
  67062. self._assert_($recv(set)._isEmpty());
  67063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67064. $ctx1.sendIdx["assert:"]=1;
  67065. //>>excludeEnd("ctx");
  67066. $recv(set)._add_((3));
  67067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67068. $ctx1.sendIdx["add:"]=1;
  67069. //>>excludeEnd("ctx");
  67070. $1=$recv(set)._includes_((3));
  67071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67072. $ctx1.sendIdx["includes:"]=1;
  67073. //>>excludeEnd("ctx");
  67074. self._assert_($1);
  67075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67076. $ctx1.sendIdx["assert:"]=2;
  67077. //>>excludeEnd("ctx");
  67078. $recv(set)._add_((5));
  67079. $2=$recv(set)._includes_((5));
  67080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67081. $ctx1.sendIdx["includes:"]=2;
  67082. //>>excludeEnd("ctx");
  67083. self._assert_($2);
  67084. $recv(set)._remove_((3));
  67085. self._deny_($recv(set)._includes_((3)));
  67086. return self;
  67087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67088. }, function($ctx1) {$ctx1.fill(self,"testAddRemove",{set:set},$globals.SetTest)});
  67089. //>>excludeEnd("ctx");
  67090. },
  67091. //>>excludeStart("ide", pragmas.excludeIdeData);
  67092. args: [],
  67093. source: "testAddRemove\x0a\x09| set |\x0a\x09set := Set new.\x0a\x09\x0a\x09self assert: set isEmpty.\x0a\x0a\x09set add: 3.\x0a\x09self assert: (set includes: 3).\x0a\x0a\x09set add: 5.\x0a\x09self assert: (set includes: 5).\x0a\x0a\x09set remove: 3.\x0a\x09self deny: (set includes: 3)",
  67094. referencedClasses: ["Set"],
  67095. //>>excludeEnd("ide");
  67096. messageSends: ["new", "assert:", "isEmpty", "add:", "includes:", "remove:", "deny:"]
  67097. }),
  67098. $globals.SetTest);
  67099. $core.addMethod(
  67100. $core.method({
  67101. selector: "testAt",
  67102. protocol: 'tests',
  67103. fn: function (){
  67104. var self=this;
  67105. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  67106. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67108. return $core.withContext(function($ctx1) {
  67109. //>>excludeEnd("ctx");
  67110. self._should_raise_((function(){
  67111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67112. return $core.withContext(function($ctx2) {
  67113. //>>excludeEnd("ctx");
  67114. return $recv($recv($Set())._new())._at_put_((1),(2));
  67115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67116. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67117. //>>excludeEnd("ctx");
  67118. }),$Error());
  67119. return self;
  67120. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67121. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.SetTest)});
  67122. //>>excludeEnd("ctx");
  67123. },
  67124. //>>excludeStart("ide", pragmas.excludeIdeData);
  67125. args: [],
  67126. source: "testAt\x0a\x09self should: [ Set new at: 1 put: 2 ] raise: Error",
  67127. referencedClasses: ["Set", "Error"],
  67128. //>>excludeEnd("ide");
  67129. messageSends: ["should:raise:", "at:put:", "new"]
  67130. }),
  67131. $globals.SetTest);
  67132. $core.addMethod(
  67133. $core.method({
  67134. selector: "testCollect",
  67135. protocol: 'tests',
  67136. fn: function (){
  67137. var self=this;
  67138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67139. return $core.withContext(function($ctx1) {
  67140. //>>excludeEnd("ctx");
  67141. var $2,$1;
  67142. (
  67143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67144. $ctx1.supercall = true,
  67145. //>>excludeEnd("ctx");
  67146. $globals.SetTest.superclass.fn.prototype._testCollect.apply($recv(self), []));
  67147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67148. $ctx1.supercall = false;
  67149. //>>excludeEnd("ctx");;
  67150. $2=[(5), (6), (8)]._asSet();
  67151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67152. $ctx1.sendIdx["asSet"]=1;
  67153. //>>excludeEnd("ctx");
  67154. $1=$recv($2)._collect_((function(x){
  67155. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67156. return $core.withContext(function($ctx2) {
  67157. //>>excludeEnd("ctx");
  67158. return $recv(x).__backslash_backslash((3));
  67159. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67160. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  67161. //>>excludeEnd("ctx");
  67162. }));
  67163. self._assert_equals_($1,[(0), (2)]._asSet());
  67164. return self;
  67165. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67166. }, function($ctx1) {$ctx1.fill(self,"testCollect",{},$globals.SetTest)});
  67167. //>>excludeEnd("ctx");
  67168. },
  67169. //>>excludeStart("ide", pragmas.excludeIdeData);
  67170. args: [],
  67171. source: "testCollect\x0a\x09super testCollect.\x0a\x09self assert: (#(5 6 8) asSet collect: [ :x | x \x5c\x5c 3 ]) equals: #(0 2) asSet",
  67172. referencedClasses: [],
  67173. //>>excludeEnd("ide");
  67174. messageSends: ["testCollect", "assert:equals:", "collect:", "asSet", "\x5c\x5c"]
  67175. }),
  67176. $globals.SetTest);
  67177. $core.addMethod(
  67178. $core.method({
  67179. selector: "testComma",
  67180. protocol: 'tests',
  67181. fn: function (){
  67182. var self=this;
  67183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67184. return $core.withContext(function($ctx1) {
  67185. //>>excludeEnd("ctx");
  67186. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$9;
  67187. (
  67188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67189. $ctx1.supercall = true,
  67190. //>>excludeEnd("ctx");
  67191. $globals.SetTest.superclass.fn.prototype._testComma.apply($recv(self), []));
  67192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67193. $ctx1.supercall = false;
  67194. //>>excludeEnd("ctx");;
  67195. $2=self._collection();
  67196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67197. $ctx1.sendIdx["collection"]=1;
  67198. //>>excludeEnd("ctx");
  67199. $3=self._collection();
  67200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67201. $ctx1.sendIdx["collection"]=2;
  67202. //>>excludeEnd("ctx");
  67203. $1=$recv($2).__comma($3);
  67204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67205. $ctx1.sendIdx[","]=1;
  67206. //>>excludeEnd("ctx");
  67207. $4=self._collection();
  67208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67209. $ctx1.sendIdx["collection"]=3;
  67210. //>>excludeEnd("ctx");
  67211. self._assert_equals_($1,$4);
  67212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67213. $ctx1.sendIdx["assert:equals:"]=1;
  67214. //>>excludeEnd("ctx");
  67215. $6=self._collection();
  67216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67217. $ctx1.sendIdx["collection"]=4;
  67218. //>>excludeEnd("ctx");
  67219. $7=self._collectionWithNewValue();
  67220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67221. $ctx1.sendIdx["collectionWithNewValue"]=1;
  67222. //>>excludeEnd("ctx");
  67223. $5=$recv($6).__comma($7);
  67224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67225. $ctx1.sendIdx[","]=2;
  67226. //>>excludeEnd("ctx");
  67227. $8=self._collectionWithNewValue();
  67228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67229. $ctx1.sendIdx["collectionWithNewValue"]=2;
  67230. //>>excludeEnd("ctx");
  67231. self._assert_equals_($5,$8);
  67232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67233. $ctx1.sendIdx["assert:equals:"]=2;
  67234. //>>excludeEnd("ctx");
  67235. $10=self._collectionWithNewValue();
  67236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67237. $ctx1.sendIdx["collectionWithNewValue"]=3;
  67238. //>>excludeEnd("ctx");
  67239. $9=$recv($10).__comma(self._collection());
  67240. self._assert_equals_($9,self._collectionWithNewValue());
  67241. return self;
  67242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67243. }, function($ctx1) {$ctx1.fill(self,"testComma",{},$globals.SetTest)});
  67244. //>>excludeEnd("ctx");
  67245. },
  67246. //>>excludeStart("ide", pragmas.excludeIdeData);
  67247. args: [],
  67248. source: "testComma\x0a\x09super testComma.\x0a\x09self assert: self collection, self collection equals: self collection.\x0a\x09self assert: self collection, self collectionWithNewValue equals: self collectionWithNewValue.\x0a\x09self assert: self collectionWithNewValue, self collection equals: self collectionWithNewValue",
  67249. referencedClasses: [],
  67250. //>>excludeEnd("ide");
  67251. messageSends: ["testComma", "assert:equals:", ",", "collection", "collectionWithNewValue"]
  67252. }),
  67253. $globals.SetTest);
  67254. $core.addMethod(
  67255. $core.method({
  67256. selector: "testComparing",
  67257. protocol: 'tests',
  67258. fn: function (){
  67259. var self=this;
  67260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67261. return $core.withContext(function($ctx1) {
  67262. //>>excludeEnd("ctx");
  67263. var $1,$2,$3,$4,$6,$7,$5,$9,$8;
  67264. $1=[(0), (2)]._asSet();
  67265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67266. $ctx1.sendIdx["asSet"]=1;
  67267. //>>excludeEnd("ctx");
  67268. $2=[(0), (2)]._asSet();
  67269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67270. $ctx1.sendIdx["asSet"]=2;
  67271. //>>excludeEnd("ctx");
  67272. self._assert_equals_($1,$2);
  67273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67274. $ctx1.sendIdx["assert:equals:"]=1;
  67275. //>>excludeEnd("ctx");
  67276. $3=[(2), (0)]._asSet();
  67277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67278. $ctx1.sendIdx["asSet"]=3;
  67279. //>>excludeEnd("ctx");
  67280. $4=[(0), (2)]._asSet();
  67281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67282. $ctx1.sendIdx["asSet"]=4;
  67283. //>>excludeEnd("ctx");
  67284. self._assert_equals_($3,$4);
  67285. $6=[(0), (2), (3)]._asSet();
  67286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67287. $ctx1.sendIdx["asSet"]=5;
  67288. //>>excludeEnd("ctx");
  67289. $7=[(0), (2)]._asSet();
  67290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67291. $ctx1.sendIdx["asSet"]=6;
  67292. //>>excludeEnd("ctx");
  67293. $5=$recv($6).__eq($7);
  67294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67295. $ctx1.sendIdx["="]=1;
  67296. //>>excludeEnd("ctx");
  67297. self._deny_($5);
  67298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67299. $ctx1.sendIdx["deny:"]=1;
  67300. //>>excludeEnd("ctx");
  67301. $9=[(1), (2)]._asSet();
  67302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67303. $ctx1.sendIdx["asSet"]=7;
  67304. //>>excludeEnd("ctx");
  67305. $8=$recv($9).__eq([(0), (2)]._asSet());
  67306. self._deny_($8);
  67307. return self;
  67308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67309. }, function($ctx1) {$ctx1.fill(self,"testComparing",{},$globals.SetTest)});
  67310. //>>excludeEnd("ctx");
  67311. },
  67312. //>>excludeStart("ide", pragmas.excludeIdeData);
  67313. args: [],
  67314. source: "testComparing\x0a\x09self assert: #(0 2) asSet equals: #(0 2) asSet.\x0a\x09self assert: #(2 0) asSet equals: #(0 2) asSet.\x0a\x09self deny: #(0 2 3) asSet = #(0 2) asSet.\x0a\x09self deny: #(1 2) asSet = #(0 2) asSet",
  67315. referencedClasses: [],
  67316. //>>excludeEnd("ide");
  67317. messageSends: ["assert:equals:", "asSet", "deny:", "="]
  67318. }),
  67319. $globals.SetTest);
  67320. $core.addMethod(
  67321. $core.method({
  67322. selector: "testPrintString",
  67323. protocol: 'tests',
  67324. fn: function (){
  67325. var self=this;
  67326. var set;
  67327. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  67328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67329. return $core.withContext(function($ctx1) {
  67330. //>>excludeEnd("ctx");
  67331. var $1,$2,$3,$4,$5,$6,$7,$8,$9;
  67332. set=$recv($Set())._new();
  67333. $1=$recv(set)._printString();
  67334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67335. $ctx1.sendIdx["printString"]=1;
  67336. //>>excludeEnd("ctx");
  67337. self._assert_equals_($1,"a Set ()");
  67338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67339. $ctx1.sendIdx["assert:equals:"]=1;
  67340. //>>excludeEnd("ctx");
  67341. $2=set;
  67342. $recv($2)._add_((1));
  67343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67344. $ctx1.sendIdx["add:"]=1;
  67345. //>>excludeEnd("ctx");
  67346. $3=$recv($2)._add_((3));
  67347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67348. $ctx1.sendIdx["add:"]=2;
  67349. //>>excludeEnd("ctx");
  67350. $4=$recv(set)._printString();
  67351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67352. $ctx1.sendIdx["printString"]=2;
  67353. //>>excludeEnd("ctx");
  67354. self._assert_equals_($4,"a Set (1 3)");
  67355. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67356. $ctx1.sendIdx["assert:equals:"]=2;
  67357. //>>excludeEnd("ctx");
  67358. $recv(set)._add_("foo");
  67359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67360. $ctx1.sendIdx["add:"]=3;
  67361. //>>excludeEnd("ctx");
  67362. $5=$recv(set)._printString();
  67363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67364. $ctx1.sendIdx["printString"]=3;
  67365. //>>excludeEnd("ctx");
  67366. self._assert_equals_($5,"a Set (1 3 'foo')");
  67367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67368. $ctx1.sendIdx["assert:equals:"]=3;
  67369. //>>excludeEnd("ctx");
  67370. $6=set;
  67371. $recv($6)._remove_((1));
  67372. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67373. $ctx1.sendIdx["remove:"]=1;
  67374. //>>excludeEnd("ctx");
  67375. $7=$recv($6)._remove_((3));
  67376. $8=$recv(set)._printString();
  67377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67378. $ctx1.sendIdx["printString"]=4;
  67379. //>>excludeEnd("ctx");
  67380. self._assert_equals_($8,"a Set ('foo')");
  67381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67382. $ctx1.sendIdx["assert:equals:"]=4;
  67383. //>>excludeEnd("ctx");
  67384. $recv(set)._add_((3));
  67385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67386. $ctx1.sendIdx["add:"]=4;
  67387. //>>excludeEnd("ctx");
  67388. $9=$recv(set)._printString();
  67389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67390. $ctx1.sendIdx["printString"]=5;
  67391. //>>excludeEnd("ctx");
  67392. self._assert_equals_($9,"a Set (3 'foo')");
  67393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67394. $ctx1.sendIdx["assert:equals:"]=5;
  67395. //>>excludeEnd("ctx");
  67396. $recv(set)._add_((3));
  67397. self._assert_equals_($recv(set)._printString(),"a Set (3 'foo')");
  67398. return self;
  67399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67400. }, function($ctx1) {$ctx1.fill(self,"testPrintString",{set:set},$globals.SetTest)});
  67401. //>>excludeEnd("ctx");
  67402. },
  67403. //>>excludeStart("ide", pragmas.excludeIdeData);
  67404. args: [],
  67405. source: "testPrintString\x0a\x09| set |\x0a\x09set := Set new.\x0a\x09self assert: set printString equals: 'a Set ()'.\x0a\x09set add: 1; add: 3.\x0a\x09self assert: set printString equals: 'a Set (1 3)'.\x0a\x09set add: 'foo'.\x0a\x09self assert: set printString equals: 'a Set (1 3 ''foo'')'.\x0a\x09set remove: 1; remove: 3.\x0a\x09self assert: set printString equals: 'a Set (''foo'')'.\x0a\x09set add: 3.\x0a\x09self assert: set printString equals: 'a Set (3 ''foo'')'.\x0a\x09set add: 3.\x0a\x09self assert: set printString equals: 'a Set (3 ''foo'')'",
  67406. referencedClasses: ["Set"],
  67407. //>>excludeEnd("ide");
  67408. messageSends: ["new", "assert:equals:", "printString", "add:", "remove:"]
  67409. }),
  67410. $globals.SetTest);
  67411. $core.addMethod(
  67412. $core.method({
  67413. selector: "testUnboxedObjects",
  67414. protocol: 'tests',
  67415. fn: function (){
  67416. var self=this;
  67417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67418. return $core.withContext(function($ctx1) {
  67419. //>>excludeEnd("ctx");
  67420. var $4,$3,$2,$1;
  67421. $4="foo"._yourself();
  67422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67423. $ctx1.sendIdx["yourself"]=1;
  67424. //>>excludeEnd("ctx");
  67425. $3=[$4,"foo"._yourself()];
  67426. $2=$recv($3)._asSet();
  67427. $1=$recv($2)._asArray();
  67428. self._assert_equals_($1,["foo"]);
  67429. return self;
  67430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67431. }, function($ctx1) {$ctx1.fill(self,"testUnboxedObjects",{},$globals.SetTest)});
  67432. //>>excludeEnd("ctx");
  67433. },
  67434. //>>excludeStart("ide", pragmas.excludeIdeData);
  67435. args: [],
  67436. source: "testUnboxedObjects\x0a\x09self assert: {'foo' yourself. 'foo' yourself} asSet asArray equals: #('foo')",
  67437. referencedClasses: [],
  67438. //>>excludeEnd("ide");
  67439. messageSends: ["assert:equals:", "asArray", "asSet", "yourself"]
  67440. }),
  67441. $globals.SetTest);
  67442. $core.addMethod(
  67443. $core.method({
  67444. selector: "testUnicity",
  67445. protocol: 'tests',
  67446. fn: function (){
  67447. var self=this;
  67448. var set;
  67449. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  67450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67451. return $core.withContext(function($ctx1) {
  67452. //>>excludeEnd("ctx");
  67453. var $1;
  67454. set=$recv($Set())._new();
  67455. $recv(set)._add_((21));
  67456. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67457. $ctx1.sendIdx["add:"]=1;
  67458. //>>excludeEnd("ctx");
  67459. $recv(set)._add_("hello");
  67460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67461. $ctx1.sendIdx["add:"]=2;
  67462. //>>excludeEnd("ctx");
  67463. $recv(set)._add_((21));
  67464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67465. $ctx1.sendIdx["add:"]=3;
  67466. //>>excludeEnd("ctx");
  67467. $1=$recv(set)._size();
  67468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67469. $ctx1.sendIdx["size"]=1;
  67470. //>>excludeEnd("ctx");
  67471. self._assert_equals_($1,(2));
  67472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67473. $ctx1.sendIdx["assert:equals:"]=1;
  67474. //>>excludeEnd("ctx");
  67475. $recv(set)._add_("hello");
  67476. self._assert_equals_($recv(set)._size(),(2));
  67477. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67478. $ctx1.sendIdx["assert:equals:"]=2;
  67479. //>>excludeEnd("ctx");
  67480. self._assert_equals_($recv(set)._asArray(),[(21), "hello"]);
  67481. return self;
  67482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67483. }, function($ctx1) {$ctx1.fill(self,"testUnicity",{set:set},$globals.SetTest)});
  67484. //>>excludeEnd("ctx");
  67485. },
  67486. //>>excludeStart("ide", pragmas.excludeIdeData);
  67487. args: [],
  67488. source: "testUnicity\x0a\x09| set |\x0a\x09set := Set new.\x0a\x09set add: 21.\x0a\x09set add: 'hello'.\x0a\x0a\x09set add: 21.\x0a\x09self assert: set size equals: 2.\x0a\x09\x0a\x09set add: 'hello'.\x0a\x09self assert: set size equals: 2.\x0a\x0a\x09self assert: set asArray equals: #(21 'hello')",
  67489. referencedClasses: ["Set"],
  67490. //>>excludeEnd("ide");
  67491. messageSends: ["new", "add:", "assert:equals:", "size", "asArray"]
  67492. }),
  67493. $globals.SetTest);
  67494. $core.addMethod(
  67495. $core.method({
  67496. selector: "collectionClass",
  67497. protocol: 'fixture',
  67498. fn: function (){
  67499. var self=this;
  67500. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  67501. return $Set();
  67502. },
  67503. //>>excludeStart("ide", pragmas.excludeIdeData);
  67504. args: [],
  67505. source: "collectionClass\x0a\x09^ Set",
  67506. referencedClasses: ["Set"],
  67507. //>>excludeEnd("ide");
  67508. messageSends: []
  67509. }),
  67510. $globals.SetTest.klass);
  67511. $core.addClass('ConsoleTranscriptTest', $globals.TestCase, [], 'Kernel-Tests');
  67512. $core.addMethod(
  67513. $core.method({
  67514. selector: "testShow",
  67515. protocol: 'tests',
  67516. fn: function (){
  67517. var self=this;
  67518. var originalTranscript;
  67519. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  67520. function $ConsoleTranscript(){return $globals.ConsoleTranscript||(typeof ConsoleTranscript=="undefined"?nil:ConsoleTranscript)}
  67521. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  67522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67523. return $core.withContext(function($ctx1) {
  67524. //>>excludeEnd("ctx");
  67525. originalTranscript=$recv($Transcript())._current();
  67526. $recv($Transcript())._register_($recv($ConsoleTranscript())._new());
  67527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67528. $ctx1.sendIdx["register:"]=1;
  67529. //>>excludeEnd("ctx");
  67530. self._shouldnt_raise_((function(){
  67531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67532. return $core.withContext(function($ctx2) {
  67533. //>>excludeEnd("ctx");
  67534. return $recv($Transcript())._show_("Hello console!");
  67535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67536. $ctx2.sendIdx["show:"]=1;
  67537. //>>excludeEnd("ctx");
  67538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67539. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  67540. //>>excludeEnd("ctx");
  67541. }),$Error());
  67542. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67543. $ctx1.sendIdx["shouldnt:raise:"]=1;
  67544. //>>excludeEnd("ctx");
  67545. self._shouldnt_raise_((function(){
  67546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67547. return $core.withContext(function($ctx2) {
  67548. //>>excludeEnd("ctx");
  67549. return $recv($Transcript())._show_(console);
  67550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67551. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  67552. //>>excludeEnd("ctx");
  67553. }),$Error());
  67554. $recv($Transcript())._register_(originalTranscript);
  67555. return self;
  67556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67557. }, function($ctx1) {$ctx1.fill(self,"testShow",{originalTranscript:originalTranscript},$globals.ConsoleTranscriptTest)});
  67558. //>>excludeEnd("ctx");
  67559. },
  67560. //>>excludeStart("ide", pragmas.excludeIdeData);
  67561. args: [],
  67562. source: "testShow\x0a| originalTranscript |\x0aoriginalTranscript := Transcript current.\x0aTranscript register: ConsoleTranscript new.\x0a\x0aself shouldnt: [ Transcript show: 'Hello console!' ] raise: Error.\x0aself shouldnt: [ Transcript show: console ] raise: Error.\x0a\x0aTranscript register: originalTranscript.",
  67563. referencedClasses: ["Transcript", "ConsoleTranscript", "Error"],
  67564. //>>excludeEnd("ide");
  67565. messageSends: ["current", "register:", "new", "shouldnt:raise:", "show:"]
  67566. }),
  67567. $globals.ConsoleTranscriptTest);
  67568. $core.addClass('JSObjectProxyTest', $globals.TestCase, [], 'Kernel-Tests');
  67569. $core.addMethod(
  67570. $core.method({
  67571. selector: "jsNull",
  67572. protocol: 'accessing',
  67573. fn: function (){
  67574. var self=this;
  67575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67576. return $core.withContext(function($ctx1) {
  67577. //>>excludeEnd("ctx");
  67578. return null;
  67579. return self;
  67580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67581. }, function($ctx1) {$ctx1.fill(self,"jsNull",{},$globals.JSObjectProxyTest)});
  67582. //>>excludeEnd("ctx");
  67583. },
  67584. //>>excludeStart("ide", pragmas.excludeIdeData);
  67585. args: [],
  67586. source: "jsNull\x0a\x09<return null>",
  67587. referencedClasses: [],
  67588. //>>excludeEnd("ide");
  67589. messageSends: []
  67590. }),
  67591. $globals.JSObjectProxyTest);
  67592. $core.addMethod(
  67593. $core.method({
  67594. selector: "jsObject",
  67595. protocol: 'accessing',
  67596. fn: function (){
  67597. var self=this;
  67598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67599. return $core.withContext(function($ctx1) {
  67600. //>>excludeEnd("ctx");
  67601. return {a: 1, b: function() {return 2;}, c: function(object) {return object;}, d: '', 'e': null, 'f': void 0};
  67602. return self;
  67603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67604. }, function($ctx1) {$ctx1.fill(self,"jsObject",{},$globals.JSObjectProxyTest)});
  67605. //>>excludeEnd("ctx");
  67606. },
  67607. //>>excludeStart("ide", pragmas.excludeIdeData);
  67608. args: [],
  67609. source: "jsObject\x0a\x09<return {a: 1, b: function() {return 2;}, c: function(object) {return object;}, d: '', 'e': null, 'f': void 0}>",
  67610. referencedClasses: [],
  67611. //>>excludeEnd("ide");
  67612. messageSends: []
  67613. }),
  67614. $globals.JSObjectProxyTest);
  67615. $core.addMethod(
  67616. $core.method({
  67617. selector: "jsUndefined",
  67618. protocol: 'accessing',
  67619. fn: function (){
  67620. var self=this;
  67621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67622. return $core.withContext(function($ctx1) {
  67623. //>>excludeEnd("ctx");
  67624. return;
  67625. return self;
  67626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67627. }, function($ctx1) {$ctx1.fill(self,"jsUndefined",{},$globals.JSObjectProxyTest)});
  67628. //>>excludeEnd("ctx");
  67629. },
  67630. //>>excludeStart("ide", pragmas.excludeIdeData);
  67631. args: [],
  67632. source: "jsUndefined\x0a\x09<return>",
  67633. referencedClasses: [],
  67634. //>>excludeEnd("ide");
  67635. messageSends: []
  67636. }),
  67637. $globals.JSObjectProxyTest);
  67638. $core.addMethod(
  67639. $core.method({
  67640. selector: "testAtIfAbsent",
  67641. protocol: 'tests',
  67642. fn: function (){
  67643. var self=this;
  67644. var testObject;
  67645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67646. return $core.withContext(function($ctx1) {
  67647. //>>excludeEnd("ctx");
  67648. var $1,$2,$3;
  67649. testObject=self._jsObject();
  67650. $1=$recv(testObject)._at_ifAbsent_("abc",(function(){
  67651. return "Property does not exist";
  67652. }));
  67653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67654. $ctx1.sendIdx["at:ifAbsent:"]=1;
  67655. //>>excludeEnd("ctx");
  67656. self._assert_equals_($1,"Property does not exist");
  67657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67658. $ctx1.sendIdx["assert:equals:"]=1;
  67659. //>>excludeEnd("ctx");
  67660. $2=$recv(testObject)._at_ifAbsent_("e",(function(){
  67661. return "Property does not exist";
  67662. }));
  67663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67664. $ctx1.sendIdx["at:ifAbsent:"]=2;
  67665. //>>excludeEnd("ctx");
  67666. self._assert_equals_($2,nil);
  67667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67668. $ctx1.sendIdx["assert:equals:"]=2;
  67669. //>>excludeEnd("ctx");
  67670. $3=$recv(testObject)._at_ifAbsent_("a",(function(){
  67671. return "Property does not exist";
  67672. }));
  67673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67674. $ctx1.sendIdx["at:ifAbsent:"]=3;
  67675. //>>excludeEnd("ctx");
  67676. self._assert_equals_($3,(1));
  67677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67678. $ctx1.sendIdx["assert:equals:"]=3;
  67679. //>>excludeEnd("ctx");
  67680. self._assert_equals_($recv(testObject)._at_ifAbsent_("f",(function(){
  67681. return "Property does not exist";
  67682. })),nil);
  67683. return self;
  67684. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67685. }, function($ctx1) {$ctx1.fill(self,"testAtIfAbsent",{testObject:testObject},$globals.JSObjectProxyTest)});
  67686. //>>excludeEnd("ctx");
  67687. },
  67688. //>>excludeStart("ide", pragmas.excludeIdeData);
  67689. args: [],
  67690. source: "testAtIfAbsent\x0a\x09| testObject |\x0a\x09testObject := self jsObject.\x0a\x09self assert: (testObject at: 'abc' ifAbsent: [ 'Property does not exist' ]) equals: 'Property does not exist'.\x0a\x09self assert: (testObject at: 'e' ifAbsent: [ 'Property does not exist' ]) equals: nil.\x0a\x09self assert: (testObject at: 'a' ifAbsent: [ 'Property does not exist' ]) equals: 1.\x0a\x09self assert: (testObject at: 'f' ifAbsent: [ 'Property does not exist' ]) equals: nil.",
  67691. referencedClasses: [],
  67692. //>>excludeEnd("ide");
  67693. messageSends: ["jsObject", "assert:equals:", "at:ifAbsent:"]
  67694. }),
  67695. $globals.JSObjectProxyTest);
  67696. $core.addMethod(
  67697. $core.method({
  67698. selector: "testAtIfPresent",
  67699. protocol: 'tests',
  67700. fn: function (){
  67701. var self=this;
  67702. var testObject;
  67703. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67704. return $core.withContext(function($ctx1) {
  67705. //>>excludeEnd("ctx");
  67706. var $2,$1,$4,$3,$6,$5;
  67707. testObject=self._jsObject();
  67708. $1=$recv(testObject)._at_ifPresent_("abc",(function(x){
  67709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67710. return $core.withContext(function($ctx2) {
  67711. //>>excludeEnd("ctx");
  67712. $2=$recv(x)._asString();
  67713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67714. $ctx2.sendIdx["asString"]=1;
  67715. //>>excludeEnd("ctx");
  67716. return "hello ".__comma($2);
  67717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67718. $ctx2.sendIdx[","]=1;
  67719. //>>excludeEnd("ctx");
  67720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67721. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  67722. //>>excludeEnd("ctx");
  67723. }));
  67724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67725. $ctx1.sendIdx["at:ifPresent:"]=1;
  67726. //>>excludeEnd("ctx");
  67727. self._assert_equals_($1,nil);
  67728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67729. $ctx1.sendIdx["assert:equals:"]=1;
  67730. //>>excludeEnd("ctx");
  67731. $3=$recv(testObject)._at_ifPresent_("e",(function(x){
  67732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67733. return $core.withContext(function($ctx2) {
  67734. //>>excludeEnd("ctx");
  67735. $4=$recv(x)._asString();
  67736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67737. $ctx2.sendIdx["asString"]=2;
  67738. //>>excludeEnd("ctx");
  67739. return "hello ".__comma($4);
  67740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67741. $ctx2.sendIdx[","]=2;
  67742. //>>excludeEnd("ctx");
  67743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67744. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,2)});
  67745. //>>excludeEnd("ctx");
  67746. }));
  67747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67748. $ctx1.sendIdx["at:ifPresent:"]=2;
  67749. //>>excludeEnd("ctx");
  67750. self._assert_equals_($3,"hello nil");
  67751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67752. $ctx1.sendIdx["assert:equals:"]=2;
  67753. //>>excludeEnd("ctx");
  67754. $5=$recv(testObject)._at_ifPresent_("a",(function(x){
  67755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67756. return $core.withContext(function($ctx2) {
  67757. //>>excludeEnd("ctx");
  67758. $6=$recv(x)._asString();
  67759. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67760. $ctx2.sendIdx["asString"]=3;
  67761. //>>excludeEnd("ctx");
  67762. return "hello ".__comma($6);
  67763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67764. $ctx2.sendIdx[","]=3;
  67765. //>>excludeEnd("ctx");
  67766. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67767. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,3)});
  67768. //>>excludeEnd("ctx");
  67769. }));
  67770. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67771. $ctx1.sendIdx["at:ifPresent:"]=3;
  67772. //>>excludeEnd("ctx");
  67773. self._assert_equals_($5,"hello 1");
  67774. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67775. $ctx1.sendIdx["assert:equals:"]=3;
  67776. //>>excludeEnd("ctx");
  67777. self._assert_equals_($recv(testObject)._at_ifPresent_("f",(function(x){
  67778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67779. return $core.withContext(function($ctx2) {
  67780. //>>excludeEnd("ctx");
  67781. return "hello ".__comma($recv(x)._asString());
  67782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67783. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,4)});
  67784. //>>excludeEnd("ctx");
  67785. })),"hello nil");
  67786. return self;
  67787. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67788. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresent",{testObject:testObject},$globals.JSObjectProxyTest)});
  67789. //>>excludeEnd("ctx");
  67790. },
  67791. //>>excludeStart("ide", pragmas.excludeIdeData);
  67792. args: [],
  67793. source: "testAtIfPresent\x0a\x09| testObject |\x0a\x09\x0a\x09testObject := self jsObject.\x0a\x09\x0a\x09self assert: (testObject at: 'abc' ifPresent: [ :x | 'hello ',x asString ]) equals: nil.\x0a\x09self assert: (testObject at: 'e' ifPresent: [ :x | 'hello ',x asString ]) equals: 'hello nil'.\x0a\x09self assert: (testObject at: 'a' ifPresent: [ :x | 'hello ',x asString ]) equals: 'hello 1'.\x0a\x09self assert: (testObject at: 'f' ifPresent: [ :x | 'hello ',x asString ]) equals: 'hello nil'.",
  67794. referencedClasses: [],
  67795. //>>excludeEnd("ide");
  67796. messageSends: ["jsObject", "assert:equals:", "at:ifPresent:", ",", "asString"]
  67797. }),
  67798. $globals.JSObjectProxyTest);
  67799. $core.addMethod(
  67800. $core.method({
  67801. selector: "testAtIfPresentIfAbsent",
  67802. protocol: 'tests',
  67803. fn: function (){
  67804. var self=this;
  67805. var testObject;
  67806. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67807. return $core.withContext(function($ctx1) {
  67808. //>>excludeEnd("ctx");
  67809. var $2,$1,$4,$3,$6,$5;
  67810. testObject=self._jsObject();
  67811. $1=$recv(testObject)._at_ifPresent_ifAbsent_("abc",(function(x){
  67812. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67813. return $core.withContext(function($ctx2) {
  67814. //>>excludeEnd("ctx");
  67815. $2=$recv(x)._asString();
  67816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67817. $ctx2.sendIdx["asString"]=1;
  67818. //>>excludeEnd("ctx");
  67819. return "hello ".__comma($2);
  67820. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67821. $ctx2.sendIdx[","]=1;
  67822. //>>excludeEnd("ctx");
  67823. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67824. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  67825. //>>excludeEnd("ctx");
  67826. }),(function(){
  67827. return "not present";
  67828. }));
  67829. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67830. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=1;
  67831. //>>excludeEnd("ctx");
  67832. self._assert_equals_($1,"not present");
  67833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67834. $ctx1.sendIdx["assert:equals:"]=1;
  67835. //>>excludeEnd("ctx");
  67836. $3=$recv(testObject)._at_ifPresent_ifAbsent_("e",(function(x){
  67837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67838. return $core.withContext(function($ctx2) {
  67839. //>>excludeEnd("ctx");
  67840. $4=$recv(x)._asString();
  67841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67842. $ctx2.sendIdx["asString"]=2;
  67843. //>>excludeEnd("ctx");
  67844. return "hello ".__comma($4);
  67845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67846. $ctx2.sendIdx[","]=2;
  67847. //>>excludeEnd("ctx");
  67848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67849. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,3)});
  67850. //>>excludeEnd("ctx");
  67851. }),(function(){
  67852. return "not present";
  67853. }));
  67854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67855. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=2;
  67856. //>>excludeEnd("ctx");
  67857. self._assert_equals_($3,"hello nil");
  67858. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67859. $ctx1.sendIdx["assert:equals:"]=2;
  67860. //>>excludeEnd("ctx");
  67861. $5=$recv(testObject)._at_ifPresent_ifAbsent_("a",(function(x){
  67862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67863. return $core.withContext(function($ctx2) {
  67864. //>>excludeEnd("ctx");
  67865. $6=$recv(x)._asString();
  67866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67867. $ctx2.sendIdx["asString"]=3;
  67868. //>>excludeEnd("ctx");
  67869. return "hello ".__comma($6);
  67870. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67871. $ctx2.sendIdx[","]=3;
  67872. //>>excludeEnd("ctx");
  67873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67874. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,5)});
  67875. //>>excludeEnd("ctx");
  67876. }),(function(){
  67877. return "not present";
  67878. }));
  67879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67880. $ctx1.sendIdx["at:ifPresent:ifAbsent:"]=3;
  67881. //>>excludeEnd("ctx");
  67882. self._assert_equals_($5,"hello 1");
  67883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67884. $ctx1.sendIdx["assert:equals:"]=3;
  67885. //>>excludeEnd("ctx");
  67886. self._assert_equals_($recv(testObject)._at_ifPresent_ifAbsent_("f",(function(x){
  67887. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67888. return $core.withContext(function($ctx2) {
  67889. //>>excludeEnd("ctx");
  67890. return "hello ".__comma($recv(x)._asString());
  67891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67892. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,7)});
  67893. //>>excludeEnd("ctx");
  67894. }),(function(){
  67895. return "not present";
  67896. })),"hello nil");
  67897. return self;
  67898. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67899. }, function($ctx1) {$ctx1.fill(self,"testAtIfPresentIfAbsent",{testObject:testObject},$globals.JSObjectProxyTest)});
  67900. //>>excludeEnd("ctx");
  67901. },
  67902. //>>excludeStart("ide", pragmas.excludeIdeData);
  67903. args: [],
  67904. source: "testAtIfPresentIfAbsent\x0a\x09| testObject |\x0a\x09testObject := self jsObject.\x0a\x09self assert: (testObject at: 'abc' ifPresent: [ :x|'hello ',x asString ] ifAbsent: [ 'not present' ]) equals: 'not present'.\x0a\x09self assert: (testObject at: 'e' ifPresent: [ :x|'hello ',x asString ] ifAbsent: [ 'not present' ]) equals: 'hello nil'.\x0a\x09self assert: (testObject at: 'a' ifPresent: [ :x|'hello ',x asString ] ifAbsent: [ 'not present' ]) equals: 'hello 1'.\x0a\x09self assert: (testObject at: 'f' ifPresent: [ :x|'hello ',x asString ] ifAbsent: [ 'not present' ]) equals: 'hello nil'.",
  67905. referencedClasses: [],
  67906. //>>excludeEnd("ide");
  67907. messageSends: ["jsObject", "assert:equals:", "at:ifPresent:ifAbsent:", ",", "asString"]
  67908. }),
  67909. $globals.JSObjectProxyTest);
  67910. $core.addMethod(
  67911. $core.method({
  67912. selector: "testAtPut",
  67913. protocol: 'tests',
  67914. fn: function (){
  67915. var self=this;
  67916. var testObject;
  67917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67918. return $core.withContext(function($ctx1) {
  67919. //>>excludeEnd("ctx");
  67920. var $2,$1;
  67921. testObject=self._jsObject();
  67922. $2=$recv(testObject)._at_("abc");
  67923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67924. $ctx1.sendIdx["at:"]=1;
  67925. //>>excludeEnd("ctx");
  67926. $1=$recv($2).__tild_eq("xyz");
  67927. self._assert_($1);
  67928. self._assert_equals_($recv(testObject)._at_put_("abc","xyz"),"xyz");
  67929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67930. $ctx1.sendIdx["assert:equals:"]=1;
  67931. //>>excludeEnd("ctx");
  67932. self._assert_equals_($recv(testObject)._at_("abc"),"xyz");
  67933. return self;
  67934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67935. }, function($ctx1) {$ctx1.fill(self,"testAtPut",{testObject:testObject},$globals.JSObjectProxyTest)});
  67936. //>>excludeEnd("ctx");
  67937. },
  67938. //>>excludeStart("ide", pragmas.excludeIdeData);
  67939. args: [],
  67940. source: "testAtPut\x0a\x09| testObject |\x0a\x09testObject := self jsObject.\x0a\x09\x0a\x09self assert: (testObject at: 'abc') ~= 'xyz'.\x0a\x09self assert: (testObject at: 'abc' put: 'xyz') equals: 'xyz'.\x0a\x09self assert: (testObject at: 'abc') equals: 'xyz'",
  67941. referencedClasses: [],
  67942. //>>excludeEnd("ide");
  67943. messageSends: ["jsObject", "assert:", "~=", "at:", "assert:equals:", "at:put:"]
  67944. }),
  67945. $globals.JSObjectProxyTest);
  67946. $core.addMethod(
  67947. $core.method({
  67948. selector: "testComparison",
  67949. protocol: 'tests',
  67950. fn: function (){
  67951. var self=this;
  67952. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  67953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67954. return $core.withContext(function($ctx1) {
  67955. //>>excludeEnd("ctx");
  67956. var $1,$2;
  67957. self._assert_equals_($recv([console,(2)])._indexOf_(console),(1));
  67958. $1=$recv(console).__eq(console);
  67959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67960. $ctx1.sendIdx["="]=1;
  67961. //>>excludeEnd("ctx");
  67962. self._assert_($1);
  67963. $2=$recv(console).__eq($recv($Object())._new());
  67964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67965. $ctx1.sendIdx["="]=2;
  67966. //>>excludeEnd("ctx");
  67967. self._deny_($2);
  67968. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67969. $ctx1.sendIdx["deny:"]=1;
  67970. //>>excludeEnd("ctx");
  67971. self._deny_($recv(console).__eq(self._jsObject()));
  67972. return self;
  67973. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67974. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.JSObjectProxyTest)});
  67975. //>>excludeEnd("ctx");
  67976. },
  67977. //>>excludeStart("ide", pragmas.excludeIdeData);
  67978. args: [],
  67979. source: "testComparison\x0a\x09self assert: ({ console. 2 } indexOf: console) equals: 1.\x0a\x09self assert: console = console.\x0a\x09self deny: console = Object new.\x0a\x09self deny: console = self jsObject",
  67980. referencedClasses: ["Object"],
  67981. //>>excludeEnd("ide");
  67982. messageSends: ["assert:equals:", "indexOf:", "assert:", "=", "deny:", "new", "jsObject"]
  67983. }),
  67984. $globals.JSObjectProxyTest);
  67985. $core.addMethod(
  67986. $core.method({
  67987. selector: "testDNU",
  67988. protocol: 'tests',
  67989. fn: function (){
  67990. var self=this;
  67991. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  67992. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67993. return $core.withContext(function($ctx1) {
  67994. //>>excludeEnd("ctx");
  67995. self._should_raise_((function(){
  67996. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  67997. return $core.withContext(function($ctx2) {
  67998. //>>excludeEnd("ctx");
  67999. return $recv(self._jsObject())._foo();
  68000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68001. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68002. //>>excludeEnd("ctx");
  68003. }),$MessageNotUnderstood());
  68004. return self;
  68005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68006. }, function($ctx1) {$ctx1.fill(self,"testDNU",{},$globals.JSObjectProxyTest)});
  68007. //>>excludeEnd("ctx");
  68008. },
  68009. //>>excludeStart("ide", pragmas.excludeIdeData);
  68010. args: [],
  68011. source: "testDNU\x0a\x09self should: [ self jsObject foo ] raise: MessageNotUnderstood",
  68012. referencedClasses: ["MessageNotUnderstood"],
  68013. //>>excludeEnd("ide");
  68014. messageSends: ["should:raise:", "foo", "jsObject"]
  68015. }),
  68016. $globals.JSObjectProxyTest);
  68017. $core.addMethod(
  68018. $core.method({
  68019. selector: "testDNURegression1057",
  68020. protocol: 'tests',
  68021. fn: function (){
  68022. var self=this;
  68023. var jsObject;
  68024. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68025. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68026. return $core.withContext(function($ctx1) {
  68027. //>>excludeEnd("ctx");
  68028. var $1;
  68029. jsObject=[];
  68030. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  68031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68032. $ctx1.sendIdx["basicAt:put:"]=1;
  68033. //>>excludeEnd("ctx");
  68034. $recv(jsObject)._basicAt_put_("foo",(3));
  68035. self._shouldnt_raise_((function(){
  68036. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68037. return $core.withContext(function($ctx2) {
  68038. //>>excludeEnd("ctx");
  68039. return $recv(jsObject)._foo();
  68040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68041. $ctx2.sendIdx["foo"]=1;
  68042. //>>excludeEnd("ctx");
  68043. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68044. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68045. //>>excludeEnd("ctx");
  68046. }),$Error());
  68047. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68048. $ctx1.sendIdx["shouldnt:raise:"]=1;
  68049. //>>excludeEnd("ctx");
  68050. $1=$recv(jsObject)._foo();
  68051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68052. $ctx1.sendIdx["foo"]=2;
  68053. //>>excludeEnd("ctx");
  68054. self._assert_equals_($1,(3));
  68055. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68056. $ctx1.sendIdx["assert:equals:"]=1;
  68057. //>>excludeEnd("ctx");
  68058. self._shouldnt_raise_((function(){
  68059. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68060. return $core.withContext(function($ctx2) {
  68061. //>>excludeEnd("ctx");
  68062. return $recv(jsObject)._foo_((4));
  68063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68064. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  68065. //>>excludeEnd("ctx");
  68066. }),$Error());
  68067. self._assert_equals_($recv(jsObject)._foo(),(4));
  68068. return self;
  68069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68070. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1057",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  68071. //>>excludeEnd("ctx");
  68072. },
  68073. //>>excludeStart("ide", pragmas.excludeIdeData);
  68074. args: [],
  68075. source: "testDNURegression1057\x0a\x09| jsObject |\x0a\x09jsObject := #().\x0a\x09jsObject basicAt: 'allowJavaScriptCalls' put: true.\x0a\x09jsObject basicAt: 'foo' put: 3.\x0a\x09self shouldnt: [ jsObject foo ] raise: Error.\x0a\x09self assert: jsObject foo equals: 3.\x0a\x09self shouldnt: [ jsObject foo: 4 ] raise: Error.\x0a\x09self assert: jsObject foo equals: 4",
  68076. referencedClasses: ["Error"],
  68077. //>>excludeEnd("ide");
  68078. messageSends: ["basicAt:put:", "shouldnt:raise:", "foo", "assert:equals:", "foo:"]
  68079. }),
  68080. $globals.JSObjectProxyTest);
  68081. $core.addMethod(
  68082. $core.method({
  68083. selector: "testDNURegression1059",
  68084. protocol: 'tests',
  68085. fn: function (){
  68086. var self=this;
  68087. var jsObject;
  68088. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68090. return $core.withContext(function($ctx1) {
  68091. //>>excludeEnd("ctx");
  68092. jsObject=[];
  68093. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  68094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68095. $ctx1.sendIdx["basicAt:put:"]=1;
  68096. //>>excludeEnd("ctx");
  68097. $recv(jsObject)._basicAt_put_("x",(3));
  68098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68099. $ctx1.sendIdx["basicAt:put:"]=2;
  68100. //>>excludeEnd("ctx");
  68101. $recv(jsObject)._basicAt_put_("x:",(function(){
  68102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68103. return $core.withContext(function($ctx2) {
  68104. //>>excludeEnd("ctx");
  68105. return self._error();
  68106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68107. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68108. //>>excludeEnd("ctx");
  68109. }));
  68110. self._shouldnt_raise_((function(){
  68111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68112. return $core.withContext(function($ctx2) {
  68113. //>>excludeEnd("ctx");
  68114. return $recv(jsObject)._x_((4));
  68115. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68116. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  68117. //>>excludeEnd("ctx");
  68118. }),$Error());
  68119. self._assert_equals_($recv(jsObject)._x(),(4));
  68120. return self;
  68121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68122. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1059",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  68123. //>>excludeEnd("ctx");
  68124. },
  68125. //>>excludeStart("ide", pragmas.excludeIdeData);
  68126. args: [],
  68127. source: "testDNURegression1059\x0a\x09| jsObject |\x0a\x09jsObject := #().\x0a\x09jsObject basicAt: 'allowJavaScriptCalls' put: true.\x0a\x09jsObject basicAt: 'x' put: 3.\x0a\x09jsObject basicAt: 'x:' put: [ self error ].\x0a\x09self shouldnt: [ jsObject x: 4 ] raise: Error.\x0a\x09self assert: jsObject x equals: 4",
  68128. referencedClasses: ["Error"],
  68129. //>>excludeEnd("ide");
  68130. messageSends: ["basicAt:put:", "error", "shouldnt:raise:", "x:", "assert:equals:", "x"]
  68131. }),
  68132. $globals.JSObjectProxyTest);
  68133. $core.addMethod(
  68134. $core.method({
  68135. selector: "testDNURegression1062",
  68136. protocol: 'tests',
  68137. fn: function (){
  68138. var self=this;
  68139. var jsObject,stored;
  68140. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68142. return $core.withContext(function($ctx1) {
  68143. //>>excludeEnd("ctx");
  68144. jsObject=[];
  68145. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  68146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68147. $ctx1.sendIdx["basicAt:put:"]=1;
  68148. //>>excludeEnd("ctx");
  68149. $recv(jsObject)._basicAt_put_("x",(function(v){
  68150. stored=v;
  68151. return stored;
  68152. }));
  68153. self._shouldnt_raise_((function(){
  68154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68155. return $core.withContext(function($ctx2) {
  68156. //>>excludeEnd("ctx");
  68157. return $recv(jsObject)._x_((4));
  68158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68159. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  68160. //>>excludeEnd("ctx");
  68161. }),$Error());
  68162. self._assert_equals_(stored,(4));
  68163. return self;
  68164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68165. }, function($ctx1) {$ctx1.fill(self,"testDNURegression1062",{jsObject:jsObject,stored:stored},$globals.JSObjectProxyTest)});
  68166. //>>excludeEnd("ctx");
  68167. },
  68168. //>>excludeStart("ide", pragmas.excludeIdeData);
  68169. args: [],
  68170. source: "testDNURegression1062\x0a\x09| jsObject stored |\x0a\x09jsObject := #().\x0a\x09jsObject basicAt: 'allowJavaScriptCalls' put: true.\x0a\x09jsObject basicAt: 'x' put: [ :v | stored := v ].\x0a\x09self shouldnt: [ jsObject x: 4 ] raise: Error.\x0a\x09self assert: stored equals: 4",
  68171. referencedClasses: ["Error"],
  68172. //>>excludeEnd("ide");
  68173. messageSends: ["basicAt:put:", "shouldnt:raise:", "x:", "assert:equals:"]
  68174. }),
  68175. $globals.JSObjectProxyTest);
  68176. $core.addMethod(
  68177. $core.method({
  68178. selector: "testDNUWithAllowJavaScriptCalls",
  68179. protocol: 'tests',
  68180. fn: function (){
  68181. var self=this;
  68182. var jsObject;
  68183. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  68184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68185. return $core.withContext(function($ctx1) {
  68186. //>>excludeEnd("ctx");
  68187. jsObject=[];
  68188. $recv(jsObject)._basicAt_put_("allowJavaScriptCalls",true);
  68189. self._should_raise_((function(){
  68190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68191. return $core.withContext(function($ctx2) {
  68192. //>>excludeEnd("ctx");
  68193. return $recv(jsObject)._foo();
  68194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68195. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68196. //>>excludeEnd("ctx");
  68197. }),$MessageNotUnderstood());
  68198. return self;
  68199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68200. }, function($ctx1) {$ctx1.fill(self,"testDNUWithAllowJavaScriptCalls",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  68201. //>>excludeEnd("ctx");
  68202. },
  68203. //>>excludeStart("ide", pragmas.excludeIdeData);
  68204. args: [],
  68205. source: "testDNUWithAllowJavaScriptCalls\x0a\x09| jsObject |\x0a\x09jsObject := #().\x0a\x09jsObject basicAt: 'allowJavaScriptCalls' put: true.\x0a\x09self should: [ jsObject foo ] raise: MessageNotUnderstood",
  68206. referencedClasses: ["MessageNotUnderstood"],
  68207. //>>excludeEnd("ide");
  68208. messageSends: ["basicAt:put:", "should:raise:", "foo"]
  68209. }),
  68210. $globals.JSObjectProxyTest);
  68211. $core.addMethod(
  68212. $core.method({
  68213. selector: "testMessageSend",
  68214. protocol: 'tests',
  68215. fn: function (){
  68216. var self=this;
  68217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68218. return $core.withContext(function($ctx1) {
  68219. //>>excludeEnd("ctx");
  68220. var $2,$1,$4,$3;
  68221. $2=self._jsObject();
  68222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68223. $ctx1.sendIdx["jsObject"]=1;
  68224. //>>excludeEnd("ctx");
  68225. $1=$recv($2)._a();
  68226. self._assert_equals_($1,(1));
  68227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68228. $ctx1.sendIdx["assert:equals:"]=1;
  68229. //>>excludeEnd("ctx");
  68230. $4=self._jsObject();
  68231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68232. $ctx1.sendIdx["jsObject"]=2;
  68233. //>>excludeEnd("ctx");
  68234. $3=$recv($4)._b();
  68235. self._assert_equals_($3,(2));
  68236. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68237. $ctx1.sendIdx["assert:equals:"]=2;
  68238. //>>excludeEnd("ctx");
  68239. self._assert_equals_($recv(self._jsObject())._c_((3)),(3));
  68240. return self;
  68241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68242. }, function($ctx1) {$ctx1.fill(self,"testMessageSend",{},$globals.JSObjectProxyTest)});
  68243. //>>excludeEnd("ctx");
  68244. },
  68245. //>>excludeStart("ide", pragmas.excludeIdeData);
  68246. args: [],
  68247. source: "testMessageSend\x0a\x0a\x09self assert: self jsObject a equals: 1.\x0a\x09self assert: self jsObject b equals: 2.\x0a\x09self assert: (self jsObject c: 3) equals: 3",
  68248. referencedClasses: [],
  68249. //>>excludeEnd("ide");
  68250. messageSends: ["assert:equals:", "a", "jsObject", "b", "c:"]
  68251. }),
  68252. $globals.JSObjectProxyTest);
  68253. $core.addMethod(
  68254. $core.method({
  68255. selector: "testMethodWithArguments",
  68256. protocol: 'tests',
  68257. fn: function (){
  68258. var self=this;
  68259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68260. return $core.withContext(function($ctx1) {
  68261. //>>excludeEnd("ctx");
  68262. self._assert_equals_($recv(self._jsObject())._c_((1)),(1));
  68263. return self;
  68264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68265. }, function($ctx1) {$ctx1.fill(self,"testMethodWithArguments",{},$globals.JSObjectProxyTest)});
  68266. //>>excludeEnd("ctx");
  68267. },
  68268. //>>excludeStart("ide", pragmas.excludeIdeData);
  68269. args: [],
  68270. source: "testMethodWithArguments\x0a\x09self assert: (self jsObject c: 1) equals: 1",
  68271. referencedClasses: [],
  68272. //>>excludeEnd("ide");
  68273. messageSends: ["assert:equals:", "c:", "jsObject"]
  68274. }),
  68275. $globals.JSObjectProxyTest);
  68276. $core.addMethod(
  68277. $core.method({
  68278. selector: "testPrinting",
  68279. protocol: 'tests',
  68280. fn: function (){
  68281. var self=this;
  68282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68283. return $core.withContext(function($ctx1) {
  68284. //>>excludeEnd("ctx");
  68285. self._assert_equals_($recv(self._jsObject())._printString(),"[object Object]");
  68286. return self;
  68287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68288. }, function($ctx1) {$ctx1.fill(self,"testPrinting",{},$globals.JSObjectProxyTest)});
  68289. //>>excludeEnd("ctx");
  68290. },
  68291. //>>excludeStart("ide", pragmas.excludeIdeData);
  68292. args: [],
  68293. source: "testPrinting\x0a\x09self assert: self jsObject printString equals: '[object Object]'",
  68294. referencedClasses: [],
  68295. //>>excludeEnd("ide");
  68296. messageSends: ["assert:equals:", "printString", "jsObject"]
  68297. }),
  68298. $globals.JSObjectProxyTest);
  68299. $core.addMethod(
  68300. $core.method({
  68301. selector: "testPropertyThatReturnsEmptyString",
  68302. protocol: 'tests',
  68303. fn: function (){
  68304. var self=this;
  68305. var object;
  68306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68307. return $core.withContext(function($ctx1) {
  68308. //>>excludeEnd("ctx");
  68309. var $1;
  68310. object=self._jsObject();
  68311. $1=$recv(object)._d();
  68312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68313. $ctx1.sendIdx["d"]=1;
  68314. //>>excludeEnd("ctx");
  68315. self._assert_equals_($1,"");
  68316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68317. $ctx1.sendIdx["assert:equals:"]=1;
  68318. //>>excludeEnd("ctx");
  68319. $recv(object)._d_("hello");
  68320. self._assert_equals_($recv(object)._d(),"hello");
  68321. return self;
  68322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68323. }, function($ctx1) {$ctx1.fill(self,"testPropertyThatReturnsEmptyString",{object:object},$globals.JSObjectProxyTest)});
  68324. //>>excludeEnd("ctx");
  68325. },
  68326. //>>excludeStart("ide", pragmas.excludeIdeData);
  68327. args: [],
  68328. source: "testPropertyThatReturnsEmptyString\x0a\x09| object |\x0a\x0a\x09object := self jsObject.\x0a\x09self assert: object d equals: ''.\x0a\x0a\x09object d: 'hello'.\x0a\x09self assert: object d equals: 'hello'",
  68329. referencedClasses: [],
  68330. //>>excludeEnd("ide");
  68331. messageSends: ["jsObject", "assert:equals:", "d", "d:"]
  68332. }),
  68333. $globals.JSObjectProxyTest);
  68334. $core.addMethod(
  68335. $core.method({
  68336. selector: "testPropertyThatReturnsUndefined",
  68337. protocol: 'tests',
  68338. fn: function (){
  68339. var self=this;
  68340. var object;
  68341. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  68342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68343. return $core.withContext(function($ctx1) {
  68344. //>>excludeEnd("ctx");
  68345. object=self._jsObject();
  68346. self._shouldnt_raise_((function(){
  68347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68348. return $core.withContext(function($ctx2) {
  68349. //>>excludeEnd("ctx");
  68350. return $recv(object)._e();
  68351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68352. $ctx2.sendIdx["e"]=1;
  68353. //>>excludeEnd("ctx");
  68354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68355. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68356. //>>excludeEnd("ctx");
  68357. }),$MessageNotUnderstood());
  68358. self._assert_($recv($recv(object)._e())._isNil());
  68359. return self;
  68360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68361. }, function($ctx1) {$ctx1.fill(self,"testPropertyThatReturnsUndefined",{object:object},$globals.JSObjectProxyTest)});
  68362. //>>excludeEnd("ctx");
  68363. },
  68364. //>>excludeStart("ide", pragmas.excludeIdeData);
  68365. args: [],
  68366. source: "testPropertyThatReturnsUndefined\x0a\x09| object |\x0a\x0a\x09object := self jsObject.\x0a\x09self shouldnt: [ object e ] raise: MessageNotUnderstood.\x0a\x09self assert: object e isNil",
  68367. referencedClasses: ["MessageNotUnderstood"],
  68368. //>>excludeEnd("ide");
  68369. messageSends: ["jsObject", "shouldnt:raise:", "e", "assert:", "isNil"]
  68370. }),
  68371. $globals.JSObjectProxyTest);
  68372. $core.addMethod(
  68373. $core.method({
  68374. selector: "testSetPropertyWithFalsyValue",
  68375. protocol: 'tests',
  68376. fn: function (){
  68377. var self=this;
  68378. var jsObject;
  68379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68380. return $core.withContext(function($ctx1) {
  68381. //>>excludeEnd("ctx");
  68382. var $1,$2,$3,$4,$5;
  68383. jsObject=self._jsObject();
  68384. $1=$recv(jsObject)._a();
  68385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68386. $ctx1.sendIdx["a"]=1;
  68387. //>>excludeEnd("ctx");
  68388. self._assert_equals_($1,(1));
  68389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68390. $ctx1.sendIdx["assert:equals:"]=1;
  68391. //>>excludeEnd("ctx");
  68392. $recv(jsObject)._a_(self._jsNull());
  68393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68394. $ctx1.sendIdx["a:"]=1;
  68395. //>>excludeEnd("ctx");
  68396. $2=$recv(jsObject)._a();
  68397. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68398. $ctx1.sendIdx["a"]=2;
  68399. //>>excludeEnd("ctx");
  68400. self._assert_equals_($2,nil);
  68401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68402. $ctx1.sendIdx["assert:equals:"]=2;
  68403. //>>excludeEnd("ctx");
  68404. $recv(jsObject)._a_((0));
  68405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68406. $ctx1.sendIdx["a:"]=2;
  68407. //>>excludeEnd("ctx");
  68408. $3=$recv(jsObject)._a();
  68409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68410. $ctx1.sendIdx["a"]=3;
  68411. //>>excludeEnd("ctx");
  68412. self._assert_equals_($3,(0));
  68413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68414. $ctx1.sendIdx["assert:equals:"]=3;
  68415. //>>excludeEnd("ctx");
  68416. $recv(jsObject)._a_(self._jsUndefined());
  68417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68418. $ctx1.sendIdx["a:"]=3;
  68419. //>>excludeEnd("ctx");
  68420. $4=$recv(jsObject)._a();
  68421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68422. $ctx1.sendIdx["a"]=4;
  68423. //>>excludeEnd("ctx");
  68424. self._assert_equals_($4,nil);
  68425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68426. $ctx1.sendIdx["assert:equals:"]=4;
  68427. //>>excludeEnd("ctx");
  68428. $recv(jsObject)._a_("");
  68429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68430. $ctx1.sendIdx["a:"]=4;
  68431. //>>excludeEnd("ctx");
  68432. $5=$recv(jsObject)._a();
  68433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68434. $ctx1.sendIdx["a"]=5;
  68435. //>>excludeEnd("ctx");
  68436. self._assert_equals_($5,"");
  68437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68438. $ctx1.sendIdx["assert:equals:"]=5;
  68439. //>>excludeEnd("ctx");
  68440. $recv(jsObject)._a_(false);
  68441. self._assert_equals_($recv(jsObject)._a(),false);
  68442. return self;
  68443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68444. }, function($ctx1) {$ctx1.fill(self,"testSetPropertyWithFalsyValue",{jsObject:jsObject},$globals.JSObjectProxyTest)});
  68445. //>>excludeEnd("ctx");
  68446. },
  68447. //>>excludeStart("ide", pragmas.excludeIdeData);
  68448. args: [],
  68449. source: "testSetPropertyWithFalsyValue\x0a\x09| jsObject |\x0a\x09jsObject := self jsObject.\x0a\x09self assert: (jsObject a) equals: 1.\x0a\x0a\x09jsObject a: self jsNull.\x0a\x09self assert: (jsObject a) equals: nil.\x0a\x09jsObject a: 0.\x0a\x09self assert: (jsObject a) equals: 0.\x0a\x09jsObject a: self jsUndefined.\x0a\x09self assert: (jsObject a) equals: nil.\x0a\x09jsObject a: ''.\x0a\x09self assert: (jsObject a) equals: ''.\x0a\x09jsObject a: false.\x0a\x09self assert: (jsObject a) equals: false",
  68450. referencedClasses: [],
  68451. //>>excludeEnd("ide");
  68452. messageSends: ["jsObject", "assert:equals:", "a", "a:", "jsNull", "jsUndefined"]
  68453. }),
  68454. $globals.JSObjectProxyTest);
  68455. $core.addMethod(
  68456. $core.method({
  68457. selector: "testValue",
  68458. protocol: 'tests',
  68459. fn: function (){
  68460. var self=this;
  68461. var testObject;
  68462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68463. return $core.withContext(function($ctx1) {
  68464. //>>excludeEnd("ctx");
  68465. testObject=self._jsObject();
  68466. $recv(testObject)._at_put_("value","aValue");
  68467. self._assert_equals_($recv(testObject)._value(),"aValue");
  68468. return self;
  68469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68470. }, function($ctx1) {$ctx1.fill(self,"testValue",{testObject:testObject},$globals.JSObjectProxyTest)});
  68471. //>>excludeEnd("ctx");
  68472. },
  68473. //>>excludeStart("ide", pragmas.excludeIdeData);
  68474. args: [],
  68475. source: "testValue\x0a\x09| testObject |\x0a\x09testObject := self jsObject.\x0a\x09testObject at: 'value' put: 'aValue'.\x0a\x09self assert: testObject value equals: 'aValue'",
  68476. referencedClasses: [],
  68477. //>>excludeEnd("ide");
  68478. messageSends: ["jsObject", "at:put:", "assert:equals:", "value"]
  68479. }),
  68480. $globals.JSObjectProxyTest);
  68481. $core.addMethod(
  68482. $core.method({
  68483. selector: "testYourself",
  68484. protocol: 'tests',
  68485. fn: function (){
  68486. var self=this;
  68487. var object;
  68488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68489. return $core.withContext(function($ctx1) {
  68490. //>>excludeEnd("ctx");
  68491. var $1,$2;
  68492. $1=self._jsObject();
  68493. $recv($1)._d_("test");
  68494. $2=$recv($1)._yourself();
  68495. object=$2;
  68496. self._assert_equals_($recv(object)._d(),"test");
  68497. return self;
  68498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68499. }, function($ctx1) {$ctx1.fill(self,"testYourself",{object:object},$globals.JSObjectProxyTest)});
  68500. //>>excludeEnd("ctx");
  68501. },
  68502. //>>excludeStart("ide", pragmas.excludeIdeData);
  68503. args: [],
  68504. source: "testYourself\x0a\x09| object |\x0a\x09object := self jsObject\x0a\x09\x09d: 'test';\x0a\x09\x09yourself.\x0a\x0a\x09self assert: object d equals: 'test'",
  68505. referencedClasses: [],
  68506. //>>excludeEnd("ide");
  68507. messageSends: ["d:", "jsObject", "yourself", "assert:equals:", "d"]
  68508. }),
  68509. $globals.JSObjectProxyTest);
  68510. $core.addClass('JavaScriptExceptionTest', $globals.TestCase, [], 'Kernel-Tests');
  68511. $core.addMethod(
  68512. $core.method({
  68513. selector: "testCatchingException",
  68514. protocol: 'tests',
  68515. fn: function (){
  68516. var self=this;
  68517. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  68518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68519. return $core.withContext(function($ctx1) {
  68520. //>>excludeEnd("ctx");
  68521. $recv((function(){
  68522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68523. return $core.withContext(function($ctx2) {
  68524. //>>excludeEnd("ctx");
  68525. return self._throwException();
  68526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68527. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68528. //>>excludeEnd("ctx");
  68529. }))._on_do_($Error(),(function(error){
  68530. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68531. return $core.withContext(function($ctx2) {
  68532. //>>excludeEnd("ctx");
  68533. return self._assert_($recv($recv(error)._exception()).__eq("test"));
  68534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68535. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  68536. //>>excludeEnd("ctx");
  68537. }));
  68538. return self;
  68539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68540. }, function($ctx1) {$ctx1.fill(self,"testCatchingException",{},$globals.JavaScriptExceptionTest)});
  68541. //>>excludeEnd("ctx");
  68542. },
  68543. //>>excludeStart("ide", pragmas.excludeIdeData);
  68544. args: [],
  68545. source: "testCatchingException\x0a\x09[ self throwException ]\x0a\x09\x09on: Error\x0a\x09\x09do: [ :error |\x0a\x09\x09\x09self assert: error exception = 'test' ]",
  68546. referencedClasses: ["Error"],
  68547. //>>excludeEnd("ide");
  68548. messageSends: ["on:do:", "throwException", "assert:", "=", "exception"]
  68549. }),
  68550. $globals.JavaScriptExceptionTest);
  68551. $core.addMethod(
  68552. $core.method({
  68553. selector: "testRaisingException",
  68554. protocol: 'tests',
  68555. fn: function (){
  68556. var self=this;
  68557. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  68558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68559. return $core.withContext(function($ctx1) {
  68560. //>>excludeEnd("ctx");
  68561. self._should_raise_((function(){
  68562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68563. return $core.withContext(function($ctx2) {
  68564. //>>excludeEnd("ctx");
  68565. return self._throwException();
  68566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68567. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68568. //>>excludeEnd("ctx");
  68569. }),$JavaScriptException());
  68570. return self;
  68571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68572. }, function($ctx1) {$ctx1.fill(self,"testRaisingException",{},$globals.JavaScriptExceptionTest)});
  68573. //>>excludeEnd("ctx");
  68574. },
  68575. //>>excludeStart("ide", pragmas.excludeIdeData);
  68576. args: [],
  68577. source: "testRaisingException\x0a\x09self should: [ self throwException ] raise: JavaScriptException",
  68578. referencedClasses: ["JavaScriptException"],
  68579. //>>excludeEnd("ide");
  68580. messageSends: ["should:raise:", "throwException"]
  68581. }),
  68582. $globals.JavaScriptExceptionTest);
  68583. $core.addMethod(
  68584. $core.method({
  68585. selector: "throwException",
  68586. protocol: 'helpers',
  68587. fn: function (){
  68588. var self=this;
  68589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68590. return $core.withContext(function($ctx1) {
  68591. //>>excludeEnd("ctx");
  68592. throw 'test';
  68593. return self;
  68594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68595. }, function($ctx1) {$ctx1.fill(self,"throwException",{},$globals.JavaScriptExceptionTest)});
  68596. //>>excludeEnd("ctx");
  68597. },
  68598. //>>excludeStart("ide", pragmas.excludeIdeData);
  68599. args: [],
  68600. source: "throwException\x0a\x09<throw 'test'>",
  68601. referencedClasses: [],
  68602. //>>excludeEnd("ide");
  68603. messageSends: []
  68604. }),
  68605. $globals.JavaScriptExceptionTest);
  68606. $core.addClass('MessageSendTest', $globals.TestCase, [], 'Kernel-Tests');
  68607. $core.addMethod(
  68608. $core.method({
  68609. selector: "testValue",
  68610. protocol: 'tests',
  68611. fn: function (){
  68612. var self=this;
  68613. var messageSend;
  68614. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  68615. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  68616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68617. return $core.withContext(function($ctx1) {
  68618. //>>excludeEnd("ctx");
  68619. var $1,$2;
  68620. $1=$recv($MessageSend())._new();
  68621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68622. $ctx1.sendIdx["new"]=1;
  68623. //>>excludeEnd("ctx");
  68624. $recv($1)._receiver_($recv($Object())._new());
  68625. $recv($1)._selector_("asString");
  68626. $2=$recv($1)._yourself();
  68627. messageSend=$2;
  68628. self._assert_equals_($recv(messageSend)._value(),"an Object");
  68629. return self;
  68630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68631. }, function($ctx1) {$ctx1.fill(self,"testValue",{messageSend:messageSend},$globals.MessageSendTest)});
  68632. //>>excludeEnd("ctx");
  68633. },
  68634. //>>excludeStart("ide", pragmas.excludeIdeData);
  68635. args: [],
  68636. source: "testValue\x0a\x09| messageSend |\x0a\x09\x0a\x09messageSend := MessageSend new\x0a\x09\x09receiver: Object new;\x0a\x09\x09selector: #asString;\x0a\x09\x09yourself.\x0a\x09\x09\x0a\x09self assert: messageSend value equals: 'an Object'",
  68637. referencedClasses: ["MessageSend", "Object"],
  68638. //>>excludeEnd("ide");
  68639. messageSends: ["receiver:", "new", "selector:", "yourself", "assert:equals:", "value"]
  68640. }),
  68641. $globals.MessageSendTest);
  68642. $core.addMethod(
  68643. $core.method({
  68644. selector: "testValueWithArguments",
  68645. protocol: 'tests',
  68646. fn: function (){
  68647. var self=this;
  68648. var messageSend;
  68649. function $MessageSend(){return $globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  68650. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68651. return $core.withContext(function($ctx1) {
  68652. //>>excludeEnd("ctx");
  68653. var $1,$2;
  68654. $1=$recv($MessageSend())._new();
  68655. $recv($1)._receiver_((2));
  68656. $recv($1)._selector_("+");
  68657. $2=$recv($1)._yourself();
  68658. messageSend=$2;
  68659. self._assert_equals_($recv(messageSend)._value_((3)),(5));
  68660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68661. $ctx1.sendIdx["assert:equals:"]=1;
  68662. //>>excludeEnd("ctx");
  68663. self._assert_equals_($recv(messageSend)._valueWithPossibleArguments_([(4)]),(6));
  68664. return self;
  68665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68666. }, function($ctx1) {$ctx1.fill(self,"testValueWithArguments",{messageSend:messageSend},$globals.MessageSendTest)});
  68667. //>>excludeEnd("ctx");
  68668. },
  68669. //>>excludeStart("ide", pragmas.excludeIdeData);
  68670. args: [],
  68671. source: "testValueWithArguments\x0a\x09| messageSend |\x0a\x09\x0a\x09messageSend := MessageSend new\x0a\x09\x09receiver: 2;\x0a\x09\x09selector: '+';\x0a\x09\x09yourself.\x0a\x09\x09\x0a\x09self assert: (messageSend value: 3) equals: 5.\x0a\x09\x0a\x09self assert: (messageSend valueWithPossibleArguments: #(4)) equals: 6",
  68672. referencedClasses: ["MessageSend"],
  68673. //>>excludeEnd("ide");
  68674. messageSends: ["receiver:", "new", "selector:", "yourself", "assert:equals:", "value:", "valueWithPossibleArguments:"]
  68675. }),
  68676. $globals.MessageSendTest);
  68677. $core.addClass('MethodInheritanceTest', $globals.TestCase, ['receiverTop', 'receiverMiddle', 'receiverBottom', 'method', 'performBlock'], 'Kernel-Tests');
  68678. $core.addMethod(
  68679. $core.method({
  68680. selector: "codeGeneratorClass",
  68681. protocol: 'accessing',
  68682. fn: function (){
  68683. var self=this;
  68684. function $CodeGenerator(){return $globals.CodeGenerator||(typeof CodeGenerator=="undefined"?nil:CodeGenerator)}
  68685. return $CodeGenerator();
  68686. },
  68687. //>>excludeStart("ide", pragmas.excludeIdeData);
  68688. args: [],
  68689. source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
  68690. referencedClasses: ["CodeGenerator"],
  68691. //>>excludeEnd("ide");
  68692. messageSends: []
  68693. }),
  68694. $globals.MethodInheritanceTest);
  68695. $core.addMethod(
  68696. $core.method({
  68697. selector: "compiler",
  68698. protocol: 'factory',
  68699. fn: function (){
  68700. var self=this;
  68701. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  68702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68703. return $core.withContext(function($ctx1) {
  68704. //>>excludeEnd("ctx");
  68705. var $2,$3,$1;
  68706. $2=$recv($Compiler())._new();
  68707. $recv($2)._codeGeneratorClass_(self._codeGeneratorClass());
  68708. $3=$recv($2)._yourself();
  68709. $1=$3;
  68710. return $1;
  68711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68712. }, function($ctx1) {$ctx1.fill(self,"compiler",{},$globals.MethodInheritanceTest)});
  68713. //>>excludeEnd("ctx");
  68714. },
  68715. //>>excludeStart("ide", pragmas.excludeIdeData);
  68716. args: [],
  68717. source: "compiler\x0a\x09^ Compiler new\x0a\x09\x09codeGeneratorClass: self codeGeneratorClass;\x0a\x09\x09yourself",
  68718. referencedClasses: ["Compiler"],
  68719. //>>excludeEnd("ide");
  68720. messageSends: ["codeGeneratorClass:", "new", "codeGeneratorClass", "yourself"]
  68721. }),
  68722. $globals.MethodInheritanceTest);
  68723. $core.addMethod(
  68724. $core.method({
  68725. selector: "deinstallBottom",
  68726. protocol: 'testing',
  68727. fn: function (){
  68728. var self=this;
  68729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68730. return $core.withContext(function($ctx1) {
  68731. //>>excludeEnd("ctx");
  68732. $recv(self._targetClassBottom())._removeCompiledMethod_(self["@method"]);
  68733. return self;
  68734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68735. }, function($ctx1) {$ctx1.fill(self,"deinstallBottom",{},$globals.MethodInheritanceTest)});
  68736. //>>excludeEnd("ctx");
  68737. },
  68738. //>>excludeStart("ide", pragmas.excludeIdeData);
  68739. args: [],
  68740. source: "deinstallBottom\x0a\x09self targetClassBottom removeCompiledMethod: method",
  68741. referencedClasses: [],
  68742. //>>excludeEnd("ide");
  68743. messageSends: ["removeCompiledMethod:", "targetClassBottom"]
  68744. }),
  68745. $globals.MethodInheritanceTest);
  68746. $core.addMethod(
  68747. $core.method({
  68748. selector: "deinstallMiddle",
  68749. protocol: 'testing',
  68750. fn: function (){
  68751. var self=this;
  68752. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68753. return $core.withContext(function($ctx1) {
  68754. //>>excludeEnd("ctx");
  68755. $recv(self._targetClassMiddle())._removeCompiledMethod_(self["@method"]);
  68756. return self;
  68757. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68758. }, function($ctx1) {$ctx1.fill(self,"deinstallMiddle",{},$globals.MethodInheritanceTest)});
  68759. //>>excludeEnd("ctx");
  68760. },
  68761. //>>excludeStart("ide", pragmas.excludeIdeData);
  68762. args: [],
  68763. source: "deinstallMiddle\x0a\x09self targetClassMiddle removeCompiledMethod: method",
  68764. referencedClasses: [],
  68765. //>>excludeEnd("ide");
  68766. messageSends: ["removeCompiledMethod:", "targetClassMiddle"]
  68767. }),
  68768. $globals.MethodInheritanceTest);
  68769. $core.addMethod(
  68770. $core.method({
  68771. selector: "deinstallTop",
  68772. protocol: 'testing',
  68773. fn: function (){
  68774. var self=this;
  68775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68776. return $core.withContext(function($ctx1) {
  68777. //>>excludeEnd("ctx");
  68778. $recv(self._targetClassTop())._removeCompiledMethod_(self["@method"]);
  68779. return self;
  68780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68781. }, function($ctx1) {$ctx1.fill(self,"deinstallTop",{},$globals.MethodInheritanceTest)});
  68782. //>>excludeEnd("ctx");
  68783. },
  68784. //>>excludeStart("ide", pragmas.excludeIdeData);
  68785. args: [],
  68786. source: "deinstallTop\x0a\x09self targetClassTop removeCompiledMethod: method",
  68787. referencedClasses: [],
  68788. //>>excludeEnd("ide");
  68789. messageSends: ["removeCompiledMethod:", "targetClassTop"]
  68790. }),
  68791. $globals.MethodInheritanceTest);
  68792. $core.addMethod(
  68793. $core.method({
  68794. selector: "installBottom:",
  68795. protocol: 'testing',
  68796. fn: function (aString){
  68797. var self=this;
  68798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68799. return $core.withContext(function($ctx1) {
  68800. //>>excludeEnd("ctx");
  68801. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassBottom(),"tests");
  68802. return self;
  68803. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68804. }, function($ctx1) {$ctx1.fill(self,"installBottom:",{aString:aString},$globals.MethodInheritanceTest)});
  68805. //>>excludeEnd("ctx");
  68806. },
  68807. //>>excludeStart("ide", pragmas.excludeIdeData);
  68808. args: ["aString"],
  68809. source: "installBottom: aString\x0a\x09method := self compiler install: aString forClass: self targetClassBottom protocol: 'tests'",
  68810. referencedClasses: [],
  68811. //>>excludeEnd("ide");
  68812. messageSends: ["install:forClass:protocol:", "compiler", "targetClassBottom"]
  68813. }),
  68814. $globals.MethodInheritanceTest);
  68815. $core.addMethod(
  68816. $core.method({
  68817. selector: "installMiddle:",
  68818. protocol: 'testing',
  68819. fn: function (aString){
  68820. var self=this;
  68821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68822. return $core.withContext(function($ctx1) {
  68823. //>>excludeEnd("ctx");
  68824. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassMiddle(),"tests");
  68825. return self;
  68826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68827. }, function($ctx1) {$ctx1.fill(self,"installMiddle:",{aString:aString},$globals.MethodInheritanceTest)});
  68828. //>>excludeEnd("ctx");
  68829. },
  68830. //>>excludeStart("ide", pragmas.excludeIdeData);
  68831. args: ["aString"],
  68832. source: "installMiddle: aString\x0a\x09method := self compiler install: aString forClass: self targetClassMiddle protocol: 'tests'",
  68833. referencedClasses: [],
  68834. //>>excludeEnd("ide");
  68835. messageSends: ["install:forClass:protocol:", "compiler", "targetClassMiddle"]
  68836. }),
  68837. $globals.MethodInheritanceTest);
  68838. $core.addMethod(
  68839. $core.method({
  68840. selector: "installTop:",
  68841. protocol: 'testing',
  68842. fn: function (aString){
  68843. var self=this;
  68844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68845. return $core.withContext(function($ctx1) {
  68846. //>>excludeEnd("ctx");
  68847. self["@method"]=$recv(self._compiler())._install_forClass_protocol_(aString,self._targetClassTop(),"tests");
  68848. return self;
  68849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68850. }, function($ctx1) {$ctx1.fill(self,"installTop:",{aString:aString},$globals.MethodInheritanceTest)});
  68851. //>>excludeEnd("ctx");
  68852. },
  68853. //>>excludeStart("ide", pragmas.excludeIdeData);
  68854. args: ["aString"],
  68855. source: "installTop: aString\x0a\x09method := self compiler install: aString forClass: self targetClassTop protocol: 'tests'",
  68856. referencedClasses: [],
  68857. //>>excludeEnd("ide");
  68858. messageSends: ["install:forClass:protocol:", "compiler", "targetClassTop"]
  68859. }),
  68860. $globals.MethodInheritanceTest);
  68861. $core.addMethod(
  68862. $core.method({
  68863. selector: "setUp",
  68864. protocol: 'initialization',
  68865. fn: function (){
  68866. var self=this;
  68867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68868. return $core.withContext(function($ctx1) {
  68869. //>>excludeEnd("ctx");
  68870. self["@receiverTop"]=$recv(self._targetClassTop())._new();
  68871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68872. $ctx1.sendIdx["new"]=1;
  68873. //>>excludeEnd("ctx");
  68874. self["@receiverMiddle"]=$recv(self._targetClassMiddle())._new();
  68875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68876. $ctx1.sendIdx["new"]=2;
  68877. //>>excludeEnd("ctx");
  68878. self["@receiverBottom"]=$recv(self._targetClassBottom())._new();
  68879. self["@method"]=nil;
  68880. self["@performBlock"]=(function(){
  68881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68882. return $core.withContext(function($ctx2) {
  68883. //>>excludeEnd("ctx");
  68884. return self._error_("performBlock not initialized");
  68885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68886. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68887. //>>excludeEnd("ctx");
  68888. });
  68889. return self;
  68890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68891. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.MethodInheritanceTest)});
  68892. //>>excludeEnd("ctx");
  68893. },
  68894. //>>excludeStart("ide", pragmas.excludeIdeData);
  68895. args: [],
  68896. source: "setUp\x0a\x09receiverTop := self targetClassTop new.\x0a\x09receiverMiddle := self targetClassMiddle new.\x0a\x09receiverBottom := self targetClassBottom new.\x0a\x09method := nil.\x0a\x09performBlock := [ self error: 'performBlock not initialized' ]",
  68897. referencedClasses: [],
  68898. //>>excludeEnd("ide");
  68899. messageSends: ["new", "targetClassTop", "targetClassMiddle", "targetClassBottom", "error:"]
  68900. }),
  68901. $globals.MethodInheritanceTest);
  68902. $core.addMethod(
  68903. $core.method({
  68904. selector: "shouldMNU",
  68905. protocol: 'testing',
  68906. fn: function (){
  68907. var self=this;
  68908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68909. return $core.withContext(function($ctx1) {
  68910. //>>excludeEnd("ctx");
  68911. self._shouldMNUTop();
  68912. self._shouldMNUMiddle();
  68913. self._shouldMNUBottom();
  68914. return self;
  68915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68916. }, function($ctx1) {$ctx1.fill(self,"shouldMNU",{},$globals.MethodInheritanceTest)});
  68917. //>>excludeEnd("ctx");
  68918. },
  68919. //>>excludeStart("ide", pragmas.excludeIdeData);
  68920. args: [],
  68921. source: "shouldMNU\x0a\x09self shouldMNUTop.\x0a\x09self shouldMNUMiddle.\x0a\x09self shouldMNUBottom",
  68922. referencedClasses: [],
  68923. //>>excludeEnd("ide");
  68924. messageSends: ["shouldMNUTop", "shouldMNUMiddle", "shouldMNUBottom"]
  68925. }),
  68926. $globals.MethodInheritanceTest);
  68927. $core.addMethod(
  68928. $core.method({
  68929. selector: "shouldMNUBottom",
  68930. protocol: 'testing',
  68931. fn: function (){
  68932. var self=this;
  68933. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  68934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68935. return $core.withContext(function($ctx1) {
  68936. //>>excludeEnd("ctx");
  68937. self._should_raise_((function(){
  68938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68939. return $core.withContext(function($ctx2) {
  68940. //>>excludeEnd("ctx");
  68941. return $recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  68942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68943. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68944. //>>excludeEnd("ctx");
  68945. }),$MessageNotUnderstood());
  68946. return self;
  68947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68948. }, function($ctx1) {$ctx1.fill(self,"shouldMNUBottom",{},$globals.MethodInheritanceTest)});
  68949. //>>excludeEnd("ctx");
  68950. },
  68951. //>>excludeStart("ide", pragmas.excludeIdeData);
  68952. args: [],
  68953. source: "shouldMNUBottom\x0a\x09self should: [ performBlock value: receiverBottom ] raise: MessageNotUnderstood",
  68954. referencedClasses: ["MessageNotUnderstood"],
  68955. //>>excludeEnd("ide");
  68956. messageSends: ["should:raise:", "value:"]
  68957. }),
  68958. $globals.MethodInheritanceTest);
  68959. $core.addMethod(
  68960. $core.method({
  68961. selector: "shouldMNUMiddle",
  68962. protocol: 'testing',
  68963. fn: function (){
  68964. var self=this;
  68965. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  68966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68967. return $core.withContext(function($ctx1) {
  68968. //>>excludeEnd("ctx");
  68969. self._should_raise_((function(){
  68970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68971. return $core.withContext(function($ctx2) {
  68972. //>>excludeEnd("ctx");
  68973. return $recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  68974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68975. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  68976. //>>excludeEnd("ctx");
  68977. }),$MessageNotUnderstood());
  68978. return self;
  68979. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68980. }, function($ctx1) {$ctx1.fill(self,"shouldMNUMiddle",{},$globals.MethodInheritanceTest)});
  68981. //>>excludeEnd("ctx");
  68982. },
  68983. //>>excludeStart("ide", pragmas.excludeIdeData);
  68984. args: [],
  68985. source: "shouldMNUMiddle\x0a\x09self should: [ performBlock value: receiverMiddle ] raise: MessageNotUnderstood",
  68986. referencedClasses: ["MessageNotUnderstood"],
  68987. //>>excludeEnd("ide");
  68988. messageSends: ["should:raise:", "value:"]
  68989. }),
  68990. $globals.MethodInheritanceTest);
  68991. $core.addMethod(
  68992. $core.method({
  68993. selector: "shouldMNUTop",
  68994. protocol: 'testing',
  68995. fn: function (){
  68996. var self=this;
  68997. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  68998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68999. return $core.withContext(function($ctx1) {
  69000. //>>excludeEnd("ctx");
  69001. self._should_raise_((function(){
  69002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69003. return $core.withContext(function($ctx2) {
  69004. //>>excludeEnd("ctx");
  69005. return $recv(self["@performBlock"])._value_(self["@receiverTop"]);
  69006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69007. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69008. //>>excludeEnd("ctx");
  69009. }),$MessageNotUnderstood());
  69010. return self;
  69011. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69012. }, function($ctx1) {$ctx1.fill(self,"shouldMNUTop",{},$globals.MethodInheritanceTest)});
  69013. //>>excludeEnd("ctx");
  69014. },
  69015. //>>excludeStart("ide", pragmas.excludeIdeData);
  69016. args: [],
  69017. source: "shouldMNUTop\x0a\x09self should: [ performBlock value: receiverTop ] raise: MessageNotUnderstood",
  69018. referencedClasses: ["MessageNotUnderstood"],
  69019. //>>excludeEnd("ide");
  69020. messageSends: ["should:raise:", "value:"]
  69021. }),
  69022. $globals.MethodInheritanceTest);
  69023. $core.addMethod(
  69024. $core.method({
  69025. selector: "shouldReturn:",
  69026. protocol: 'testing',
  69027. fn: function (anObject){
  69028. var self=this;
  69029. var result;
  69030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69031. return $core.withContext(function($ctx1) {
  69032. //>>excludeEnd("ctx");
  69033. result=$recv(self["@performBlock"])._value_(self["@receiverTop"]);
  69034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69035. $ctx1.sendIdx["value:"]=1;
  69036. //>>excludeEnd("ctx");
  69037. self._assert_equals_(["top",anObject],["top",result]);
  69038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69039. $ctx1.sendIdx["assert:equals:"]=1;
  69040. //>>excludeEnd("ctx");
  69041. result=$recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  69042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69043. $ctx1.sendIdx["value:"]=2;
  69044. //>>excludeEnd("ctx");
  69045. self._assert_equals_(["middle",anObject],["middle",result]);
  69046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69047. $ctx1.sendIdx["assert:equals:"]=2;
  69048. //>>excludeEnd("ctx");
  69049. result=$recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  69050. self._assert_equals_(["bottom",anObject],["bottom",result]);
  69051. return self;
  69052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69053. }, function($ctx1) {$ctx1.fill(self,"shouldReturn:",{anObject:anObject,result:result},$globals.MethodInheritanceTest)});
  69054. //>>excludeEnd("ctx");
  69055. },
  69056. //>>excludeStart("ide", pragmas.excludeIdeData);
  69057. args: ["anObject"],
  69058. source: "shouldReturn: anObject\x0a\x09| result |\x0a\x0a\x09result := performBlock value: receiverTop.\x0a\x09self assert: { 'top'. anObject } equals: { 'top'. result }.\x0a\x09result := performBlock value: receiverMiddle.\x0a\x09self assert: { 'middle'. anObject } equals: { 'middle'. result }.\x0a\x09result := performBlock value: receiverBottom.\x0a\x09self assert: { 'bottom'. anObject } equals: { 'bottom'. result }",
  69059. referencedClasses: [],
  69060. //>>excludeEnd("ide");
  69061. messageSends: ["value:", "assert:equals:"]
  69062. }),
  69063. $globals.MethodInheritanceTest);
  69064. $core.addMethod(
  69065. $core.method({
  69066. selector: "shouldReturn:and:and:",
  69067. protocol: 'testing',
  69068. fn: function (anObject,anObject2,anObject3){
  69069. var self=this;
  69070. var result;
  69071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69072. return $core.withContext(function($ctx1) {
  69073. //>>excludeEnd("ctx");
  69074. result=$recv(self["@performBlock"])._value_(self["@receiverTop"]);
  69075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69076. $ctx1.sendIdx["value:"]=1;
  69077. //>>excludeEnd("ctx");
  69078. self._assert_equals_(["top",anObject],["top",result]);
  69079. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69080. $ctx1.sendIdx["assert:equals:"]=1;
  69081. //>>excludeEnd("ctx");
  69082. result=$recv(self["@performBlock"])._value_(self["@receiverMiddle"]);
  69083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69084. $ctx1.sendIdx["value:"]=2;
  69085. //>>excludeEnd("ctx");
  69086. self._assert_equals_(["middle",anObject2],["middle",result]);
  69087. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69088. $ctx1.sendIdx["assert:equals:"]=2;
  69089. //>>excludeEnd("ctx");
  69090. result=$recv(self["@performBlock"])._value_(self["@receiverBottom"]);
  69091. self._assert_equals_(["bottom",anObject3],["bottom",result]);
  69092. return self;
  69093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69094. }, function($ctx1) {$ctx1.fill(self,"shouldReturn:and:and:",{anObject:anObject,anObject2:anObject2,anObject3:anObject3,result:result},$globals.MethodInheritanceTest)});
  69095. //>>excludeEnd("ctx");
  69096. },
  69097. //>>excludeStart("ide", pragmas.excludeIdeData);
  69098. args: ["anObject", "anObject2", "anObject3"],
  69099. source: "shouldReturn: anObject and: anObject2 and: anObject3\x0a\x09| result |\x0a\x0a\x09result := performBlock value: receiverTop.\x0a\x09self assert: { 'top'. anObject } equals: { 'top'. result }.\x0a\x09result := performBlock value: receiverMiddle.\x0a\x09self assert: { 'middle'. anObject2 } equals: { 'middle'. result }.\x0a\x09result := performBlock value: receiverBottom.\x0a\x09self assert: { 'bottom'. anObject3 } equals: { 'bottom'. result }",
  69100. referencedClasses: [],
  69101. //>>excludeEnd("ide");
  69102. messageSends: ["value:", "assert:equals:"]
  69103. }),
  69104. $globals.MethodInheritanceTest);
  69105. $core.addMethod(
  69106. $core.method({
  69107. selector: "targetClassBottom",
  69108. protocol: 'accessing',
  69109. fn: function (){
  69110. var self=this;
  69111. function $JavaScriptException(){return $globals.JavaScriptException||(typeof JavaScriptException=="undefined"?nil:JavaScriptException)}
  69112. return $JavaScriptException();
  69113. },
  69114. //>>excludeStart("ide", pragmas.excludeIdeData);
  69115. args: [],
  69116. source: "targetClassBottom\x0a\x09^ JavaScriptException",
  69117. referencedClasses: ["JavaScriptException"],
  69118. //>>excludeEnd("ide");
  69119. messageSends: []
  69120. }),
  69121. $globals.MethodInheritanceTest);
  69122. $core.addMethod(
  69123. $core.method({
  69124. selector: "targetClassMiddle",
  69125. protocol: 'accessing',
  69126. fn: function (){
  69127. var self=this;
  69128. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69129. return $Error();
  69130. },
  69131. //>>excludeStart("ide", pragmas.excludeIdeData);
  69132. args: [],
  69133. source: "targetClassMiddle\x0a\x09^ Error",
  69134. referencedClasses: ["Error"],
  69135. //>>excludeEnd("ide");
  69136. messageSends: []
  69137. }),
  69138. $globals.MethodInheritanceTest);
  69139. $core.addMethod(
  69140. $core.method({
  69141. selector: "targetClassTop",
  69142. protocol: 'accessing',
  69143. fn: function (){
  69144. var self=this;
  69145. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  69146. return $Object();
  69147. },
  69148. //>>excludeStart("ide", pragmas.excludeIdeData);
  69149. args: [],
  69150. source: "targetClassTop\x0a\x09^ Object",
  69151. referencedClasses: ["Object"],
  69152. //>>excludeEnd("ide");
  69153. messageSends: []
  69154. }),
  69155. $globals.MethodInheritanceTest);
  69156. $core.addMethod(
  69157. $core.method({
  69158. selector: "tearDown",
  69159. protocol: 'initialization',
  69160. fn: function (){
  69161. var self=this;
  69162. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  69163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69164. return $core.withContext(function($ctx1) {
  69165. //>>excludeEnd("ctx");
  69166. $recv((function(){
  69167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69168. return $core.withContext(function($ctx2) {
  69169. //>>excludeEnd("ctx");
  69170. return self._deinstallTop();
  69171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69172. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69173. //>>excludeEnd("ctx");
  69174. }))._on_do_($Error(),(function(){
  69175. }));
  69176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69177. $ctx1.sendIdx["on:do:"]=1;
  69178. //>>excludeEnd("ctx");
  69179. $recv((function(){
  69180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69181. return $core.withContext(function($ctx2) {
  69182. //>>excludeEnd("ctx");
  69183. return self._deinstallMiddle();
  69184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69185. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  69186. //>>excludeEnd("ctx");
  69187. }))._on_do_($Error(),(function(){
  69188. }));
  69189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69190. $ctx1.sendIdx["on:do:"]=2;
  69191. //>>excludeEnd("ctx");
  69192. $recv((function(){
  69193. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69194. return $core.withContext(function($ctx2) {
  69195. //>>excludeEnd("ctx");
  69196. return self._deinstallBottom();
  69197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69198. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  69199. //>>excludeEnd("ctx");
  69200. }))._on_do_($Error(),(function(){
  69201. }));
  69202. return self;
  69203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69204. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.MethodInheritanceTest)});
  69205. //>>excludeEnd("ctx");
  69206. },
  69207. //>>excludeStart("ide", pragmas.excludeIdeData);
  69208. args: [],
  69209. source: "tearDown\x0a\x09[ self deinstallTop ] on: Error do: [ ].\x0a\x09[ self deinstallMiddle ] on: Error do: [ ].\x0a\x09[ self deinstallBottom ] on: Error do: [ ]",
  69210. referencedClasses: ["Error"],
  69211. //>>excludeEnd("ide");
  69212. messageSends: ["on:do:", "deinstallTop", "deinstallMiddle", "deinstallBottom"]
  69213. }),
  69214. $globals.MethodInheritanceTest);
  69215. $core.addMethod(
  69216. $core.method({
  69217. selector: "testMNU11",
  69218. protocol: 'tests',
  69219. fn: function (){
  69220. var self=this;
  69221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69222. return $core.withContext(function($ctx1) {
  69223. //>>excludeEnd("ctx");
  69224. self["@performBlock"]=(function(x){
  69225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69226. return $core.withContext(function($ctx2) {
  69227. //>>excludeEnd("ctx");
  69228. return $recv(x)._foo();
  69229. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69230. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  69231. //>>excludeEnd("ctx");
  69232. });
  69233. self._shouldMNU();
  69234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69235. $ctx1.sendIdx["shouldMNU"]=1;
  69236. //>>excludeEnd("ctx");
  69237. self._installTop_("foo ^ false");
  69238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69239. $ctx1.sendIdx["installTop:"]=1;
  69240. //>>excludeEnd("ctx");
  69241. self._installTop_("foo ^ true");
  69242. self._deinstallTop();
  69243. self._shouldMNU();
  69244. return self;
  69245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69246. }, function($ctx1) {$ctx1.fill(self,"testMNU11",{},$globals.MethodInheritanceTest)});
  69247. //>>excludeEnd("ctx");
  69248. },
  69249. //>>excludeStart("ide", pragmas.excludeIdeData);
  69250. args: [],
  69251. source: "testMNU11\x0a\x09performBlock := [ :x | x foo ].\x0a\x09self shouldMNU.\x0a\x09self installTop: 'foo ^ false'.\x0a\x09self installTop: 'foo ^ true'.\x0a\x09self deinstallTop.\x0a\x09self shouldMNU",
  69252. referencedClasses: [],
  69253. //>>excludeEnd("ide");
  69254. messageSends: ["foo", "shouldMNU", "installTop:", "deinstallTop"]
  69255. }),
  69256. $globals.MethodInheritanceTest);
  69257. $core.addMethod(
  69258. $core.method({
  69259. selector: "testMNU22",
  69260. protocol: 'tests',
  69261. fn: function (){
  69262. var self=this;
  69263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69264. return $core.withContext(function($ctx1) {
  69265. //>>excludeEnd("ctx");
  69266. self["@performBlock"]=(function(x){
  69267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69268. return $core.withContext(function($ctx2) {
  69269. //>>excludeEnd("ctx");
  69270. return $recv(x)._foo();
  69271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69272. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  69273. //>>excludeEnd("ctx");
  69274. });
  69275. self._shouldMNU();
  69276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69277. $ctx1.sendIdx["shouldMNU"]=1;
  69278. //>>excludeEnd("ctx");
  69279. self._installMiddle_("foo ^ false");
  69280. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69281. $ctx1.sendIdx["installMiddle:"]=1;
  69282. //>>excludeEnd("ctx");
  69283. self._installMiddle_("foo ^ true");
  69284. self._deinstallMiddle();
  69285. self._shouldMNU();
  69286. return self;
  69287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69288. }, function($ctx1) {$ctx1.fill(self,"testMNU22",{},$globals.MethodInheritanceTest)});
  69289. //>>excludeEnd("ctx");
  69290. },
  69291. //>>excludeStart("ide", pragmas.excludeIdeData);
  69292. args: [],
  69293. source: "testMNU22\x0a\x09performBlock := [ :x | x foo ].\x0a\x09self shouldMNU.\x0a\x09self installMiddle: 'foo ^ false'.\x0a\x09self installMiddle: 'foo ^ true'.\x0a\x09self deinstallMiddle.\x0a\x09self shouldMNU",
  69294. referencedClasses: [],
  69295. //>>excludeEnd("ide");
  69296. messageSends: ["foo", "shouldMNU", "installMiddle:", "deinstallMiddle"]
  69297. }),
  69298. $globals.MethodInheritanceTest);
  69299. $core.addMethod(
  69300. $core.method({
  69301. selector: "testReturns1",
  69302. protocol: 'tests',
  69303. fn: function (){
  69304. var self=this;
  69305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69306. return $core.withContext(function($ctx1) {
  69307. //>>excludeEnd("ctx");
  69308. self["@performBlock"]=(function(x){
  69309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69310. return $core.withContext(function($ctx2) {
  69311. //>>excludeEnd("ctx");
  69312. return $recv(x)._foo();
  69313. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69314. }, function($ctx2) {$ctx2.fillBlock({x:x},$ctx1,1)});
  69315. //>>excludeEnd("ctx");
  69316. });
  69317. self._installTop_("foo ^ false");
  69318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69319. $ctx1.sendIdx["installTop:"]=1;
  69320. //>>excludeEnd("ctx");
  69321. self._shouldReturn_(false);
  69322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69323. $ctx1.sendIdx["shouldReturn:"]=1;
  69324. //>>excludeEnd("ctx");
  69325. self._installTop_("foo ^ true");
  69326. self._shouldReturn_(true);
  69327. return self;
  69328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69329. }, function($ctx1) {$ctx1.fill(self,"testReturns1",{},$globals.MethodInheritanceTest)});
  69330. //>>excludeEnd("ctx");
  69331. },
  69332. //>>excludeStart("ide", pragmas.excludeIdeData);
  69333. args: [],
  69334. source: "testReturns1\x0a\x09performBlock := [ :x | x foo ].\x0a\x09self installTop: 'foo ^ false'.\x0a\x09self shouldReturn: false.\x0a\x09self installTop: 'foo ^ true'.\x0a\x09self shouldReturn: true",
  69335. referencedClasses: [],
  69336. //>>excludeEnd("ide");
  69337. messageSends: ["foo", "installTop:", "shouldReturn:"]
  69338. }),
  69339. $globals.MethodInheritanceTest);
  69340. $core.addClass('NumberTest', $globals.TestCase, [], 'Kernel-Tests');
  69341. $core.addMethod(
  69342. $core.method({
  69343. selector: "testAbs",
  69344. protocol: 'tests',
  69345. fn: function (){
  69346. var self=this;
  69347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69348. return $core.withContext(function($ctx1) {
  69349. //>>excludeEnd("ctx");
  69350. var $1;
  69351. $1=(4)._abs();
  69352. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69353. $ctx1.sendIdx["abs"]=1;
  69354. //>>excludeEnd("ctx");
  69355. self._assert_equals_($1,(4));
  69356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69357. $ctx1.sendIdx["assert:equals:"]=1;
  69358. //>>excludeEnd("ctx");
  69359. self._assert_equals_((-4)._abs(),(4));
  69360. return self;
  69361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69362. }, function($ctx1) {$ctx1.fill(self,"testAbs",{},$globals.NumberTest)});
  69363. //>>excludeEnd("ctx");
  69364. },
  69365. //>>excludeStart("ide", pragmas.excludeIdeData);
  69366. args: [],
  69367. source: "testAbs\x0a\x09self assert: 4 abs equals: 4.\x0a\x09self assert: -4 abs equals: 4",
  69368. referencedClasses: [],
  69369. //>>excludeEnd("ide");
  69370. messageSends: ["assert:equals:", "abs"]
  69371. }),
  69372. $globals.NumberTest);
  69373. $core.addMethod(
  69374. $core.method({
  69375. selector: "testArithmetic",
  69376. protocol: 'tests',
  69377. fn: function (){
  69378. var self=this;
  69379. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69380. return $core.withContext(function($ctx1) {
  69381. //>>excludeEnd("ctx");
  69382. var $1,$2,$3,$5,$4;
  69383. $1=(1.5).__plus((1));
  69384. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69385. $ctx1.sendIdx["+"]=1;
  69386. //>>excludeEnd("ctx");
  69387. self._assert_equals_($1,(2.5));
  69388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69389. $ctx1.sendIdx["assert:equals:"]=1;
  69390. //>>excludeEnd("ctx");
  69391. $2=(2).__minus((1));
  69392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69393. $ctx1.sendIdx["-"]=1;
  69394. //>>excludeEnd("ctx");
  69395. self._assert_equals_($2,(1));
  69396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69397. $ctx1.sendIdx["assert:equals:"]=2;
  69398. //>>excludeEnd("ctx");
  69399. self._assert_equals_((-2).__minus((1)),(-3));
  69400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69401. $ctx1.sendIdx["assert:equals:"]=3;
  69402. //>>excludeEnd("ctx");
  69403. self._assert_equals_((12).__slash((2)),(6));
  69404. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69405. $ctx1.sendIdx["assert:equals:"]=4;
  69406. //>>excludeEnd("ctx");
  69407. $3=(3).__star((4));
  69408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69409. $ctx1.sendIdx["*"]=1;
  69410. //>>excludeEnd("ctx");
  69411. self._assert_equals_($3,(12));
  69412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69413. $ctx1.sendIdx["assert:equals:"]=5;
  69414. //>>excludeEnd("ctx");
  69415. self._assert_equals_((7).__slash_slash((2)),(3));
  69416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69417. $ctx1.sendIdx["assert:equals:"]=6;
  69418. //>>excludeEnd("ctx");
  69419. self._assert_equals_((7).__backslash_backslash((2)),(1));
  69420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69421. $ctx1.sendIdx["assert:equals:"]=7;
  69422. //>>excludeEnd("ctx");
  69423. $5=(1).__plus((2));
  69424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69425. $ctx1.sendIdx["+"]=2;
  69426. //>>excludeEnd("ctx");
  69427. $4=$recv($5).__star((3));
  69428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69429. $ctx1.sendIdx["*"]=2;
  69430. //>>excludeEnd("ctx");
  69431. self._assert_equals_($4,(9));
  69432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69433. $ctx1.sendIdx["assert:equals:"]=8;
  69434. //>>excludeEnd("ctx");
  69435. self._assert_equals_((1).__plus((2).__star((3))),(7));
  69436. return self;
  69437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69438. }, function($ctx1) {$ctx1.fill(self,"testArithmetic",{},$globals.NumberTest)});
  69439. //>>excludeEnd("ctx");
  69440. },
  69441. //>>excludeStart("ide", pragmas.excludeIdeData);
  69442. args: [],
  69443. source: "testArithmetic\x0a\x09\x0a\x09\x22We rely on JS here, so we won't test complex behavior, just check if\x0a\x09message sends are corrects\x22\x0a\x0a\x09self assert: 1.5 + 1 equals: 2.5.\x0a\x09self assert: 2 - 1 equals: 1.\x0a\x09self assert: -2 - 1 equals: -3.\x0a\x09self assert: 12 / 2 equals: 6.\x0a\x09self assert: 3 * 4 equals: 12.\x0a\x09self assert: 7 // 2 equals: 3.\x0a\x09self assert: 7 \x5c\x5c 2 equals: 1.\x0a\x0a\x09\x22Simple parenthesis and execution order\x22\x0a\x09self assert: 1 + 2 * 3 equals: 9.\x0a\x09self assert: 1 + (2 * 3) equals: 7",
  69444. referencedClasses: [],
  69445. //>>excludeEnd("ide");
  69446. messageSends: ["assert:equals:", "+", "-", "/", "*", "//", "\x5c\x5c"]
  69447. }),
  69448. $globals.NumberTest);
  69449. $core.addMethod(
  69450. $core.method({
  69451. selector: "testAsNumber",
  69452. protocol: 'tests',
  69453. fn: function (){
  69454. var self=this;
  69455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69456. return $core.withContext(function($ctx1) {
  69457. //>>excludeEnd("ctx");
  69458. self._assert_equals_((3)._asNumber(),(3));
  69459. return self;
  69460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69461. }, function($ctx1) {$ctx1.fill(self,"testAsNumber",{},$globals.NumberTest)});
  69462. //>>excludeEnd("ctx");
  69463. },
  69464. //>>excludeStart("ide", pragmas.excludeIdeData);
  69465. args: [],
  69466. source: "testAsNumber\x0a\x09self assert: 3 asNumber equals: 3.",
  69467. referencedClasses: [],
  69468. //>>excludeEnd("ide");
  69469. messageSends: ["assert:equals:", "asNumber"]
  69470. }),
  69471. $globals.NumberTest);
  69472. $core.addMethod(
  69473. $core.method({
  69474. selector: "testCeiling",
  69475. protocol: 'tests',
  69476. fn: function (){
  69477. var self=this;
  69478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69479. return $core.withContext(function($ctx1) {
  69480. //>>excludeEnd("ctx");
  69481. var $1,$2;
  69482. $1=(1.2)._ceiling();
  69483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69484. $ctx1.sendIdx["ceiling"]=1;
  69485. //>>excludeEnd("ctx");
  69486. self._assert_equals_($1,(2));
  69487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69488. $ctx1.sendIdx["assert:equals:"]=1;
  69489. //>>excludeEnd("ctx");
  69490. $2=(-1.2)._ceiling();
  69491. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69492. $ctx1.sendIdx["ceiling"]=2;
  69493. //>>excludeEnd("ctx");
  69494. self._assert_equals_($2,(-1));
  69495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69496. $ctx1.sendIdx["assert:equals:"]=2;
  69497. //>>excludeEnd("ctx");
  69498. self._assert_equals_((1)._ceiling(),(1));
  69499. return self;
  69500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69501. }, function($ctx1) {$ctx1.fill(self,"testCeiling",{},$globals.NumberTest)});
  69502. //>>excludeEnd("ctx");
  69503. },
  69504. //>>excludeStart("ide", pragmas.excludeIdeData);
  69505. args: [],
  69506. source: "testCeiling\x0a\x09self assert: 1.2 ceiling equals: 2.\x0a\x09self assert: -1.2 ceiling equals: -1.\x0a\x09self assert: 1.0 ceiling equals: 1.",
  69507. referencedClasses: [],
  69508. //>>excludeEnd("ide");
  69509. messageSends: ["assert:equals:", "ceiling"]
  69510. }),
  69511. $globals.NumberTest);
  69512. $core.addMethod(
  69513. $core.method({
  69514. selector: "testComparison",
  69515. protocol: 'tests',
  69516. fn: function (){
  69517. var self=this;
  69518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69519. return $core.withContext(function($ctx1) {
  69520. //>>excludeEnd("ctx");
  69521. var $1,$2,$3,$4;
  69522. $1=(3).__gt((2));
  69523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69524. $ctx1.sendIdx[">"]=1;
  69525. //>>excludeEnd("ctx");
  69526. self._assert_($1);
  69527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69528. $ctx1.sendIdx["assert:"]=1;
  69529. //>>excludeEnd("ctx");
  69530. $2=(2).__lt((3));
  69531. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69532. $ctx1.sendIdx["<"]=1;
  69533. //>>excludeEnd("ctx");
  69534. self._assert_($2);
  69535. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69536. $ctx1.sendIdx["assert:"]=2;
  69537. //>>excludeEnd("ctx");
  69538. self._deny_((3).__lt((2)));
  69539. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69540. $ctx1.sendIdx["deny:"]=1;
  69541. //>>excludeEnd("ctx");
  69542. self._deny_((2).__gt((3)));
  69543. $3=(3).__gt_eq((3));
  69544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69545. $ctx1.sendIdx[">="]=1;
  69546. //>>excludeEnd("ctx");
  69547. self._assert_($3);
  69548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69549. $ctx1.sendIdx["assert:"]=3;
  69550. //>>excludeEnd("ctx");
  69551. self._assert_((3.1).__gt_eq((3)));
  69552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69553. $ctx1.sendIdx["assert:"]=4;
  69554. //>>excludeEnd("ctx");
  69555. $4=(3).__lt_eq((3));
  69556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69557. $ctx1.sendIdx["<="]=1;
  69558. //>>excludeEnd("ctx");
  69559. self._assert_($4);
  69560. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69561. $ctx1.sendIdx["assert:"]=5;
  69562. //>>excludeEnd("ctx");
  69563. self._assert_((3).__lt_eq((3.1)));
  69564. return self;
  69565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69566. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.NumberTest)});
  69567. //>>excludeEnd("ctx");
  69568. },
  69569. //>>excludeStart("ide", pragmas.excludeIdeData);
  69570. args: [],
  69571. source: "testComparison\x0a\x0a\x09self assert: 3 > 2.\x0a\x09self assert: 2 < 3.\x0a\x09\x0a\x09self deny: 3 < 2.\x0a\x09self deny: 2 > 3.\x0a\x0a\x09self assert: 3 >= 3.\x0a\x09self assert: 3.1 >= 3.\x0a\x09self assert: 3 <= 3.\x0a\x09self assert: 3 <= 3.1",
  69572. referencedClasses: [],
  69573. //>>excludeEnd("ide");
  69574. messageSends: ["assert:", ">", "<", "deny:", ">=", "<="]
  69575. }),
  69576. $globals.NumberTest);
  69577. $core.addMethod(
  69578. $core.method({
  69579. selector: "testCopying",
  69580. protocol: 'tests',
  69581. fn: function (){
  69582. var self=this;
  69583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69584. return $core.withContext(function($ctx1) {
  69585. //>>excludeEnd("ctx");
  69586. var $1;
  69587. $1=$recv((1)._copy()).__eq_eq((1));
  69588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69589. $ctx1.sendIdx["=="]=1;
  69590. //>>excludeEnd("ctx");
  69591. self._assert_($1);
  69592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69593. $ctx1.sendIdx["assert:"]=1;
  69594. //>>excludeEnd("ctx");
  69595. self._assert_($recv((1)._deepCopy()).__eq_eq((1)));
  69596. return self;
  69597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69598. }, function($ctx1) {$ctx1.fill(self,"testCopying",{},$globals.NumberTest)});
  69599. //>>excludeEnd("ctx");
  69600. },
  69601. //>>excludeStart("ide", pragmas.excludeIdeData);
  69602. args: [],
  69603. source: "testCopying\x0a\x09self assert: 1 copy == 1.\x0a\x09self assert: 1 deepCopy == 1",
  69604. referencedClasses: [],
  69605. //>>excludeEnd("ide");
  69606. messageSends: ["assert:", "==", "copy", "deepCopy"]
  69607. }),
  69608. $globals.NumberTest);
  69609. $core.addMethod(
  69610. $core.method({
  69611. selector: "testEquality",
  69612. protocol: 'tests',
  69613. fn: function (){
  69614. var self=this;
  69615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69616. return $core.withContext(function($ctx1) {
  69617. //>>excludeEnd("ctx");
  69618. var $1,$2,$3,$5,$4,$7,$6,$9,$8,$10,$11,$12;
  69619. $1=(1).__eq((1));
  69620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69621. $ctx1.sendIdx["="]=1;
  69622. //>>excludeEnd("ctx");
  69623. self._assert_($1);
  69624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69625. $ctx1.sendIdx["assert:"]=1;
  69626. //>>excludeEnd("ctx");
  69627. $2=(0).__eq((0));
  69628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69629. $ctx1.sendIdx["="]=2;
  69630. //>>excludeEnd("ctx");
  69631. self._assert_($2);
  69632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69633. $ctx1.sendIdx["assert:"]=2;
  69634. //>>excludeEnd("ctx");
  69635. $3=(1).__eq((0));
  69636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69637. $ctx1.sendIdx["="]=3;
  69638. //>>excludeEnd("ctx");
  69639. self._deny_($3);
  69640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69641. $ctx1.sendIdx["deny:"]=1;
  69642. //>>excludeEnd("ctx");
  69643. $5=(1)._yourself();
  69644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69645. $ctx1.sendIdx["yourself"]=1;
  69646. //>>excludeEnd("ctx");
  69647. $4=$recv($5).__eq((1));
  69648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69649. $ctx1.sendIdx["="]=4;
  69650. //>>excludeEnd("ctx");
  69651. self._assert_($4);
  69652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69653. $ctx1.sendIdx["assert:"]=3;
  69654. //>>excludeEnd("ctx");
  69655. $7=(1)._yourself();
  69656. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69657. $ctx1.sendIdx["yourself"]=2;
  69658. //>>excludeEnd("ctx");
  69659. $6=(1).__eq($7);
  69660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69661. $ctx1.sendIdx["="]=5;
  69662. //>>excludeEnd("ctx");
  69663. self._assert_($6);
  69664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69665. $ctx1.sendIdx["assert:"]=4;
  69666. //>>excludeEnd("ctx");
  69667. $9=(1)._yourself();
  69668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69669. $ctx1.sendIdx["yourself"]=3;
  69670. //>>excludeEnd("ctx");
  69671. $8=$recv($9).__eq((1)._yourself());
  69672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69673. $ctx1.sendIdx["="]=6;
  69674. //>>excludeEnd("ctx");
  69675. self._assert_($8);
  69676. $10=(0).__eq(false);
  69677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69678. $ctx1.sendIdx["="]=7;
  69679. //>>excludeEnd("ctx");
  69680. self._deny_($10);
  69681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69682. $ctx1.sendIdx["deny:"]=2;
  69683. //>>excludeEnd("ctx");
  69684. $11=false.__eq((0));
  69685. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69686. $ctx1.sendIdx["="]=8;
  69687. //>>excludeEnd("ctx");
  69688. self._deny_($11);
  69689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69690. $ctx1.sendIdx["deny:"]=3;
  69691. //>>excludeEnd("ctx");
  69692. $12="".__eq((0));
  69693. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69694. $ctx1.sendIdx["="]=9;
  69695. //>>excludeEnd("ctx");
  69696. self._deny_($12);
  69697. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69698. $ctx1.sendIdx["deny:"]=4;
  69699. //>>excludeEnd("ctx");
  69700. self._deny_((0).__eq(""));
  69701. return self;
  69702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69703. }, function($ctx1) {$ctx1.fill(self,"testEquality",{},$globals.NumberTest)});
  69704. //>>excludeEnd("ctx");
  69705. },
  69706. //>>excludeStart("ide", pragmas.excludeIdeData);
  69707. args: [],
  69708. source: "testEquality\x0a\x09self assert: (1 = 1).\x0a\x09self assert: (0 = 0).\x0a\x09self deny: (1 = 0).\x0a\x0a\x09self assert: (1 yourself = 1).\x0a\x09self assert: (1 = 1 yourself).\x0a\x09self assert: (1 yourself = 1 yourself).\x0a\x09\x0a\x09self deny: 0 = false.\x0a\x09self deny: false = 0.\x0a\x09self deny: '' = 0.\x0a\x09self deny: 0 = ''",
  69709. referencedClasses: [],
  69710. //>>excludeEnd("ide");
  69711. messageSends: ["assert:", "=", "deny:", "yourself"]
  69712. }),
  69713. $globals.NumberTest);
  69714. $core.addMethod(
  69715. $core.method({
  69716. selector: "testFloor",
  69717. protocol: 'tests',
  69718. fn: function (){
  69719. var self=this;
  69720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69721. return $core.withContext(function($ctx1) {
  69722. //>>excludeEnd("ctx");
  69723. var $1,$2;
  69724. $1=(1.2)._floor();
  69725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69726. $ctx1.sendIdx["floor"]=1;
  69727. //>>excludeEnd("ctx");
  69728. self._assert_equals_($1,(1));
  69729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69730. $ctx1.sendIdx["assert:equals:"]=1;
  69731. //>>excludeEnd("ctx");
  69732. $2=(-1.2)._floor();
  69733. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69734. $ctx1.sendIdx["floor"]=2;
  69735. //>>excludeEnd("ctx");
  69736. self._assert_equals_($2,(-2));
  69737. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69738. $ctx1.sendIdx["assert:equals:"]=2;
  69739. //>>excludeEnd("ctx");
  69740. self._assert_equals_((1)._floor(),(1));
  69741. return self;
  69742. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69743. }, function($ctx1) {$ctx1.fill(self,"testFloor",{},$globals.NumberTest)});
  69744. //>>excludeEnd("ctx");
  69745. },
  69746. //>>excludeStart("ide", pragmas.excludeIdeData);
  69747. args: [],
  69748. source: "testFloor\x0a\x09self assert: 1.2 floor equals: 1.\x0a\x09self assert: -1.2 floor equals: -2.\x0a\x09self assert: 1.0 floor equals: 1.",
  69749. referencedClasses: [],
  69750. //>>excludeEnd("ide");
  69751. messageSends: ["assert:equals:", "floor"]
  69752. }),
  69753. $globals.NumberTest);
  69754. $core.addMethod(
  69755. $core.method({
  69756. selector: "testHexNumbers",
  69757. protocol: 'tests',
  69758. fn: function (){
  69759. var self=this;
  69760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69761. return $core.withContext(function($ctx1) {
  69762. //>>excludeEnd("ctx");
  69763. var $1,$2,$3,$4,$5;
  69764. self._assert_equals_((9),(9));
  69765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69766. $ctx1.sendIdx["assert:equals:"]=1;
  69767. //>>excludeEnd("ctx");
  69768. $1=(10)._truncated();
  69769. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69770. $ctx1.sendIdx["truncated"]=1;
  69771. //>>excludeEnd("ctx");
  69772. self._assert_equals_($1,(10));
  69773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69774. $ctx1.sendIdx["assert:equals:"]=2;
  69775. //>>excludeEnd("ctx");
  69776. $2=(11)._truncated();
  69777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69778. $ctx1.sendIdx["truncated"]=2;
  69779. //>>excludeEnd("ctx");
  69780. self._assert_equals_($2,(11));
  69781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69782. $ctx1.sendIdx["assert:equals:"]=3;
  69783. //>>excludeEnd("ctx");
  69784. $3=(12)._truncated();
  69785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69786. $ctx1.sendIdx["truncated"]=3;
  69787. //>>excludeEnd("ctx");
  69788. self._assert_equals_($3,(12));
  69789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69790. $ctx1.sendIdx["assert:equals:"]=4;
  69791. //>>excludeEnd("ctx");
  69792. $4=(13)._truncated();
  69793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69794. $ctx1.sendIdx["truncated"]=4;
  69795. //>>excludeEnd("ctx");
  69796. self._assert_equals_($4,(13));
  69797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69798. $ctx1.sendIdx["assert:equals:"]=5;
  69799. //>>excludeEnd("ctx");
  69800. $5=(14)._truncated();
  69801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69802. $ctx1.sendIdx["truncated"]=5;
  69803. //>>excludeEnd("ctx");
  69804. self._assert_equals_($5,(14));
  69805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69806. $ctx1.sendIdx["assert:equals:"]=6;
  69807. //>>excludeEnd("ctx");
  69808. self._assert_equals_((15)._truncated(),(15));
  69809. return self;
  69810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69811. }, function($ctx1) {$ctx1.fill(self,"testHexNumbers",{},$globals.NumberTest)});
  69812. //>>excludeEnd("ctx");
  69813. },
  69814. //>>excludeStart("ide", pragmas.excludeIdeData);
  69815. args: [],
  69816. source: "testHexNumbers\x0a\x0a\x09self assert: 16r9 equals: 9.\x0a\x09self assert: 16rA truncated equals: 10.\x0a\x09self assert: 16rB truncated equals: 11.\x0a\x09self assert: 16rC truncated equals: 12.\x0a\x09self assert: 16rD truncated equals: 13.\x0a\x09self assert: 16rE truncated equals: 14.\x0a\x09self assert: 16rF truncated equals: 15",
  69817. referencedClasses: [],
  69818. //>>excludeEnd("ide");
  69819. messageSends: ["assert:equals:", "truncated"]
  69820. }),
  69821. $globals.NumberTest);
  69822. $core.addMethod(
  69823. $core.method({
  69824. selector: "testIdentity",
  69825. protocol: 'tests',
  69826. fn: function (){
  69827. var self=this;
  69828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69829. return $core.withContext(function($ctx1) {
  69830. //>>excludeEnd("ctx");
  69831. var $1,$2,$3,$5,$4,$7,$6,$9,$8;
  69832. $1=(1).__eq_eq((1));
  69833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69834. $ctx1.sendIdx["=="]=1;
  69835. //>>excludeEnd("ctx");
  69836. self._assert_($1);
  69837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69838. $ctx1.sendIdx["assert:"]=1;
  69839. //>>excludeEnd("ctx");
  69840. $2=(0).__eq_eq((0));
  69841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69842. $ctx1.sendIdx["=="]=2;
  69843. //>>excludeEnd("ctx");
  69844. self._assert_($2);
  69845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69846. $ctx1.sendIdx["assert:"]=2;
  69847. //>>excludeEnd("ctx");
  69848. $3=(1).__eq_eq((0));
  69849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69850. $ctx1.sendIdx["=="]=3;
  69851. //>>excludeEnd("ctx");
  69852. self._deny_($3);
  69853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69854. $ctx1.sendIdx["deny:"]=1;
  69855. //>>excludeEnd("ctx");
  69856. $5=(1)._yourself();
  69857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69858. $ctx1.sendIdx["yourself"]=1;
  69859. //>>excludeEnd("ctx");
  69860. $4=$recv($5).__eq_eq((1));
  69861. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69862. $ctx1.sendIdx["=="]=4;
  69863. //>>excludeEnd("ctx");
  69864. self._assert_($4);
  69865. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69866. $ctx1.sendIdx["assert:"]=3;
  69867. //>>excludeEnd("ctx");
  69868. $7=(1)._yourself();
  69869. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69870. $ctx1.sendIdx["yourself"]=2;
  69871. //>>excludeEnd("ctx");
  69872. $6=(1).__eq_eq($7);
  69873. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69874. $ctx1.sendIdx["=="]=5;
  69875. //>>excludeEnd("ctx");
  69876. self._assert_($6);
  69877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69878. $ctx1.sendIdx["assert:"]=4;
  69879. //>>excludeEnd("ctx");
  69880. $9=(1)._yourself();
  69881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69882. $ctx1.sendIdx["yourself"]=3;
  69883. //>>excludeEnd("ctx");
  69884. $8=$recv($9).__eq_eq((1)._yourself());
  69885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69886. $ctx1.sendIdx["=="]=6;
  69887. //>>excludeEnd("ctx");
  69888. self._assert_($8);
  69889. self._deny_((1).__eq_eq((2)));
  69890. return self;
  69891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69892. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{},$globals.NumberTest)});
  69893. //>>excludeEnd("ctx");
  69894. },
  69895. //>>excludeStart("ide", pragmas.excludeIdeData);
  69896. args: [],
  69897. source: "testIdentity\x0a\x09self assert: 1 == 1.\x0a\x09self assert: 0 == 0.\x0a\x09self deny: 1 == 0.\x0a\x0a\x09self assert: 1 yourself == 1.\x0a\x09self assert: 1 == 1 yourself.\x0a\x09self assert: 1 yourself == 1 yourself.\x0a\x09\x0a\x09self deny: 1 == 2",
  69898. referencedClasses: [],
  69899. //>>excludeEnd("ide");
  69900. messageSends: ["assert:", "==", "deny:", "yourself"]
  69901. }),
  69902. $globals.NumberTest);
  69903. $core.addMethod(
  69904. $core.method({
  69905. selector: "testInvalidHexNumbers",
  69906. protocol: 'tests',
  69907. fn: function (){
  69908. var self=this;
  69909. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  69910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69911. return $core.withContext(function($ctx1) {
  69912. //>>excludeEnd("ctx");
  69913. self._should_raise_((function(){
  69914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69915. return $core.withContext(function($ctx2) {
  69916. //>>excludeEnd("ctx");
  69917. return (16)._rG();
  69918. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69919. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  69920. //>>excludeEnd("ctx");
  69921. }),$MessageNotUnderstood());
  69922. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69923. $ctx1.sendIdx["should:raise:"]=1;
  69924. //>>excludeEnd("ctx");
  69925. self._should_raise_((function(){
  69926. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69927. return $core.withContext(function($ctx2) {
  69928. //>>excludeEnd("ctx");
  69929. return (16)._rg();
  69930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69931. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  69932. //>>excludeEnd("ctx");
  69933. }),$MessageNotUnderstood());
  69934. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69935. $ctx1.sendIdx["should:raise:"]=2;
  69936. //>>excludeEnd("ctx");
  69937. self._should_raise_((function(){
  69938. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69939. return $core.withContext(function($ctx2) {
  69940. //>>excludeEnd("ctx");
  69941. return (16)._rH();
  69942. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69943. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  69944. //>>excludeEnd("ctx");
  69945. }),$MessageNotUnderstood());
  69946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69947. $ctx1.sendIdx["should:raise:"]=3;
  69948. //>>excludeEnd("ctx");
  69949. self._should_raise_((function(){
  69950. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69951. return $core.withContext(function($ctx2) {
  69952. //>>excludeEnd("ctx");
  69953. return (16)._rh();
  69954. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69955. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  69956. //>>excludeEnd("ctx");
  69957. }),$MessageNotUnderstood());
  69958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69959. $ctx1.sendIdx["should:raise:"]=4;
  69960. //>>excludeEnd("ctx");
  69961. self._should_raise_((function(){
  69962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69963. return $core.withContext(function($ctx2) {
  69964. //>>excludeEnd("ctx");
  69965. return (16)._rI();
  69966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69967. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  69968. //>>excludeEnd("ctx");
  69969. }),$MessageNotUnderstood());
  69970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69971. $ctx1.sendIdx["should:raise:"]=5;
  69972. //>>excludeEnd("ctx");
  69973. self._should_raise_((function(){
  69974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69975. return $core.withContext(function($ctx2) {
  69976. //>>excludeEnd("ctx");
  69977. return (16)._ri();
  69978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69979. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,6)});
  69980. //>>excludeEnd("ctx");
  69981. }),$MessageNotUnderstood());
  69982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69983. $ctx1.sendIdx["should:raise:"]=6;
  69984. //>>excludeEnd("ctx");
  69985. self._should_raise_((function(){
  69986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69987. return $core.withContext(function($ctx2) {
  69988. //>>excludeEnd("ctx");
  69989. return (16)._rJ();
  69990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69991. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  69992. //>>excludeEnd("ctx");
  69993. }),$MessageNotUnderstood());
  69994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69995. $ctx1.sendIdx["should:raise:"]=7;
  69996. //>>excludeEnd("ctx");
  69997. self._should_raise_((function(){
  69998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69999. return $core.withContext(function($ctx2) {
  70000. //>>excludeEnd("ctx");
  70001. return (16)._rj();
  70002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70003. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,8)});
  70004. //>>excludeEnd("ctx");
  70005. }),$MessageNotUnderstood());
  70006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70007. $ctx1.sendIdx["should:raise:"]=8;
  70008. //>>excludeEnd("ctx");
  70009. self._should_raise_((function(){
  70010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70011. return $core.withContext(function($ctx2) {
  70012. //>>excludeEnd("ctx");
  70013. return (16)._rK();
  70014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70015. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,9)});
  70016. //>>excludeEnd("ctx");
  70017. }),$MessageNotUnderstood());
  70018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70019. $ctx1.sendIdx["should:raise:"]=9;
  70020. //>>excludeEnd("ctx");
  70021. self._should_raise_((function(){
  70022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70023. return $core.withContext(function($ctx2) {
  70024. //>>excludeEnd("ctx");
  70025. return (16)._rk();
  70026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70027. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,10)});
  70028. //>>excludeEnd("ctx");
  70029. }),$MessageNotUnderstood());
  70030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70031. $ctx1.sendIdx["should:raise:"]=10;
  70032. //>>excludeEnd("ctx");
  70033. self._should_raise_((function(){
  70034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70035. return $core.withContext(function($ctx2) {
  70036. //>>excludeEnd("ctx");
  70037. return (16)._rL();
  70038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70039. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,11)});
  70040. //>>excludeEnd("ctx");
  70041. }),$MessageNotUnderstood());
  70042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70043. $ctx1.sendIdx["should:raise:"]=11;
  70044. //>>excludeEnd("ctx");
  70045. self._should_raise_((function(){
  70046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70047. return $core.withContext(function($ctx2) {
  70048. //>>excludeEnd("ctx");
  70049. return (16)._rl();
  70050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70051. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,12)});
  70052. //>>excludeEnd("ctx");
  70053. }),$MessageNotUnderstood());
  70054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70055. $ctx1.sendIdx["should:raise:"]=12;
  70056. //>>excludeEnd("ctx");
  70057. self._should_raise_((function(){
  70058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70059. return $core.withContext(function($ctx2) {
  70060. //>>excludeEnd("ctx");
  70061. return (16)._rM();
  70062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70063. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,13)});
  70064. //>>excludeEnd("ctx");
  70065. }),$MessageNotUnderstood());
  70066. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70067. $ctx1.sendIdx["should:raise:"]=13;
  70068. //>>excludeEnd("ctx");
  70069. self._should_raise_((function(){
  70070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70071. return $core.withContext(function($ctx2) {
  70072. //>>excludeEnd("ctx");
  70073. return (16)._rm();
  70074. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70075. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,14)});
  70076. //>>excludeEnd("ctx");
  70077. }),$MessageNotUnderstood());
  70078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70079. $ctx1.sendIdx["should:raise:"]=14;
  70080. //>>excludeEnd("ctx");
  70081. self._should_raise_((function(){
  70082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70083. return $core.withContext(function($ctx2) {
  70084. //>>excludeEnd("ctx");
  70085. return (16)._rN();
  70086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70087. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,15)});
  70088. //>>excludeEnd("ctx");
  70089. }),$MessageNotUnderstood());
  70090. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70091. $ctx1.sendIdx["should:raise:"]=15;
  70092. //>>excludeEnd("ctx");
  70093. self._should_raise_((function(){
  70094. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70095. return $core.withContext(function($ctx2) {
  70096. //>>excludeEnd("ctx");
  70097. return (16)._rn();
  70098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70099. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,16)});
  70100. //>>excludeEnd("ctx");
  70101. }),$MessageNotUnderstood());
  70102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70103. $ctx1.sendIdx["should:raise:"]=16;
  70104. //>>excludeEnd("ctx");
  70105. self._should_raise_((function(){
  70106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70107. return $core.withContext(function($ctx2) {
  70108. //>>excludeEnd("ctx");
  70109. return (16)._rO();
  70110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70111. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,17)});
  70112. //>>excludeEnd("ctx");
  70113. }),$MessageNotUnderstood());
  70114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70115. $ctx1.sendIdx["should:raise:"]=17;
  70116. //>>excludeEnd("ctx");
  70117. self._should_raise_((function(){
  70118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70119. return $core.withContext(function($ctx2) {
  70120. //>>excludeEnd("ctx");
  70121. return (16)._ro();
  70122. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70123. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,18)});
  70124. //>>excludeEnd("ctx");
  70125. }),$MessageNotUnderstood());
  70126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70127. $ctx1.sendIdx["should:raise:"]=18;
  70128. //>>excludeEnd("ctx");
  70129. self._should_raise_((function(){
  70130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70131. return $core.withContext(function($ctx2) {
  70132. //>>excludeEnd("ctx");
  70133. return (16)._rP();
  70134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70135. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,19)});
  70136. //>>excludeEnd("ctx");
  70137. }),$MessageNotUnderstood());
  70138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70139. $ctx1.sendIdx["should:raise:"]=19;
  70140. //>>excludeEnd("ctx");
  70141. self._should_raise_((function(){
  70142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70143. return $core.withContext(function($ctx2) {
  70144. //>>excludeEnd("ctx");
  70145. return (16)._rp();
  70146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70147. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,20)});
  70148. //>>excludeEnd("ctx");
  70149. }),$MessageNotUnderstood());
  70150. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70151. $ctx1.sendIdx["should:raise:"]=20;
  70152. //>>excludeEnd("ctx");
  70153. self._should_raise_((function(){
  70154. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70155. return $core.withContext(function($ctx2) {
  70156. //>>excludeEnd("ctx");
  70157. return (16)._rQ();
  70158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70159. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,21)});
  70160. //>>excludeEnd("ctx");
  70161. }),$MessageNotUnderstood());
  70162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70163. $ctx1.sendIdx["should:raise:"]=21;
  70164. //>>excludeEnd("ctx");
  70165. self._should_raise_((function(){
  70166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70167. return $core.withContext(function($ctx2) {
  70168. //>>excludeEnd("ctx");
  70169. return (16)._rq();
  70170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70171. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,22)});
  70172. //>>excludeEnd("ctx");
  70173. }),$MessageNotUnderstood());
  70174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70175. $ctx1.sendIdx["should:raise:"]=22;
  70176. //>>excludeEnd("ctx");
  70177. self._should_raise_((function(){
  70178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70179. return $core.withContext(function($ctx2) {
  70180. //>>excludeEnd("ctx");
  70181. return (16)._rR();
  70182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70183. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,23)});
  70184. //>>excludeEnd("ctx");
  70185. }),$MessageNotUnderstood());
  70186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70187. $ctx1.sendIdx["should:raise:"]=23;
  70188. //>>excludeEnd("ctx");
  70189. self._should_raise_((function(){
  70190. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70191. return $core.withContext(function($ctx2) {
  70192. //>>excludeEnd("ctx");
  70193. return (16)._rr();
  70194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70195. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,24)});
  70196. //>>excludeEnd("ctx");
  70197. }),$MessageNotUnderstood());
  70198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70199. $ctx1.sendIdx["should:raise:"]=24;
  70200. //>>excludeEnd("ctx");
  70201. self._should_raise_((function(){
  70202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70203. return $core.withContext(function($ctx2) {
  70204. //>>excludeEnd("ctx");
  70205. return (16)._rS();
  70206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70207. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,25)});
  70208. //>>excludeEnd("ctx");
  70209. }),$MessageNotUnderstood());
  70210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70211. $ctx1.sendIdx["should:raise:"]=25;
  70212. //>>excludeEnd("ctx");
  70213. self._should_raise_((function(){
  70214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70215. return $core.withContext(function($ctx2) {
  70216. //>>excludeEnd("ctx");
  70217. return (16)._rs();
  70218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70219. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,26)});
  70220. //>>excludeEnd("ctx");
  70221. }),$MessageNotUnderstood());
  70222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70223. $ctx1.sendIdx["should:raise:"]=26;
  70224. //>>excludeEnd("ctx");
  70225. self._should_raise_((function(){
  70226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70227. return $core.withContext(function($ctx2) {
  70228. //>>excludeEnd("ctx");
  70229. return (16)._rT();
  70230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70231. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,27)});
  70232. //>>excludeEnd("ctx");
  70233. }),$MessageNotUnderstood());
  70234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70235. $ctx1.sendIdx["should:raise:"]=27;
  70236. //>>excludeEnd("ctx");
  70237. self._should_raise_((function(){
  70238. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70239. return $core.withContext(function($ctx2) {
  70240. //>>excludeEnd("ctx");
  70241. return (16)._rt();
  70242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70243. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,28)});
  70244. //>>excludeEnd("ctx");
  70245. }),$MessageNotUnderstood());
  70246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70247. $ctx1.sendIdx["should:raise:"]=28;
  70248. //>>excludeEnd("ctx");
  70249. self._should_raise_((function(){
  70250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70251. return $core.withContext(function($ctx2) {
  70252. //>>excludeEnd("ctx");
  70253. return (16)._rU();
  70254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70255. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,29)});
  70256. //>>excludeEnd("ctx");
  70257. }),$MessageNotUnderstood());
  70258. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70259. $ctx1.sendIdx["should:raise:"]=29;
  70260. //>>excludeEnd("ctx");
  70261. self._should_raise_((function(){
  70262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70263. return $core.withContext(function($ctx2) {
  70264. //>>excludeEnd("ctx");
  70265. return (16)._ru();
  70266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70267. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,30)});
  70268. //>>excludeEnd("ctx");
  70269. }),$MessageNotUnderstood());
  70270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70271. $ctx1.sendIdx["should:raise:"]=30;
  70272. //>>excludeEnd("ctx");
  70273. self._should_raise_((function(){
  70274. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70275. return $core.withContext(function($ctx2) {
  70276. //>>excludeEnd("ctx");
  70277. return (16)._rV();
  70278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70279. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,31)});
  70280. //>>excludeEnd("ctx");
  70281. }),$MessageNotUnderstood());
  70282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70283. $ctx1.sendIdx["should:raise:"]=31;
  70284. //>>excludeEnd("ctx");
  70285. self._should_raise_((function(){
  70286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70287. return $core.withContext(function($ctx2) {
  70288. //>>excludeEnd("ctx");
  70289. return (16)._rv();
  70290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70291. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,32)});
  70292. //>>excludeEnd("ctx");
  70293. }),$MessageNotUnderstood());
  70294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70295. $ctx1.sendIdx["should:raise:"]=32;
  70296. //>>excludeEnd("ctx");
  70297. self._should_raise_((function(){
  70298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70299. return $core.withContext(function($ctx2) {
  70300. //>>excludeEnd("ctx");
  70301. return (16)._rW();
  70302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70303. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,33)});
  70304. //>>excludeEnd("ctx");
  70305. }),$MessageNotUnderstood());
  70306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70307. $ctx1.sendIdx["should:raise:"]=33;
  70308. //>>excludeEnd("ctx");
  70309. self._should_raise_((function(){
  70310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70311. return $core.withContext(function($ctx2) {
  70312. //>>excludeEnd("ctx");
  70313. return (16)._rw();
  70314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70315. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,34)});
  70316. //>>excludeEnd("ctx");
  70317. }),$MessageNotUnderstood());
  70318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70319. $ctx1.sendIdx["should:raise:"]=34;
  70320. //>>excludeEnd("ctx");
  70321. self._should_raise_((function(){
  70322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70323. return $core.withContext(function($ctx2) {
  70324. //>>excludeEnd("ctx");
  70325. return (16)._rX();
  70326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70327. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,35)});
  70328. //>>excludeEnd("ctx");
  70329. }),$MessageNotUnderstood());
  70330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70331. $ctx1.sendIdx["should:raise:"]=35;
  70332. //>>excludeEnd("ctx");
  70333. self._should_raise_((function(){
  70334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70335. return $core.withContext(function($ctx2) {
  70336. //>>excludeEnd("ctx");
  70337. return (16)._rx();
  70338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70339. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,36)});
  70340. //>>excludeEnd("ctx");
  70341. }),$MessageNotUnderstood());
  70342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70343. $ctx1.sendIdx["should:raise:"]=36;
  70344. //>>excludeEnd("ctx");
  70345. self._should_raise_((function(){
  70346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70347. return $core.withContext(function($ctx2) {
  70348. //>>excludeEnd("ctx");
  70349. return (16)._rY();
  70350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70351. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,37)});
  70352. //>>excludeEnd("ctx");
  70353. }),$MessageNotUnderstood());
  70354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70355. $ctx1.sendIdx["should:raise:"]=37;
  70356. //>>excludeEnd("ctx");
  70357. self._should_raise_((function(){
  70358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70359. return $core.withContext(function($ctx2) {
  70360. //>>excludeEnd("ctx");
  70361. return (16)._ry();
  70362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70363. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,38)});
  70364. //>>excludeEnd("ctx");
  70365. }),$MessageNotUnderstood());
  70366. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70367. $ctx1.sendIdx["should:raise:"]=38;
  70368. //>>excludeEnd("ctx");
  70369. self._should_raise_((function(){
  70370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70371. return $core.withContext(function($ctx2) {
  70372. //>>excludeEnd("ctx");
  70373. return (16)._rZ();
  70374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70375. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,39)});
  70376. //>>excludeEnd("ctx");
  70377. }),$MessageNotUnderstood());
  70378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70379. $ctx1.sendIdx["should:raise:"]=39;
  70380. //>>excludeEnd("ctx");
  70381. self._should_raise_((function(){
  70382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70383. return $core.withContext(function($ctx2) {
  70384. //>>excludeEnd("ctx");
  70385. return (16)._rz();
  70386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70387. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,40)});
  70388. //>>excludeEnd("ctx");
  70389. }),$MessageNotUnderstood());
  70390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70391. $ctx1.sendIdx["should:raise:"]=40;
  70392. //>>excludeEnd("ctx");
  70393. self._should_raise_((function(){
  70394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70395. return $core.withContext(function($ctx2) {
  70396. //>>excludeEnd("ctx");
  70397. return (11259375)._Z();
  70398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70399. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,41)});
  70400. //>>excludeEnd("ctx");
  70401. }),$MessageNotUnderstood());
  70402. return self;
  70403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70404. }, function($ctx1) {$ctx1.fill(self,"testInvalidHexNumbers",{},$globals.NumberTest)});
  70405. //>>excludeEnd("ctx");
  70406. },
  70407. //>>excludeStart("ide", pragmas.excludeIdeData);
  70408. args: [],
  70409. source: "testInvalidHexNumbers\x0a\x0a\x09self should: [ 16rG ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rg ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rH ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rh ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rI ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16ri ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rJ ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rj ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rK ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rk ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rL ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rl ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rM ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rm ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rN ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rn ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rO ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16ro ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rP ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rp ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rQ ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rq ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rR ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rr ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rS ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rs ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rT ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rt ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rU ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16ru ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rV ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rv ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rW ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rw ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rX ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rx ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rY ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16ry ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rZ ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rz ] raise: MessageNotUnderstood.\x0a\x09self should: [ 16rABcdEfZ ] raise: MessageNotUnderstood.",
  70410. referencedClasses: ["MessageNotUnderstood"],
  70411. //>>excludeEnd("ide");
  70412. messageSends: ["should:raise:", "rG", "rg", "rH", "rh", "rI", "ri", "rJ", "rj", "rK", "rk", "rL", "rl", "rM", "rm", "rN", "rn", "rO", "ro", "rP", "rp", "rQ", "rq", "rR", "rr", "rS", "rs", "rT", "rt", "rU", "ru", "rV", "rv", "rW", "rw", "rX", "rx", "rY", "ry", "rZ", "rz", "Z"]
  70413. }),
  70414. $globals.NumberTest);
  70415. $core.addMethod(
  70416. $core.method({
  70417. selector: "testLog",
  70418. protocol: 'tests',
  70419. fn: function (){
  70420. var self=this;
  70421. function $Number(){return $globals.Number||(typeof Number=="undefined"?nil:Number)}
  70422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70423. return $core.withContext(function($ctx1) {
  70424. //>>excludeEnd("ctx");
  70425. self._assert_equals_((10000)._log(),(4));
  70426. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70427. $ctx1.sendIdx["assert:equals:"]=1;
  70428. //>>excludeEnd("ctx");
  70429. self._assert_equals_((512)._log_((2)),(9));
  70430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70431. $ctx1.sendIdx["assert:equals:"]=2;
  70432. //>>excludeEnd("ctx");
  70433. self._assert_equals_($recv($recv($Number())._e())._ln(),(1));
  70434. return self;
  70435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70436. }, function($ctx1) {$ctx1.fill(self,"testLog",{},$globals.NumberTest)});
  70437. //>>excludeEnd("ctx");
  70438. },
  70439. //>>excludeStart("ide", pragmas.excludeIdeData);
  70440. args: [],
  70441. source: "testLog\x0a\x09self assert: 10000 log equals: 4.\x0a\x09self assert: (512 log: 2) equals: 9.\x0a\x09self assert: Number e ln equals: 1.",
  70442. referencedClasses: ["Number"],
  70443. //>>excludeEnd("ide");
  70444. messageSends: ["assert:equals:", "log", "log:", "ln", "e"]
  70445. }),
  70446. $globals.NumberTest);
  70447. $core.addMethod(
  70448. $core.method({
  70449. selector: "testMinMax",
  70450. protocol: 'tests',
  70451. fn: function (){
  70452. var self=this;
  70453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70454. return $core.withContext(function($ctx1) {
  70455. //>>excludeEnd("ctx");
  70456. self._assert_equals_((2)._max_((5)),(5));
  70457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70458. $ctx1.sendIdx["assert:equals:"]=1;
  70459. //>>excludeEnd("ctx");
  70460. self._assert_equals_((2)._min_((5)),(2));
  70461. return self;
  70462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70463. }, function($ctx1) {$ctx1.fill(self,"testMinMax",{},$globals.NumberTest)});
  70464. //>>excludeEnd("ctx");
  70465. },
  70466. //>>excludeStart("ide", pragmas.excludeIdeData);
  70467. args: [],
  70468. source: "testMinMax\x0a\x09\x0a\x09self assert: (2 max: 5) equals: 5.\x0a\x09self assert: (2 min: 5) equals: 2",
  70469. referencedClasses: [],
  70470. //>>excludeEnd("ide");
  70471. messageSends: ["assert:equals:", "max:", "min:"]
  70472. }),
  70473. $globals.NumberTest);
  70474. $core.addMethod(
  70475. $core.method({
  70476. selector: "testNegated",
  70477. protocol: 'tests',
  70478. fn: function (){
  70479. var self=this;
  70480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70481. return $core.withContext(function($ctx1) {
  70482. //>>excludeEnd("ctx");
  70483. var $1;
  70484. $1=(3)._negated();
  70485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70486. $ctx1.sendIdx["negated"]=1;
  70487. //>>excludeEnd("ctx");
  70488. self._assert_equals_($1,(-3));
  70489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70490. $ctx1.sendIdx["assert:equals:"]=1;
  70491. //>>excludeEnd("ctx");
  70492. self._assert_equals_((-3)._negated(),(3));
  70493. return self;
  70494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70495. }, function($ctx1) {$ctx1.fill(self,"testNegated",{},$globals.NumberTest)});
  70496. //>>excludeEnd("ctx");
  70497. },
  70498. //>>excludeStart("ide", pragmas.excludeIdeData);
  70499. args: [],
  70500. source: "testNegated\x0a\x09self assert: 3 negated equals: -3.\x0a\x09self assert: -3 negated equals: 3",
  70501. referencedClasses: [],
  70502. //>>excludeEnd("ide");
  70503. messageSends: ["assert:equals:", "negated"]
  70504. }),
  70505. $globals.NumberTest);
  70506. $core.addMethod(
  70507. $core.method({
  70508. selector: "testPrintShowingDecimalPlaces",
  70509. protocol: 'tests',
  70510. fn: function (){
  70511. var self=this;
  70512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70513. return $core.withContext(function($ctx1) {
  70514. //>>excludeEnd("ctx");
  70515. var $1,$2,$4,$3,$5,$6,$8,$7,$10,$9,$11,$12,$13,$14,$15;
  70516. $1=(23)._printShowingDecimalPlaces_((2));
  70517. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70518. $ctx1.sendIdx["printShowingDecimalPlaces:"]=1;
  70519. //>>excludeEnd("ctx");
  70520. self._assert_equals_($1,"23.00");
  70521. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70522. $ctx1.sendIdx["assert:equals:"]=1;
  70523. //>>excludeEnd("ctx");
  70524. $2=(23.5698)._printShowingDecimalPlaces_((2));
  70525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70526. $ctx1.sendIdx["printShowingDecimalPlaces:"]=2;
  70527. //>>excludeEnd("ctx");
  70528. self._assert_equals_($2,"23.57");
  70529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70530. $ctx1.sendIdx["assert:equals:"]=2;
  70531. //>>excludeEnd("ctx");
  70532. $4=(234.567)._negated();
  70533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70534. $ctx1.sendIdx["negated"]=1;
  70535. //>>excludeEnd("ctx");
  70536. $3=$recv($4)._printShowingDecimalPlaces_((5));
  70537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70538. $ctx1.sendIdx["printShowingDecimalPlaces:"]=3;
  70539. //>>excludeEnd("ctx");
  70540. self._assert_equals_($3,"-234.56700");
  70541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70542. $ctx1.sendIdx["assert:equals:"]=3;
  70543. //>>excludeEnd("ctx");
  70544. $5=(23.4567)._printShowingDecimalPlaces_((0));
  70545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70546. $ctx1.sendIdx["printShowingDecimalPlaces:"]=4;
  70547. //>>excludeEnd("ctx");
  70548. self._assert_equals_($5,"23");
  70549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70550. $ctx1.sendIdx["assert:equals:"]=4;
  70551. //>>excludeEnd("ctx");
  70552. $6=(23.5567)._printShowingDecimalPlaces_((0));
  70553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70554. $ctx1.sendIdx["printShowingDecimalPlaces:"]=5;
  70555. //>>excludeEnd("ctx");
  70556. self._assert_equals_($6,"24");
  70557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70558. $ctx1.sendIdx["assert:equals:"]=5;
  70559. //>>excludeEnd("ctx");
  70560. $8=(23.4567)._negated();
  70561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70562. $ctx1.sendIdx["negated"]=2;
  70563. //>>excludeEnd("ctx");
  70564. $7=$recv($8)._printShowingDecimalPlaces_((0));
  70565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70566. $ctx1.sendIdx["printShowingDecimalPlaces:"]=6;
  70567. //>>excludeEnd("ctx");
  70568. self._assert_equals_($7,"-23");
  70569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70570. $ctx1.sendIdx["assert:equals:"]=6;
  70571. //>>excludeEnd("ctx");
  70572. $10=(23.5567)._negated();
  70573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70574. $ctx1.sendIdx["negated"]=3;
  70575. //>>excludeEnd("ctx");
  70576. $9=$recv($10)._printShowingDecimalPlaces_((0));
  70577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70578. $ctx1.sendIdx["printShowingDecimalPlaces:"]=7;
  70579. //>>excludeEnd("ctx");
  70580. self._assert_equals_($9,"-24");
  70581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70582. $ctx1.sendIdx["assert:equals:"]=7;
  70583. //>>excludeEnd("ctx");
  70584. $11=(100000000)._printShowingDecimalPlaces_((1));
  70585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70586. $ctx1.sendIdx["printShowingDecimalPlaces:"]=8;
  70587. //>>excludeEnd("ctx");
  70588. self._assert_equals_($11,"100000000.0");
  70589. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70590. $ctx1.sendIdx["assert:equals:"]=8;
  70591. //>>excludeEnd("ctx");
  70592. $12=(0.98)._printShowingDecimalPlaces_((5));
  70593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70594. $ctx1.sendIdx["printShowingDecimalPlaces:"]=9;
  70595. //>>excludeEnd("ctx");
  70596. self._assert_equals_($12,"0.98000");
  70597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70598. $ctx1.sendIdx["assert:equals:"]=9;
  70599. //>>excludeEnd("ctx");
  70600. $13=$recv((0.98)._negated())._printShowingDecimalPlaces_((2));
  70601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70602. $ctx1.sendIdx["printShowingDecimalPlaces:"]=10;
  70603. //>>excludeEnd("ctx");
  70604. self._assert_equals_($13,"-0.98");
  70605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70606. $ctx1.sendIdx["assert:equals:"]=10;
  70607. //>>excludeEnd("ctx");
  70608. $14=(2.567)._printShowingDecimalPlaces_((2));
  70609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70610. $ctx1.sendIdx["printShowingDecimalPlaces:"]=11;
  70611. //>>excludeEnd("ctx");
  70612. self._assert_equals_($14,"2.57");
  70613. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70614. $ctx1.sendIdx["assert:equals:"]=11;
  70615. //>>excludeEnd("ctx");
  70616. $15=(-2.567)._printShowingDecimalPlaces_((2));
  70617. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70618. $ctx1.sendIdx["printShowingDecimalPlaces:"]=12;
  70619. //>>excludeEnd("ctx");
  70620. self._assert_equals_($15,"-2.57");
  70621. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70622. $ctx1.sendIdx["assert:equals:"]=12;
  70623. //>>excludeEnd("ctx");
  70624. self._assert_equals_((0)._printShowingDecimalPlaces_((2)),"0.00");
  70625. return self;
  70626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70627. }, function($ctx1) {$ctx1.fill(self,"testPrintShowingDecimalPlaces",{},$globals.NumberTest)});
  70628. //>>excludeEnd("ctx");
  70629. },
  70630. //>>excludeStart("ide", pragmas.excludeIdeData);
  70631. args: [],
  70632. source: "testPrintShowingDecimalPlaces\x0a\x09self assert: (23 printShowingDecimalPlaces: 2) equals: '23.00'.\x0a\x09self assert: (23.5698 printShowingDecimalPlaces: 2) equals: '23.57'.\x0a\x09self assert: (234.567 negated printShowingDecimalPlaces: 5) equals: '-234.56700'.\x0a\x09self assert: (23.4567 printShowingDecimalPlaces: 0) equals: '23'.\x0a\x09self assert: (23.5567 printShowingDecimalPlaces: 0) equals: '24'.\x0a\x09self assert: (23.4567 negated printShowingDecimalPlaces: 0) equals: '-23'.\x0a\x09self assert: (23.5567 negated printShowingDecimalPlaces: 0) equals: '-24'.\x0a\x09self assert: (100000000 printShowingDecimalPlaces: 1) equals: '100000000.0'.\x0a\x09self assert: (0.98 printShowingDecimalPlaces: 5) equals: '0.98000'.\x0a\x09self assert: (0.98 negated printShowingDecimalPlaces: 2) equals: '-0.98'.\x0a\x09self assert: (2.567 printShowingDecimalPlaces: 2) equals: '2.57'.\x0a\x09self assert: (-2.567 printShowingDecimalPlaces: 2) equals: '-2.57'.\x0a\x09self assert: (0 printShowingDecimalPlaces: 2) equals: '0.00'.",
  70633. referencedClasses: [],
  70634. //>>excludeEnd("ide");
  70635. messageSends: ["assert:equals:", "printShowingDecimalPlaces:", "negated"]
  70636. }),
  70637. $globals.NumberTest);
  70638. $core.addMethod(
  70639. $core.method({
  70640. selector: "testRaisedTo",
  70641. protocol: 'tests',
  70642. fn: function (){
  70643. var self=this;
  70644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70645. return $core.withContext(function($ctx1) {
  70646. //>>excludeEnd("ctx");
  70647. var $1,$2,$3;
  70648. $1=(2)._raisedTo_((4));
  70649. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70650. $ctx1.sendIdx["raisedTo:"]=1;
  70651. //>>excludeEnd("ctx");
  70652. self._assert_equals_($1,(16));
  70653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70654. $ctx1.sendIdx["assert:equals:"]=1;
  70655. //>>excludeEnd("ctx");
  70656. $2=(2)._raisedTo_((0));
  70657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70658. $ctx1.sendIdx["raisedTo:"]=2;
  70659. //>>excludeEnd("ctx");
  70660. self._assert_equals_($2,(1));
  70661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70662. $ctx1.sendIdx["assert:equals:"]=2;
  70663. //>>excludeEnd("ctx");
  70664. $3=(2)._raisedTo_((-3));
  70665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70666. $ctx1.sendIdx["raisedTo:"]=3;
  70667. //>>excludeEnd("ctx");
  70668. self._assert_equals_($3,(0.125));
  70669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70670. $ctx1.sendIdx["assert:equals:"]=3;
  70671. //>>excludeEnd("ctx");
  70672. self._assert_equals_((4)._raisedTo_((0.5)),(2));
  70673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70674. $ctx1.sendIdx["assert:equals:"]=4;
  70675. //>>excludeEnd("ctx");
  70676. self._assert_equals_((2).__star_star((4)),(16));
  70677. return self;
  70678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70679. }, function($ctx1) {$ctx1.fill(self,"testRaisedTo",{},$globals.NumberTest)});
  70680. //>>excludeEnd("ctx");
  70681. },
  70682. //>>excludeStart("ide", pragmas.excludeIdeData);
  70683. args: [],
  70684. source: "testRaisedTo\x0a\x09self assert: (2 raisedTo: 4) equals: 16.\x0a\x09self assert: (2 raisedTo: 0) equals: 1.\x0a\x09self assert: (2 raisedTo: -3) equals: 0.125.\x0a\x09self assert: (4 raisedTo: 0.5) equals: 2.\x0a\x09\x0a\x09self assert: 2 ** 4 equals: 16.",
  70685. referencedClasses: [],
  70686. //>>excludeEnd("ide");
  70687. messageSends: ["assert:equals:", "raisedTo:", "**"]
  70688. }),
  70689. $globals.NumberTest);
  70690. $core.addMethod(
  70691. $core.method({
  70692. selector: "testRounded",
  70693. protocol: 'tests',
  70694. fn: function (){
  70695. var self=this;
  70696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70697. return $core.withContext(function($ctx1) {
  70698. //>>excludeEnd("ctx");
  70699. var $1,$2;
  70700. $1=(3)._rounded();
  70701. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70702. $ctx1.sendIdx["rounded"]=1;
  70703. //>>excludeEnd("ctx");
  70704. self._assert_equals_($1,(3));
  70705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70706. $ctx1.sendIdx["assert:equals:"]=1;
  70707. //>>excludeEnd("ctx");
  70708. $2=(3.212)._rounded();
  70709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70710. $ctx1.sendIdx["rounded"]=2;
  70711. //>>excludeEnd("ctx");
  70712. self._assert_equals_($2,(3));
  70713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70714. $ctx1.sendIdx["assert:equals:"]=2;
  70715. //>>excludeEnd("ctx");
  70716. self._assert_equals_((3.51)._rounded(),(4));
  70717. return self;
  70718. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70719. }, function($ctx1) {$ctx1.fill(self,"testRounded",{},$globals.NumberTest)});
  70720. //>>excludeEnd("ctx");
  70721. },
  70722. //>>excludeStart("ide", pragmas.excludeIdeData);
  70723. args: [],
  70724. source: "testRounded\x0a\x09\x0a\x09self assert: 3 rounded equals: 3.\x0a\x09self assert: 3.212 rounded equals: 3.\x0a\x09self assert: 3.51 rounded equals: 4",
  70725. referencedClasses: [],
  70726. //>>excludeEnd("ide");
  70727. messageSends: ["assert:equals:", "rounded"]
  70728. }),
  70729. $globals.NumberTest);
  70730. $core.addMethod(
  70731. $core.method({
  70732. selector: "testSign",
  70733. protocol: 'tests',
  70734. fn: function (){
  70735. var self=this;
  70736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70737. return $core.withContext(function($ctx1) {
  70738. //>>excludeEnd("ctx");
  70739. var $1,$2;
  70740. $1=(5)._sign();
  70741. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70742. $ctx1.sendIdx["sign"]=1;
  70743. //>>excludeEnd("ctx");
  70744. self._assert_equals_($1,(1));
  70745. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70746. $ctx1.sendIdx["assert:equals:"]=1;
  70747. //>>excludeEnd("ctx");
  70748. $2=(0)._sign();
  70749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70750. $ctx1.sendIdx["sign"]=2;
  70751. //>>excludeEnd("ctx");
  70752. self._assert_equals_($2,(0));
  70753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70754. $ctx1.sendIdx["assert:equals:"]=2;
  70755. //>>excludeEnd("ctx");
  70756. self._assert_equals_((-1.4)._sign(),(-1));
  70757. return self;
  70758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70759. }, function($ctx1) {$ctx1.fill(self,"testSign",{},$globals.NumberTest)});
  70760. //>>excludeEnd("ctx");
  70761. },
  70762. //>>excludeStart("ide", pragmas.excludeIdeData);
  70763. args: [],
  70764. source: "testSign\x0a\x09self assert: 5 sign equals: 1.\x0a\x09self assert: 0 sign equals: 0.\x0a\x09self assert: -1.4 sign equals: -1.",
  70765. referencedClasses: [],
  70766. //>>excludeEnd("ide");
  70767. messageSends: ["assert:equals:", "sign"]
  70768. }),
  70769. $globals.NumberTest);
  70770. $core.addMethod(
  70771. $core.method({
  70772. selector: "testSqrt",
  70773. protocol: 'tests',
  70774. fn: function (){
  70775. var self=this;
  70776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70777. return $core.withContext(function($ctx1) {
  70778. //>>excludeEnd("ctx");
  70779. var $1;
  70780. $1=(4)._sqrt();
  70781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70782. $ctx1.sendIdx["sqrt"]=1;
  70783. //>>excludeEnd("ctx");
  70784. self._assert_equals_($1,(2));
  70785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70786. $ctx1.sendIdx["assert:equals:"]=1;
  70787. //>>excludeEnd("ctx");
  70788. self._assert_equals_((16)._sqrt(),(4));
  70789. return self;
  70790. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70791. }, function($ctx1) {$ctx1.fill(self,"testSqrt",{},$globals.NumberTest)});
  70792. //>>excludeEnd("ctx");
  70793. },
  70794. //>>excludeStart("ide", pragmas.excludeIdeData);
  70795. args: [],
  70796. source: "testSqrt\x0a\x09\x0a\x09self assert: 4 sqrt equals: 2.\x0a\x09self assert: 16 sqrt equals: 4",
  70797. referencedClasses: [],
  70798. //>>excludeEnd("ide");
  70799. messageSends: ["assert:equals:", "sqrt"]
  70800. }),
  70801. $globals.NumberTest);
  70802. $core.addMethod(
  70803. $core.method({
  70804. selector: "testSquared",
  70805. protocol: 'tests',
  70806. fn: function (){
  70807. var self=this;
  70808. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70809. return $core.withContext(function($ctx1) {
  70810. //>>excludeEnd("ctx");
  70811. self._assert_equals_((4)._squared(),(16));
  70812. return self;
  70813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70814. }, function($ctx1) {$ctx1.fill(self,"testSquared",{},$globals.NumberTest)});
  70815. //>>excludeEnd("ctx");
  70816. },
  70817. //>>excludeStart("ide", pragmas.excludeIdeData);
  70818. args: [],
  70819. source: "testSquared\x0a\x09\x0a\x09self assert: 4 squared equals: 16",
  70820. referencedClasses: [],
  70821. //>>excludeEnd("ide");
  70822. messageSends: ["assert:equals:", "squared"]
  70823. }),
  70824. $globals.NumberTest);
  70825. $core.addMethod(
  70826. $core.method({
  70827. selector: "testTimesRepeat",
  70828. protocol: 'tests',
  70829. fn: function (){
  70830. var self=this;
  70831. var i;
  70832. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70833. return $core.withContext(function($ctx1) {
  70834. //>>excludeEnd("ctx");
  70835. i=(0);
  70836. (0)._timesRepeat_((function(){
  70837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70838. return $core.withContext(function($ctx2) {
  70839. //>>excludeEnd("ctx");
  70840. i=$recv(i).__plus((1));
  70841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70842. $ctx2.sendIdx["+"]=1;
  70843. //>>excludeEnd("ctx");
  70844. return i;
  70845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70846. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70847. //>>excludeEnd("ctx");
  70848. }));
  70849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70850. $ctx1.sendIdx["timesRepeat:"]=1;
  70851. //>>excludeEnd("ctx");
  70852. self._assert_equals_(i,(0));
  70853. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70854. $ctx1.sendIdx["assert:equals:"]=1;
  70855. //>>excludeEnd("ctx");
  70856. (5)._timesRepeat_((function(){
  70857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70858. return $core.withContext(function($ctx2) {
  70859. //>>excludeEnd("ctx");
  70860. i=$recv(i).__plus((1));
  70861. return i;
  70862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70863. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  70864. //>>excludeEnd("ctx");
  70865. }));
  70866. self._assert_equals_(i,(5));
  70867. return self;
  70868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70869. }, function($ctx1) {$ctx1.fill(self,"testTimesRepeat",{i:i},$globals.NumberTest)});
  70870. //>>excludeEnd("ctx");
  70871. },
  70872. //>>excludeStart("ide", pragmas.excludeIdeData);
  70873. args: [],
  70874. source: "testTimesRepeat\x0a\x09| i |\x0a\x0a\x09i := 0.\x0a\x090 timesRepeat: [ i := i + 1 ].\x0a\x09self assert: i equals: 0.\x0a\x0a\x095 timesRepeat: [ i := i + 1 ].\x0a\x09self assert: i equals: 5",
  70875. referencedClasses: [],
  70876. //>>excludeEnd("ide");
  70877. messageSends: ["timesRepeat:", "+", "assert:equals:"]
  70878. }),
  70879. $globals.NumberTest);
  70880. $core.addMethod(
  70881. $core.method({
  70882. selector: "testTo",
  70883. protocol: 'tests',
  70884. fn: function (){
  70885. var self=this;
  70886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70887. return $core.withContext(function($ctx1) {
  70888. //>>excludeEnd("ctx");
  70889. self._assert_equals_((1)._to_((5)),[(1), (2), (3), (4), (5)]);
  70890. return self;
  70891. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70892. }, function($ctx1) {$ctx1.fill(self,"testTo",{},$globals.NumberTest)});
  70893. //>>excludeEnd("ctx");
  70894. },
  70895. //>>excludeStart("ide", pragmas.excludeIdeData);
  70896. args: [],
  70897. source: "testTo\x0a\x09self assert: (1 to: 5) equals: #(1 2 3 4 5)",
  70898. referencedClasses: [],
  70899. //>>excludeEnd("ide");
  70900. messageSends: ["assert:equals:", "to:"]
  70901. }),
  70902. $globals.NumberTest);
  70903. $core.addMethod(
  70904. $core.method({
  70905. selector: "testToBy",
  70906. protocol: 'tests',
  70907. fn: function (){
  70908. var self=this;
  70909. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  70910. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70911. return $core.withContext(function($ctx1) {
  70912. //>>excludeEnd("ctx");
  70913. var $1;
  70914. $1=(0)._to_by_((6),(2));
  70915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70916. $ctx1.sendIdx["to:by:"]=1;
  70917. //>>excludeEnd("ctx");
  70918. self._assert_equals_($1,[(0), (2), (4), (6)]);
  70919. self._should_raise_((function(){
  70920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70921. return $core.withContext(function($ctx2) {
  70922. //>>excludeEnd("ctx");
  70923. return (1)._to_by_((4),(0));
  70924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70925. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  70926. //>>excludeEnd("ctx");
  70927. }),$Error());
  70928. return self;
  70929. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70930. }, function($ctx1) {$ctx1.fill(self,"testToBy",{},$globals.NumberTest)});
  70931. //>>excludeEnd("ctx");
  70932. },
  70933. //>>excludeStart("ide", pragmas.excludeIdeData);
  70934. args: [],
  70935. source: "testToBy\x0a\x09self assert: (0 to: 6 by: 2) equals: #(0 2 4 6).\x0a\x0a\x09self should: [ 1 to: 4 by: 0 ] raise: Error",
  70936. referencedClasses: ["Error"],
  70937. //>>excludeEnd("ide");
  70938. messageSends: ["assert:equals:", "to:by:", "should:raise:"]
  70939. }),
  70940. $globals.NumberTest);
  70941. $core.addMethod(
  70942. $core.method({
  70943. selector: "testTrigonometry",
  70944. protocol: 'tests',
  70945. fn: function (){
  70946. var self=this;
  70947. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70948. return $core.withContext(function($ctx1) {
  70949. //>>excludeEnd("ctx");
  70950. self._assert_equals_((0)._cos(),(1));
  70951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70952. $ctx1.sendIdx["assert:equals:"]=1;
  70953. //>>excludeEnd("ctx");
  70954. self._assert_equals_((0)._sin(),(0));
  70955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70956. $ctx1.sendIdx["assert:equals:"]=2;
  70957. //>>excludeEnd("ctx");
  70958. self._assert_equals_((0)._tan(),(0));
  70959. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70960. $ctx1.sendIdx["assert:equals:"]=3;
  70961. //>>excludeEnd("ctx");
  70962. self._assert_equals_((1)._arcCos(),(0));
  70963. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70964. $ctx1.sendIdx["assert:equals:"]=4;
  70965. //>>excludeEnd("ctx");
  70966. self._assert_equals_((0)._arcSin(),(0));
  70967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70968. $ctx1.sendIdx["assert:equals:"]=5;
  70969. //>>excludeEnd("ctx");
  70970. self._assert_equals_((0)._arcTan(),(0));
  70971. return self;
  70972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70973. }, function($ctx1) {$ctx1.fill(self,"testTrigonometry",{},$globals.NumberTest)});
  70974. //>>excludeEnd("ctx");
  70975. },
  70976. //>>excludeStart("ide", pragmas.excludeIdeData);
  70977. args: [],
  70978. source: "testTrigonometry\x0a\x09self assert: 0 cos equals: 1.\x0a\x09self assert: 0 sin equals: 0.\x0a\x09self assert: 0 tan equals: 0.\x0a\x09self assert: 1 arcCos equals: 0.\x0a\x09self assert: 0 arcSin equals: 0.\x0a\x09self assert: 0 arcTan equals: 0.",
  70979. referencedClasses: [],
  70980. //>>excludeEnd("ide");
  70981. messageSends: ["assert:equals:", "cos", "sin", "tan", "arcCos", "arcSin", "arcTan"]
  70982. }),
  70983. $globals.NumberTest);
  70984. $core.addMethod(
  70985. $core.method({
  70986. selector: "testTruncated",
  70987. protocol: 'tests',
  70988. fn: function (){
  70989. var self=this;
  70990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70991. return $core.withContext(function($ctx1) {
  70992. //>>excludeEnd("ctx");
  70993. var $1,$2;
  70994. $1=(3)._truncated();
  70995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70996. $ctx1.sendIdx["truncated"]=1;
  70997. //>>excludeEnd("ctx");
  70998. self._assert_equals_($1,(3));
  70999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71000. $ctx1.sendIdx["assert:equals:"]=1;
  71001. //>>excludeEnd("ctx");
  71002. $2=(3.212)._truncated();
  71003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71004. $ctx1.sendIdx["truncated"]=2;
  71005. //>>excludeEnd("ctx");
  71006. self._assert_equals_($2,(3));
  71007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71008. $ctx1.sendIdx["assert:equals:"]=2;
  71009. //>>excludeEnd("ctx");
  71010. self._assert_equals_((3.51)._truncated(),(3));
  71011. return self;
  71012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71013. }, function($ctx1) {$ctx1.fill(self,"testTruncated",{},$globals.NumberTest)});
  71014. //>>excludeEnd("ctx");
  71015. },
  71016. //>>excludeStart("ide", pragmas.excludeIdeData);
  71017. args: [],
  71018. source: "testTruncated\x0a\x09\x0a\x09self assert: 3 truncated equals: 3.\x0a\x09self assert: 3.212 truncated equals: 3.\x0a\x09self assert: 3.51 truncated equals: 3",
  71019. referencedClasses: [],
  71020. //>>excludeEnd("ide");
  71021. messageSends: ["assert:equals:", "truncated"]
  71022. }),
  71023. $globals.NumberTest);
  71024. $core.addClass('ObjectMock', $globals.Object, ['foo', 'bar'], 'Kernel-Tests');
  71025. //>>excludeStart("ide", pragmas.excludeIdeData);
  71026. $globals.ObjectMock.comment="ObjectMock is there only to perform tests on classes.";
  71027. //>>excludeEnd("ide");
  71028. $core.addMethod(
  71029. $core.method({
  71030. selector: "foo",
  71031. protocol: 'not yet classified',
  71032. fn: function (){
  71033. var self=this;
  71034. var $1;
  71035. $1=self["@foo"];
  71036. return $1;
  71037. },
  71038. //>>excludeStart("ide", pragmas.excludeIdeData);
  71039. args: [],
  71040. source: "foo\x0a\x09^ foo",
  71041. referencedClasses: [],
  71042. //>>excludeEnd("ide");
  71043. messageSends: []
  71044. }),
  71045. $globals.ObjectMock);
  71046. $core.addMethod(
  71047. $core.method({
  71048. selector: "foo:",
  71049. protocol: 'not yet classified',
  71050. fn: function (anObject){
  71051. var self=this;
  71052. self["@foo"]=anObject;
  71053. return self;
  71054. },
  71055. //>>excludeStart("ide", pragmas.excludeIdeData);
  71056. args: ["anObject"],
  71057. source: "foo: anObject\x0a\x09foo := anObject",
  71058. referencedClasses: [],
  71059. //>>excludeEnd("ide");
  71060. messageSends: []
  71061. }),
  71062. $globals.ObjectMock);
  71063. $core.addClass('ObjectTest', $globals.TestCase, [], 'Kernel-Tests');
  71064. $core.addMethod(
  71065. $core.method({
  71066. selector: "notDefined",
  71067. protocol: 'tests',
  71068. fn: function (){
  71069. var self=this;
  71070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71071. return $core.withContext(function($ctx1) {
  71072. //>>excludeEnd("ctx");
  71073. return void 0;;
  71074. return self;
  71075. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71076. }, function($ctx1) {$ctx1.fill(self,"notDefined",{},$globals.ObjectTest)});
  71077. //>>excludeEnd("ctx");
  71078. },
  71079. //>>excludeStart("ide", pragmas.excludeIdeData);
  71080. args: [],
  71081. source: "notDefined\x0a\x09<return void 0;>",
  71082. referencedClasses: [],
  71083. //>>excludeEnd("ide");
  71084. messageSends: []
  71085. }),
  71086. $globals.ObjectTest);
  71087. $core.addMethod(
  71088. $core.method({
  71089. selector: "testBasicAccess",
  71090. protocol: 'tests',
  71091. fn: function (){
  71092. var self=this;
  71093. var o;
  71094. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71095. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71096. return $core.withContext(function($ctx1) {
  71097. //>>excludeEnd("ctx");
  71098. var $1;
  71099. o=$recv($Object())._new();
  71100. $recv(o)._basicAt_put_("a",(1));
  71101. $1=$recv(o)._basicAt_("a");
  71102. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71103. $ctx1.sendIdx["basicAt:"]=1;
  71104. //>>excludeEnd("ctx");
  71105. self._assert_equals_($1,(1));
  71106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71107. $ctx1.sendIdx["assert:equals:"]=1;
  71108. //>>excludeEnd("ctx");
  71109. self._assert_equals_($recv(o)._basicAt_("b"),nil);
  71110. return self;
  71111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71112. }, function($ctx1) {$ctx1.fill(self,"testBasicAccess",{o:o},$globals.ObjectTest)});
  71113. //>>excludeEnd("ctx");
  71114. },
  71115. //>>excludeStart("ide", pragmas.excludeIdeData);
  71116. args: [],
  71117. source: "testBasicAccess\x0a\x09| o |\x0a\x09o := Object new.\x0a\x09o basicAt: 'a' put: 1.\x0a\x09self assert: (o basicAt: 'a') equals: 1.\x0a\x09self assert: (o basicAt: 'b') equals: nil",
  71118. referencedClasses: ["Object"],
  71119. //>>excludeEnd("ide");
  71120. messageSends: ["new", "basicAt:put:", "assert:equals:", "basicAt:"]
  71121. }),
  71122. $globals.ObjectTest);
  71123. $core.addMethod(
  71124. $core.method({
  71125. selector: "testBasicPerform",
  71126. protocol: 'tests',
  71127. fn: function (){
  71128. var self=this;
  71129. var o;
  71130. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71132. return $core.withContext(function($ctx1) {
  71133. //>>excludeEnd("ctx");
  71134. o=$recv($Object())._new();
  71135. $recv(o)._basicAt_put_("func",(function(){
  71136. return "hello";
  71137. }));
  71138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71139. $ctx1.sendIdx["basicAt:put:"]=1;
  71140. //>>excludeEnd("ctx");
  71141. $recv(o)._basicAt_put_("func2",(function(a){
  71142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71143. return $core.withContext(function($ctx2) {
  71144. //>>excludeEnd("ctx");
  71145. return $recv(a).__plus((1));
  71146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71147. }, function($ctx2) {$ctx2.fillBlock({a:a},$ctx1,2)});
  71148. //>>excludeEnd("ctx");
  71149. }));
  71150. self._assert_equals_($recv(o)._basicPerform_("func"),"hello");
  71151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71152. $ctx1.sendIdx["assert:equals:"]=1;
  71153. //>>excludeEnd("ctx");
  71154. self._assert_equals_($recv(o)._basicPerform_withArguments_("func2",[(3)]),(4));
  71155. return self;
  71156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71157. }, function($ctx1) {$ctx1.fill(self,"testBasicPerform",{o:o},$globals.ObjectTest)});
  71158. //>>excludeEnd("ctx");
  71159. },
  71160. //>>excludeStart("ide", pragmas.excludeIdeData);
  71161. args: [],
  71162. source: "testBasicPerform\x0a\x09| o |\x0a\x09o := Object new.\x0a\x09o basicAt: 'func' put: [ 'hello' ].\x0a\x09o basicAt: 'func2' put: [ :a | a + 1 ].\x0a\x0a\x09self assert: (o basicPerform: 'func') equals: 'hello'.\x0a\x09self assert: (o basicPerform: 'func2' withArguments: #(3)) equals: 4",
  71163. referencedClasses: ["Object"],
  71164. //>>excludeEnd("ide");
  71165. messageSends: ["new", "basicAt:put:", "+", "assert:equals:", "basicPerform:", "basicPerform:withArguments:"]
  71166. }),
  71167. $globals.ObjectTest);
  71168. $core.addMethod(
  71169. $core.method({
  71170. selector: "testDNU",
  71171. protocol: 'tests',
  71172. fn: function (){
  71173. var self=this;
  71174. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71175. function $MessageNotUnderstood(){return $globals.MessageNotUnderstood||(typeof MessageNotUnderstood=="undefined"?nil:MessageNotUnderstood)}
  71176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71177. return $core.withContext(function($ctx1) {
  71178. //>>excludeEnd("ctx");
  71179. self._should_raise_((function(){
  71180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71181. return $core.withContext(function($ctx2) {
  71182. //>>excludeEnd("ctx");
  71183. return $recv($recv($Object())._new())._foo();
  71184. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71185. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  71186. //>>excludeEnd("ctx");
  71187. }),$MessageNotUnderstood());
  71188. return self;
  71189. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71190. }, function($ctx1) {$ctx1.fill(self,"testDNU",{},$globals.ObjectTest)});
  71191. //>>excludeEnd("ctx");
  71192. },
  71193. //>>excludeStart("ide", pragmas.excludeIdeData);
  71194. args: [],
  71195. source: "testDNU\x0a\x09self should: [ Object new foo ] raise: MessageNotUnderstood",
  71196. referencedClasses: ["Object", "MessageNotUnderstood"],
  71197. //>>excludeEnd("ide");
  71198. messageSends: ["should:raise:", "foo", "new"]
  71199. }),
  71200. $globals.ObjectTest);
  71201. $core.addMethod(
  71202. $core.method({
  71203. selector: "testEquality",
  71204. protocol: 'tests',
  71205. fn: function (){
  71206. var self=this;
  71207. var o;
  71208. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71210. return $core.withContext(function($ctx1) {
  71211. //>>excludeEnd("ctx");
  71212. var $1,$2,$4,$3;
  71213. o=$recv($Object())._new();
  71214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71215. $ctx1.sendIdx["new"]=1;
  71216. //>>excludeEnd("ctx");
  71217. $1=$recv(o).__eq($recv($Object())._new());
  71218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71219. $ctx1.sendIdx["="]=1;
  71220. //>>excludeEnd("ctx");
  71221. self._deny_($1);
  71222. $2=$recv(o).__eq(o);
  71223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71224. $ctx1.sendIdx["="]=2;
  71225. //>>excludeEnd("ctx");
  71226. self._assert_($2);
  71227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71228. $ctx1.sendIdx["assert:"]=1;
  71229. //>>excludeEnd("ctx");
  71230. $4=$recv(o)._yourself();
  71231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71232. $ctx1.sendIdx["yourself"]=1;
  71233. //>>excludeEnd("ctx");
  71234. $3=$recv($4).__eq(o);
  71235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71236. $ctx1.sendIdx["="]=3;
  71237. //>>excludeEnd("ctx");
  71238. self._assert_($3);
  71239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71240. $ctx1.sendIdx["assert:"]=2;
  71241. //>>excludeEnd("ctx");
  71242. self._assert_($recv(o).__eq($recv(o)._yourself()));
  71243. return self;
  71244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71245. }, function($ctx1) {$ctx1.fill(self,"testEquality",{o:o},$globals.ObjectTest)});
  71246. //>>excludeEnd("ctx");
  71247. },
  71248. //>>excludeStart("ide", pragmas.excludeIdeData);
  71249. args: [],
  71250. source: "testEquality\x0a\x09| o |\x0a\x09o := Object new.\x0a\x09self deny: o = Object new.\x0a\x09self assert: (o = o).\x0a\x09self assert: (o yourself = o).\x0a\x09self assert: (o = o yourself)",
  71251. referencedClasses: ["Object"],
  71252. //>>excludeEnd("ide");
  71253. messageSends: ["new", "deny:", "=", "assert:", "yourself"]
  71254. }),
  71255. $globals.ObjectTest);
  71256. $core.addMethod(
  71257. $core.method({
  71258. selector: "testHalt",
  71259. protocol: 'tests',
  71260. fn: function (){
  71261. var self=this;
  71262. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71263. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  71264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71265. return $core.withContext(function($ctx1) {
  71266. //>>excludeEnd("ctx");
  71267. self._should_raise_((function(){
  71268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71269. return $core.withContext(function($ctx2) {
  71270. //>>excludeEnd("ctx");
  71271. return $recv($recv($Object())._new())._halt();
  71272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71273. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  71274. //>>excludeEnd("ctx");
  71275. }),$Error());
  71276. return self;
  71277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71278. }, function($ctx1) {$ctx1.fill(self,"testHalt",{},$globals.ObjectTest)});
  71279. //>>excludeEnd("ctx");
  71280. },
  71281. //>>excludeStart("ide", pragmas.excludeIdeData);
  71282. args: [],
  71283. source: "testHalt\x0a\x09self should: [ Object new halt ] raise: Error",
  71284. referencedClasses: ["Object", "Error"],
  71285. //>>excludeEnd("ide");
  71286. messageSends: ["should:raise:", "halt", "new"]
  71287. }),
  71288. $globals.ObjectTest);
  71289. $core.addMethod(
  71290. $core.method({
  71291. selector: "testIdentity",
  71292. protocol: 'tests',
  71293. fn: function (){
  71294. var self=this;
  71295. var o;
  71296. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71298. return $core.withContext(function($ctx1) {
  71299. //>>excludeEnd("ctx");
  71300. var $1,$2,$4,$3;
  71301. o=$recv($Object())._new();
  71302. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71303. $ctx1.sendIdx["new"]=1;
  71304. //>>excludeEnd("ctx");
  71305. $1=$recv(o).__eq_eq($recv($Object())._new());
  71306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71307. $ctx1.sendIdx["=="]=1;
  71308. //>>excludeEnd("ctx");
  71309. self._deny_($1);
  71310. $2=$recv(o).__eq_eq(o);
  71311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71312. $ctx1.sendIdx["=="]=2;
  71313. //>>excludeEnd("ctx");
  71314. self._assert_($2);
  71315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71316. $ctx1.sendIdx["assert:"]=1;
  71317. //>>excludeEnd("ctx");
  71318. $4=$recv(o)._yourself();
  71319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71320. $ctx1.sendIdx["yourself"]=1;
  71321. //>>excludeEnd("ctx");
  71322. $3=$recv($4).__eq_eq(o);
  71323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71324. $ctx1.sendIdx["=="]=3;
  71325. //>>excludeEnd("ctx");
  71326. self._assert_($3);
  71327. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71328. $ctx1.sendIdx["assert:"]=2;
  71329. //>>excludeEnd("ctx");
  71330. self._assert_($recv(o).__eq_eq($recv(o)._yourself()));
  71331. return self;
  71332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71333. }, function($ctx1) {$ctx1.fill(self,"testIdentity",{o:o},$globals.ObjectTest)});
  71334. //>>excludeEnd("ctx");
  71335. },
  71336. //>>excludeStart("ide", pragmas.excludeIdeData);
  71337. args: [],
  71338. source: "testIdentity\x0a\x09| o |\x0a\x09o := Object new.\x0a\x09self deny: o == Object new.\x0a\x09self assert: o == o.\x0a\x09self assert: o yourself == o.\x0a\x09self assert: o == o yourself",
  71339. referencedClasses: ["Object"],
  71340. //>>excludeEnd("ide");
  71341. messageSends: ["new", "deny:", "==", "assert:", "yourself"]
  71342. }),
  71343. $globals.ObjectTest);
  71344. $core.addMethod(
  71345. $core.method({
  71346. selector: "testIfNil",
  71347. protocol: 'tests',
  71348. fn: function (){
  71349. var self=this;
  71350. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71352. return $core.withContext(function($ctx1) {
  71353. //>>excludeEnd("ctx");
  71354. var $2,$1,$5,$4,$3,$7,$6,$9,$8,$11,$10,$receiver;
  71355. $2=$recv($Object())._new();
  71356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71357. $ctx1.sendIdx["new"]=1;
  71358. //>>excludeEnd("ctx");
  71359. $1=$recv($2)._isNil();
  71360. self._deny_($1);
  71361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71362. $ctx1.sendIdx["deny:"]=1;
  71363. //>>excludeEnd("ctx");
  71364. $5=$recv($Object())._new();
  71365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71366. $ctx1.sendIdx["new"]=2;
  71367. //>>excludeEnd("ctx");
  71368. if(($receiver = $5) == null || $receiver.isNil){
  71369. $4=true;
  71370. } else {
  71371. $4=$5;
  71372. };
  71373. $3=$recv($4).__eq(true);
  71374. self._deny_($3);
  71375. $7=$recv($Object())._new();
  71376. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71377. $ctx1.sendIdx["new"]=3;
  71378. //>>excludeEnd("ctx");
  71379. if(($receiver = $7) == null || $receiver.isNil){
  71380. $6=$7;
  71381. } else {
  71382. $6=true;
  71383. };
  71384. self._assert_equals_($6,true);
  71385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71386. $ctx1.sendIdx["assert:equals:"]=1;
  71387. //>>excludeEnd("ctx");
  71388. $9=$recv($Object())._new();
  71389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71390. $ctx1.sendIdx["new"]=4;
  71391. //>>excludeEnd("ctx");
  71392. if(($receiver = $9) == null || $receiver.isNil){
  71393. $8=false;
  71394. } else {
  71395. $8=true;
  71396. };
  71397. self._assert_equals_($8,true);
  71398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71399. $ctx1.sendIdx["assert:equals:"]=2;
  71400. //>>excludeEnd("ctx");
  71401. $11=$recv($Object())._new();
  71402. if(($receiver = $11) == null || $receiver.isNil){
  71403. $10=false;
  71404. } else {
  71405. $10=true;
  71406. };
  71407. self._assert_equals_($10,true);
  71408. return self;
  71409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71410. }, function($ctx1) {$ctx1.fill(self,"testIfNil",{},$globals.ObjectTest)});
  71411. //>>excludeEnd("ctx");
  71412. },
  71413. //>>excludeStart("ide", pragmas.excludeIdeData);
  71414. args: [],
  71415. source: "testIfNil\x0a\x09self deny: Object new isNil.\x0a\x09self deny: (Object new ifNil: [ true ]) = true.\x0a\x09self assert: (Object new ifNotNil: [ true ]) equals: true.\x0a\x0a\x09self assert: (Object new ifNil: [ false ] ifNotNil: [ true ]) equals: true.\x0a\x09self assert: (Object new ifNotNil: [ true ] ifNil: [ false ]) equals: true",
  71416. referencedClasses: ["Object"],
  71417. //>>excludeEnd("ide");
  71418. messageSends: ["deny:", "isNil", "new", "=", "ifNil:", "assert:equals:", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"]
  71419. }),
  71420. $globals.ObjectTest);
  71421. $core.addMethod(
  71422. $core.method({
  71423. selector: "testInstVars",
  71424. protocol: 'tests',
  71425. fn: function (){
  71426. var self=this;
  71427. var o;
  71428. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  71429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71430. return $core.withContext(function($ctx1) {
  71431. //>>excludeEnd("ctx");
  71432. var $1,$2;
  71433. o=$recv($ObjectMock())._new();
  71434. $1=$recv(o)._instVarAt_("foo");
  71435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71436. $ctx1.sendIdx["instVarAt:"]=1;
  71437. //>>excludeEnd("ctx");
  71438. self._assert_equals_($1,nil);
  71439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71440. $ctx1.sendIdx["assert:equals:"]=1;
  71441. //>>excludeEnd("ctx");
  71442. $recv(o)._instVarAt_put_("foo",(1));
  71443. $2=$recv(o)._instVarAt_("foo");
  71444. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71445. $ctx1.sendIdx["instVarAt:"]=2;
  71446. //>>excludeEnd("ctx");
  71447. self._assert_equals_($2,(1));
  71448. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71449. $ctx1.sendIdx["assert:equals:"]=2;
  71450. //>>excludeEnd("ctx");
  71451. self._assert_equals_($recv(o)._instVarAt_("foo"),(1));
  71452. return self;
  71453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71454. }, function($ctx1) {$ctx1.fill(self,"testInstVars",{o:o},$globals.ObjectTest)});
  71455. //>>excludeEnd("ctx");
  71456. },
  71457. //>>excludeStart("ide", pragmas.excludeIdeData);
  71458. args: [],
  71459. source: "testInstVars\x0a\x09| o |\x0a\x09o := ObjectMock new.\x0a\x09self assert: (o instVarAt: #foo) equals: nil.\x0a\x0a\x09o instVarAt: #foo put: 1.\x0a\x09self assert: (o instVarAt: #foo) equals: 1.\x0a\x09self assert: (o instVarAt: 'foo') equals: 1",
  71460. referencedClasses: ["ObjectMock"],
  71461. //>>excludeEnd("ide");
  71462. messageSends: ["new", "assert:equals:", "instVarAt:", "instVarAt:put:"]
  71463. }),
  71464. $globals.ObjectTest);
  71465. $core.addMethod(
  71466. $core.method({
  71467. selector: "testNilUndefined",
  71468. protocol: 'tests',
  71469. fn: function (){
  71470. var self=this;
  71471. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71472. return $core.withContext(function($ctx1) {
  71473. //>>excludeEnd("ctx");
  71474. self._assert_equals_(self._notDefined(),nil);
  71475. return self;
  71476. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71477. }, function($ctx1) {$ctx1.fill(self,"testNilUndefined",{},$globals.ObjectTest)});
  71478. //>>excludeEnd("ctx");
  71479. },
  71480. //>>excludeStart("ide", pragmas.excludeIdeData);
  71481. args: [],
  71482. source: "testNilUndefined\x0a\x09\x22nil in Smalltalk is the undefined object in JS\x22\x0a\x0a\x09self assert: self notDefined equals: nil",
  71483. referencedClasses: [],
  71484. //>>excludeEnd("ide");
  71485. messageSends: ["assert:equals:", "notDefined"]
  71486. }),
  71487. $globals.ObjectTest);
  71488. $core.addMethod(
  71489. $core.method({
  71490. selector: "testYourself",
  71491. protocol: 'tests',
  71492. fn: function (){
  71493. var self=this;
  71494. var o;
  71495. function $ObjectMock(){return $globals.ObjectMock||(typeof ObjectMock=="undefined"?nil:ObjectMock)}
  71496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71497. return $core.withContext(function($ctx1) {
  71498. //>>excludeEnd("ctx");
  71499. o=$recv($ObjectMock())._new();
  71500. self._assert_($recv($recv(o)._yourself()).__eq_eq(o));
  71501. return self;
  71502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71503. }, function($ctx1) {$ctx1.fill(self,"testYourself",{o:o},$globals.ObjectTest)});
  71504. //>>excludeEnd("ctx");
  71505. },
  71506. //>>excludeStart("ide", pragmas.excludeIdeData);
  71507. args: [],
  71508. source: "testYourself\x0a\x09| o |\x0a\x09o := ObjectMock new.\x0a\x09self assert: o yourself == o",
  71509. referencedClasses: ["ObjectMock"],
  71510. //>>excludeEnd("ide");
  71511. messageSends: ["new", "assert:", "==", "yourself"]
  71512. }),
  71513. $globals.ObjectTest);
  71514. $core.addMethod(
  71515. $core.method({
  71516. selector: "testidentityHash",
  71517. protocol: 'tests',
  71518. fn: function (){
  71519. var self=this;
  71520. var o1,o2;
  71521. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  71522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71523. return $core.withContext(function($ctx1) {
  71524. //>>excludeEnd("ctx");
  71525. var $2,$3,$1,$5,$4;
  71526. o1=$recv($Object())._new();
  71527. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71528. $ctx1.sendIdx["new"]=1;
  71529. //>>excludeEnd("ctx");
  71530. o2=$recv($Object())._new();
  71531. $2=$recv(o1)._identityHash();
  71532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71533. $ctx1.sendIdx["identityHash"]=1;
  71534. //>>excludeEnd("ctx");
  71535. $3=$recv(o1)._identityHash();
  71536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71537. $ctx1.sendIdx["identityHash"]=2;
  71538. //>>excludeEnd("ctx");
  71539. $1=$recv($2).__eq_eq($3);
  71540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71541. $ctx1.sendIdx["=="]=1;
  71542. //>>excludeEnd("ctx");
  71543. self._assert_($1);
  71544. $5=$recv(o1)._identityHash();
  71545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71546. $ctx1.sendIdx["identityHash"]=3;
  71547. //>>excludeEnd("ctx");
  71548. $4=$recv($5).__eq_eq($recv(o2)._identityHash());
  71549. self._deny_($4);
  71550. return self;
  71551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71552. }, function($ctx1) {$ctx1.fill(self,"testidentityHash",{o1:o1,o2:o2},$globals.ObjectTest)});
  71553. //>>excludeEnd("ctx");
  71554. },
  71555. //>>excludeStart("ide", pragmas.excludeIdeData);
  71556. args: [],
  71557. source: "testidentityHash\x0a\x09| o1 o2 |\x0a\x09\x0a\x09o1 := Object new.\x0a\x09o2 := Object new.\x0a\x0a\x09self assert: o1 identityHash == o1 identityHash.\x0a\x09self deny: o1 identityHash == o2 identityHash",
  71558. referencedClasses: ["Object"],
  71559. //>>excludeEnd("ide");
  71560. messageSends: ["new", "assert:", "==", "identityHash", "deny:"]
  71561. }),
  71562. $globals.ObjectTest);
  71563. $core.addClass('PointTest', $globals.TestCase, [], 'Kernel-Tests');
  71564. $core.addMethod(
  71565. $core.method({
  71566. selector: "testAccessing",
  71567. protocol: 'tests',
  71568. fn: function (){
  71569. var self=this;
  71570. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  71571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71572. return $core.withContext(function($ctx1) {
  71573. //>>excludeEnd("ctx");
  71574. var $2,$1,$3,$6,$5,$4;
  71575. $2=$recv($Point())._x_y_((3),(4));
  71576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71577. $ctx1.sendIdx["x:y:"]=1;
  71578. //>>excludeEnd("ctx");
  71579. $1=$recv($2)._x();
  71580. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71581. $ctx1.sendIdx["x"]=1;
  71582. //>>excludeEnd("ctx");
  71583. self._assert_equals_($1,(3));
  71584. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71585. $ctx1.sendIdx["assert:equals:"]=1;
  71586. //>>excludeEnd("ctx");
  71587. $3=$recv($recv($Point())._x_y_((3),(4)))._y();
  71588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71589. $ctx1.sendIdx["y"]=1;
  71590. //>>excludeEnd("ctx");
  71591. self._assert_equals_($3,(4));
  71592. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71593. $ctx1.sendIdx["assert:equals:"]=2;
  71594. //>>excludeEnd("ctx");
  71595. $6=$recv($Point())._new();
  71596. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71597. $ctx1.sendIdx["new"]=1;
  71598. //>>excludeEnd("ctx");
  71599. $5=$recv($6)._x_((3));
  71600. $4=$recv($5)._x();
  71601. self._assert_equals_($4,(3));
  71602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71603. $ctx1.sendIdx["assert:equals:"]=3;
  71604. //>>excludeEnd("ctx");
  71605. self._assert_equals_($recv($recv($recv($Point())._new())._y_((4)))._y(),(4));
  71606. return self;
  71607. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71608. }, function($ctx1) {$ctx1.fill(self,"testAccessing",{},$globals.PointTest)});
  71609. //>>excludeEnd("ctx");
  71610. },
  71611. //>>excludeStart("ide", pragmas.excludeIdeData);
  71612. args: [],
  71613. source: "testAccessing\x0a\x09self assert: (Point x: 3 y: 4) x equals: 3.\x0a\x09self assert: (Point x: 3 y: 4) y equals: 4.\x0a\x09self assert: (Point new x: 3) x equals: 3.\x0a\x09self assert: (Point new y: 4) y equals: 4",
  71614. referencedClasses: ["Point"],
  71615. //>>excludeEnd("ide");
  71616. messageSends: ["assert:equals:", "x", "x:y:", "y", "x:", "new", "y:"]
  71617. }),
  71618. $globals.PointTest);
  71619. $core.addMethod(
  71620. $core.method({
  71621. selector: "testArithmetic",
  71622. protocol: 'tests',
  71623. fn: function (){
  71624. var self=this;
  71625. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  71626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71627. return $core.withContext(function($ctx1) {
  71628. //>>excludeEnd("ctx");
  71629. var $2,$3,$1,$4,$6,$7,$5,$8,$10,$11,$9,$12,$14,$13;
  71630. $2=(3).__at((4));
  71631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71632. $ctx1.sendIdx["@"]=1;
  71633. //>>excludeEnd("ctx");
  71634. $3=(3).__at((4));
  71635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71636. $ctx1.sendIdx["@"]=2;
  71637. //>>excludeEnd("ctx");
  71638. $1=$recv($2).__star($3);
  71639. $4=$recv($Point())._x_y_((9),(16));
  71640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71641. $ctx1.sendIdx["x:y:"]=1;
  71642. //>>excludeEnd("ctx");
  71643. self._assert_equals_($1,$4);
  71644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71645. $ctx1.sendIdx["assert:equals:"]=1;
  71646. //>>excludeEnd("ctx");
  71647. $6=(3).__at((4));
  71648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71649. $ctx1.sendIdx["@"]=3;
  71650. //>>excludeEnd("ctx");
  71651. $7=(3).__at((4));
  71652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71653. $ctx1.sendIdx["@"]=4;
  71654. //>>excludeEnd("ctx");
  71655. $5=$recv($6).__plus($7);
  71656. $8=$recv($Point())._x_y_((6),(8));
  71657. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71658. $ctx1.sendIdx["x:y:"]=2;
  71659. //>>excludeEnd("ctx");
  71660. self._assert_equals_($5,$8);
  71661. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71662. $ctx1.sendIdx["assert:equals:"]=2;
  71663. //>>excludeEnd("ctx");
  71664. $10=(3).__at((4));
  71665. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71666. $ctx1.sendIdx["@"]=5;
  71667. //>>excludeEnd("ctx");
  71668. $11=(3).__at((4));
  71669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71670. $ctx1.sendIdx["@"]=6;
  71671. //>>excludeEnd("ctx");
  71672. $9=$recv($10).__minus($11);
  71673. $12=$recv($Point())._x_y_((0),(0));
  71674. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71675. $ctx1.sendIdx["x:y:"]=3;
  71676. //>>excludeEnd("ctx");
  71677. self._assert_equals_($9,$12);
  71678. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71679. $ctx1.sendIdx["assert:equals:"]=3;
  71680. //>>excludeEnd("ctx");
  71681. $14=(6).__at((8));
  71682. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71683. $ctx1.sendIdx["@"]=7;
  71684. //>>excludeEnd("ctx");
  71685. $13=$recv($14).__slash((3).__at((4)));
  71686. self._assert_equals_($13,$recv($Point())._x_y_((2),(2)));
  71687. return self;
  71688. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71689. }, function($ctx1) {$ctx1.fill(self,"testArithmetic",{},$globals.PointTest)});
  71690. //>>excludeEnd("ctx");
  71691. },
  71692. //>>excludeStart("ide", pragmas.excludeIdeData);
  71693. args: [],
  71694. source: "testArithmetic\x0a\x09self assert: 3@4 * (3@4 ) equals: (Point x: 9 y: 16).\x0a\x09self assert: 3@4 + (3@4 ) equals: (Point x: 6 y: 8).\x0a\x09self assert: 3@4 - (3@4 ) equals: (Point x: 0 y: 0).\x0a\x09self assert: 6@8 / (3@4 ) equals: (Point x: 2 y: 2)",
  71695. referencedClasses: ["Point"],
  71696. //>>excludeEnd("ide");
  71697. messageSends: ["assert:equals:", "*", "@", "x:y:", "+", "-", "/"]
  71698. }),
  71699. $globals.PointTest);
  71700. $core.addMethod(
  71701. $core.method({
  71702. selector: "testAt",
  71703. protocol: 'tests',
  71704. fn: function (){
  71705. var self=this;
  71706. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  71707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71708. return $core.withContext(function($ctx1) {
  71709. //>>excludeEnd("ctx");
  71710. self._assert_equals_((3).__at((4)),$recv($Point())._x_y_((3),(4)));
  71711. return self;
  71712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71713. }, function($ctx1) {$ctx1.fill(self,"testAt",{},$globals.PointTest)});
  71714. //>>excludeEnd("ctx");
  71715. },
  71716. //>>excludeStart("ide", pragmas.excludeIdeData);
  71717. args: [],
  71718. source: "testAt\x0a\x09self assert: 3@4 equals: (Point x: 3 y: 4)",
  71719. referencedClasses: ["Point"],
  71720. //>>excludeEnd("ide");
  71721. messageSends: ["assert:equals:", "@", "x:y:"]
  71722. }),
  71723. $globals.PointTest);
  71724. $core.addMethod(
  71725. $core.method({
  71726. selector: "testComparison",
  71727. protocol: 'tests',
  71728. fn: function (){
  71729. var self=this;
  71730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71731. return $core.withContext(function($ctx1) {
  71732. //>>excludeEnd("ctx");
  71733. var $2,$3,$1,$5,$6,$4,$8,$9,$7,$11,$12,$10,$14,$15,$13,$17,$18,$16,$20,$21,$19,$23,$22;
  71734. $2=(3).__at((4));
  71735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71736. $ctx1.sendIdx["@"]=1;
  71737. //>>excludeEnd("ctx");
  71738. $3=(4).__at((5));
  71739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71740. $ctx1.sendIdx["@"]=2;
  71741. //>>excludeEnd("ctx");
  71742. $1=$recv($2).__lt($3);
  71743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71744. $ctx1.sendIdx["<"]=1;
  71745. //>>excludeEnd("ctx");
  71746. self._assert_($1);
  71747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71748. $ctx1.sendIdx["assert:"]=1;
  71749. //>>excludeEnd("ctx");
  71750. $5=(3).__at((4));
  71751. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71752. $ctx1.sendIdx["@"]=3;
  71753. //>>excludeEnd("ctx");
  71754. $6=(4).__at((4));
  71755. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71756. $ctx1.sendIdx["@"]=4;
  71757. //>>excludeEnd("ctx");
  71758. $4=$recv($5).__lt($6);
  71759. self._deny_($4);
  71760. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71761. $ctx1.sendIdx["deny:"]=1;
  71762. //>>excludeEnd("ctx");
  71763. $8=(4).__at((5));
  71764. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71765. $ctx1.sendIdx["@"]=5;
  71766. //>>excludeEnd("ctx");
  71767. $9=(4).__at((5));
  71768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71769. $ctx1.sendIdx["@"]=6;
  71770. //>>excludeEnd("ctx");
  71771. $7=$recv($8).__lt_eq($9);
  71772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71773. $ctx1.sendIdx["<="]=1;
  71774. //>>excludeEnd("ctx");
  71775. self._assert_($7);
  71776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71777. $ctx1.sendIdx["assert:"]=2;
  71778. //>>excludeEnd("ctx");
  71779. $11=(4).__at((5));
  71780. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71781. $ctx1.sendIdx["@"]=7;
  71782. //>>excludeEnd("ctx");
  71783. $12=(3).__at((5));
  71784. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71785. $ctx1.sendIdx["@"]=8;
  71786. //>>excludeEnd("ctx");
  71787. $10=$recv($11).__lt_eq($12);
  71788. self._deny_($10);
  71789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71790. $ctx1.sendIdx["deny:"]=2;
  71791. //>>excludeEnd("ctx");
  71792. $14=(5).__at((6));
  71793. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71794. $ctx1.sendIdx["@"]=9;
  71795. //>>excludeEnd("ctx");
  71796. $15=(4).__at((5));
  71797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71798. $ctx1.sendIdx["@"]=10;
  71799. //>>excludeEnd("ctx");
  71800. $13=$recv($14).__gt($15);
  71801. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71802. $ctx1.sendIdx[">"]=1;
  71803. //>>excludeEnd("ctx");
  71804. self._assert_($13);
  71805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71806. $ctx1.sendIdx["assert:"]=3;
  71807. //>>excludeEnd("ctx");
  71808. $17=(5).__at((6));
  71809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71810. $ctx1.sendIdx["@"]=11;
  71811. //>>excludeEnd("ctx");
  71812. $18=(6).__at((6));
  71813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71814. $ctx1.sendIdx["@"]=12;
  71815. //>>excludeEnd("ctx");
  71816. $16=$recv($17).__gt($18);
  71817. self._deny_($16);
  71818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71819. $ctx1.sendIdx["deny:"]=3;
  71820. //>>excludeEnd("ctx");
  71821. $20=(4).__at((5));
  71822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71823. $ctx1.sendIdx["@"]=13;
  71824. //>>excludeEnd("ctx");
  71825. $21=(4).__at((5));
  71826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71827. $ctx1.sendIdx["@"]=14;
  71828. //>>excludeEnd("ctx");
  71829. $19=$recv($20).__gt_eq($21);
  71830. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71831. $ctx1.sendIdx[">="]=1;
  71832. //>>excludeEnd("ctx");
  71833. self._assert_($19);
  71834. $23=(4).__at((5));
  71835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71836. $ctx1.sendIdx["@"]=15;
  71837. //>>excludeEnd("ctx");
  71838. $22=$recv($23).__gt_eq((5).__at((5)));
  71839. self._deny_($22);
  71840. return self;
  71841. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71842. }, function($ctx1) {$ctx1.fill(self,"testComparison",{},$globals.PointTest)});
  71843. //>>excludeEnd("ctx");
  71844. },
  71845. //>>excludeStart("ide", pragmas.excludeIdeData);
  71846. args: [],
  71847. source: "testComparison\x0a\x09self assert: 3@4 < (4@5).\x0a\x09self deny: 3@4 < (4@4).\x0a\x09\x0a\x09self assert: 4@5 <= (4@5).\x0a\x09self deny: 4@5 <= (3@5).\x0a\x09\x0a\x09self assert: 5@6 > (4@5).\x0a\x09self deny: 5@6 > (6@6).\x0a\x09\x0a\x09self assert: 4@5 >= (4@5).\x0a\x09self deny: 4@5 >= (5@5)",
  71848. referencedClasses: [],
  71849. //>>excludeEnd("ide");
  71850. messageSends: ["assert:", "<", "@", "deny:", "<=", ">", ">="]
  71851. }),
  71852. $globals.PointTest);
  71853. $core.addMethod(
  71854. $core.method({
  71855. selector: "testEgality",
  71856. protocol: 'tests',
  71857. fn: function (){
  71858. var self=this;
  71859. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71860. return $core.withContext(function($ctx1) {
  71861. //>>excludeEnd("ctx");
  71862. var $2,$3,$1,$5,$4;
  71863. $2=(3).__at((4));
  71864. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71865. $ctx1.sendIdx["@"]=1;
  71866. //>>excludeEnd("ctx");
  71867. $3=(3).__at((4));
  71868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71869. $ctx1.sendIdx["@"]=2;
  71870. //>>excludeEnd("ctx");
  71871. $1=$recv($2).__eq($3);
  71872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71873. $ctx1.sendIdx["="]=1;
  71874. //>>excludeEnd("ctx");
  71875. self._assert_($1);
  71876. $5=(3).__at((5));
  71877. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71878. $ctx1.sendIdx["@"]=3;
  71879. //>>excludeEnd("ctx");
  71880. $4=$recv($5).__eq((3).__at((6)));
  71881. self._deny_($4);
  71882. return self;
  71883. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71884. }, function($ctx1) {$ctx1.fill(self,"testEgality",{},$globals.PointTest)});
  71885. //>>excludeEnd("ctx");
  71886. },
  71887. //>>excludeStart("ide", pragmas.excludeIdeData);
  71888. args: [],
  71889. source: "testEgality\x0a\x09self assert: (3@4 = (3@4)).\x0a\x09self deny: 3@5 = (3@6)",
  71890. referencedClasses: [],
  71891. //>>excludeEnd("ide");
  71892. messageSends: ["assert:", "=", "@", "deny:"]
  71893. }),
  71894. $globals.PointTest);
  71895. $core.addMethod(
  71896. $core.method({
  71897. selector: "testNew",
  71898. protocol: 'tests',
  71899. fn: function (){
  71900. var self=this;
  71901. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  71902. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71903. return $core.withContext(function($ctx1) {
  71904. //>>excludeEnd("ctx");
  71905. var $3,$2,$1,$7,$6,$5,$4,$10,$9,$8;
  71906. $3=$recv($Point())._new();
  71907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71908. $ctx1.sendIdx["new"]=1;
  71909. //>>excludeEnd("ctx");
  71910. $2=$recv($3)._x_((3));
  71911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71912. $ctx1.sendIdx["x:"]=1;
  71913. //>>excludeEnd("ctx");
  71914. $1=$recv($2)._y();
  71915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71916. $ctx1.sendIdx["y"]=1;
  71917. //>>excludeEnd("ctx");
  71918. self._assert_equals_($1,nil);
  71919. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71920. $ctx1.sendIdx["assert:equals:"]=1;
  71921. //>>excludeEnd("ctx");
  71922. $7=$recv($Point())._new();
  71923. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71924. $ctx1.sendIdx["new"]=2;
  71925. //>>excludeEnd("ctx");
  71926. $6=$recv($7)._x_((3));
  71927. $5=$recv($6)._x();
  71928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71929. $ctx1.sendIdx["x"]=1;
  71930. //>>excludeEnd("ctx");
  71931. $4=$recv($5).__eq((0));
  71932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71933. $ctx1.sendIdx["="]=1;
  71934. //>>excludeEnd("ctx");
  71935. self._deny_($4);
  71936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71937. $ctx1.sendIdx["deny:"]=1;
  71938. //>>excludeEnd("ctx");
  71939. $10=$recv($Point())._new();
  71940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71941. $ctx1.sendIdx["new"]=3;
  71942. //>>excludeEnd("ctx");
  71943. $9=$recv($10)._y_((4));
  71944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71945. $ctx1.sendIdx["y:"]=1;
  71946. //>>excludeEnd("ctx");
  71947. $8=$recv($9)._x();
  71948. self._assert_equals_($8,nil);
  71949. self._deny_($recv($recv($recv($recv($Point())._new())._y_((4)))._y()).__eq((0)));
  71950. return self;
  71951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71952. }, function($ctx1) {$ctx1.fill(self,"testNew",{},$globals.PointTest)});
  71953. //>>excludeEnd("ctx");
  71954. },
  71955. //>>excludeStart("ide", pragmas.excludeIdeData);
  71956. args: [],
  71957. source: "testNew\x0a\x0a\x09self assert: (Point new x: 3) y equals: nil.\x0a\x09self deny: (Point new x: 3) x = 0.\x0a\x09self assert: (Point new y: 4) x equals: nil.\x0a\x09self deny: (Point new y: 4) y = 0",
  71958. referencedClasses: ["Point"],
  71959. //>>excludeEnd("ide");
  71960. messageSends: ["assert:equals:", "y", "x:", "new", "deny:", "=", "x", "y:"]
  71961. }),
  71962. $globals.PointTest);
  71963. $core.addMethod(
  71964. $core.method({
  71965. selector: "testTranslateBy",
  71966. protocol: 'tests',
  71967. fn: function (){
  71968. var self=this;
  71969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71970. return $core.withContext(function($ctx1) {
  71971. //>>excludeEnd("ctx");
  71972. var $2,$3,$1,$4,$6,$8,$7,$5,$9,$11,$12,$10,$13,$15,$16,$14;
  71973. $2=(3).__at((3));
  71974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71975. $ctx1.sendIdx["@"]=1;
  71976. //>>excludeEnd("ctx");
  71977. $3=(0).__at((1));
  71978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71979. $ctx1.sendIdx["@"]=2;
  71980. //>>excludeEnd("ctx");
  71981. $1=$recv($2)._translateBy_($3);
  71982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71983. $ctx1.sendIdx["translateBy:"]=1;
  71984. //>>excludeEnd("ctx");
  71985. $4=(3).__at((4));
  71986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71987. $ctx1.sendIdx["@"]=3;
  71988. //>>excludeEnd("ctx");
  71989. self._assert_equals_($1,$4);
  71990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71991. $ctx1.sendIdx["assert:equals:"]=1;
  71992. //>>excludeEnd("ctx");
  71993. $6=(3).__at((3));
  71994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71995. $ctx1.sendIdx["@"]=4;
  71996. //>>excludeEnd("ctx");
  71997. $8=(1)._negated();
  71998. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  71999. $ctx1.sendIdx["negated"]=1;
  72000. //>>excludeEnd("ctx");
  72001. $7=(0).__at($8);
  72002. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72003. $ctx1.sendIdx["@"]=5;
  72004. //>>excludeEnd("ctx");
  72005. $5=$recv($6)._translateBy_($7);
  72006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72007. $ctx1.sendIdx["translateBy:"]=2;
  72008. //>>excludeEnd("ctx");
  72009. $9=(3).__at((2));
  72010. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72011. $ctx1.sendIdx["@"]=6;
  72012. //>>excludeEnd("ctx");
  72013. self._assert_equals_($5,$9);
  72014. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72015. $ctx1.sendIdx["assert:equals:"]=2;
  72016. //>>excludeEnd("ctx");
  72017. $11=(3).__at((3));
  72018. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72019. $ctx1.sendIdx["@"]=7;
  72020. //>>excludeEnd("ctx");
  72021. $12=(2).__at((3));
  72022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72023. $ctx1.sendIdx["@"]=8;
  72024. //>>excludeEnd("ctx");
  72025. $10=$recv($11)._translateBy_($12);
  72026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72027. $ctx1.sendIdx["translateBy:"]=3;
  72028. //>>excludeEnd("ctx");
  72029. $13=(5).__at((6));
  72030. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72031. $ctx1.sendIdx["@"]=9;
  72032. //>>excludeEnd("ctx");
  72033. self._assert_equals_($10,$13);
  72034. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72035. $ctx1.sendIdx["assert:equals:"]=3;
  72036. //>>excludeEnd("ctx");
  72037. $15=(3).__at((3));
  72038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72039. $ctx1.sendIdx["@"]=10;
  72040. //>>excludeEnd("ctx");
  72041. $16=$recv((3)._negated()).__at((0));
  72042. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72043. $ctx1.sendIdx["@"]=11;
  72044. //>>excludeEnd("ctx");
  72045. $14=$recv($15)._translateBy_($16);
  72046. self._assert_equals_($14,(0).__at((3)));
  72047. return self;
  72048. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72049. }, function($ctx1) {$ctx1.fill(self,"testTranslateBy",{},$globals.PointTest)});
  72050. //>>excludeEnd("ctx");
  72051. },
  72052. //>>excludeStart("ide", pragmas.excludeIdeData);
  72053. args: [],
  72054. source: "testTranslateBy\x0a\x09self assert: (3@3 translateBy: 0@1) equals: 3@4.\x0a\x09self assert: (3@3 translateBy: 0@1 negated) equals: 3@2.\x0a\x09self assert: (3@3 translateBy: 2@3) equals: 5@6.\x0a\x09self assert: (3@3 translateBy: 3 negated @0) equals: 0@3.",
  72055. referencedClasses: [],
  72056. //>>excludeEnd("ide");
  72057. messageSends: ["assert:equals:", "translateBy:", "@", "negated"]
  72058. }),
  72059. $globals.PointTest);
  72060. $core.addClass('QueueTest', $globals.TestCase, [], 'Kernel-Tests');
  72061. $core.addMethod(
  72062. $core.method({
  72063. selector: "testNextIfAbsent",
  72064. protocol: 'tests',
  72065. fn: function (){
  72066. var self=this;
  72067. var queue;
  72068. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  72069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72070. return $core.withContext(function($ctx1) {
  72071. //>>excludeEnd("ctx");
  72072. var $2,$1;
  72073. queue=$recv($Queue())._new();
  72074. $recv(queue)._nextPut_("index1");
  72075. $2=$recv(queue)._nextIfAbsent_("empty");
  72076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72077. $ctx1.sendIdx["nextIfAbsent:"]=1;
  72078. //>>excludeEnd("ctx");
  72079. $1=$recv($2).__eq("index1");
  72080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72081. $ctx1.sendIdx["="]=1;
  72082. //>>excludeEnd("ctx");
  72083. self._assert_($1);
  72084. self._deny_($recv($recv(queue)._nextIfAbsent_("empty")).__eq("index1"));
  72085. return self;
  72086. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72087. }, function($ctx1) {$ctx1.fill(self,"testNextIfAbsent",{queue:queue},$globals.QueueTest)});
  72088. //>>excludeEnd("ctx");
  72089. },
  72090. //>>excludeStart("ide", pragmas.excludeIdeData);
  72091. args: [],
  72092. source: "testNextIfAbsent\x0a\x09| queue |\x0a\x09queue := Queue new.\x0a\x09queue nextPut: 'index1'. \x0a\x0a\x09self assert: (queue nextIfAbsent: 'empty') = 'index1'.\x0a\x09self deny: (queue nextIfAbsent: 'empty') = 'index1'",
  72093. referencedClasses: ["Queue"],
  72094. //>>excludeEnd("ide");
  72095. messageSends: ["new", "nextPut:", "assert:", "=", "nextIfAbsent:", "deny:"]
  72096. }),
  72097. $globals.QueueTest);
  72098. $core.addMethod(
  72099. $core.method({
  72100. selector: "testQueueNext",
  72101. protocol: 'tests',
  72102. fn: function (){
  72103. var self=this;
  72104. var queue;
  72105. function $Queue(){return $globals.Queue||(typeof Queue=="undefined"?nil:Queue)}
  72106. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  72107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72108. return $core.withContext(function($ctx1) {
  72109. //>>excludeEnd("ctx");
  72110. var $1,$2,$4,$3,$6,$5;
  72111. queue=$recv($Queue())._new();
  72112. $1=queue;
  72113. $recv($1)._nextPut_("index1");
  72114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72115. $ctx1.sendIdx["nextPut:"]=1;
  72116. //>>excludeEnd("ctx");
  72117. $2=$recv($1)._nextPut_("index2");
  72118. $4=$recv(queue)._next();
  72119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72120. $ctx1.sendIdx["next"]=1;
  72121. //>>excludeEnd("ctx");
  72122. $3=$recv($4).__eq("index1");
  72123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72124. $ctx1.sendIdx["="]=1;
  72125. //>>excludeEnd("ctx");
  72126. self._assert_($3);
  72127. $6=$recv(queue)._next();
  72128. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72129. $ctx1.sendIdx["next"]=2;
  72130. //>>excludeEnd("ctx");
  72131. $5=$recv($6).__eq("index");
  72132. self._deny_($5);
  72133. self._should_raise_((function(){
  72134. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72135. return $core.withContext(function($ctx2) {
  72136. //>>excludeEnd("ctx");
  72137. return $recv(queue)._next();
  72138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72139. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72140. //>>excludeEnd("ctx");
  72141. }),$Error());
  72142. return self;
  72143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72144. }, function($ctx1) {$ctx1.fill(self,"testQueueNext",{queue:queue},$globals.QueueTest)});
  72145. //>>excludeEnd("ctx");
  72146. },
  72147. //>>excludeStart("ide", pragmas.excludeIdeData);
  72148. args: [],
  72149. source: "testQueueNext\x0a\x09| queue | \x0a\x09queue := Queue new.\x0a\x09queue \x0a\x09\x09nextPut: 'index1';\x0a\x09\x09nextPut: 'index2'.\x0a\x0a\x09self assert: queue next = 'index1'.\x0a\x09self deny: queue next = 'index'.\x0a\x09self should: [ queue next ] raise: Error",
  72150. referencedClasses: ["Queue", "Error"],
  72151. //>>excludeEnd("ide");
  72152. messageSends: ["new", "nextPut:", "assert:", "=", "next", "deny:", "should:raise:"]
  72153. }),
  72154. $globals.QueueTest);
  72155. $core.addClass('RandomTest', $globals.TestCase, [], 'Kernel-Tests');
  72156. $core.addMethod(
  72157. $core.method({
  72158. selector: "testAtRandomNumber",
  72159. protocol: 'tests',
  72160. fn: function (){
  72161. var self=this;
  72162. var val;
  72163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72164. return $core.withContext(function($ctx1) {
  72165. //>>excludeEnd("ctx");
  72166. (100)._timesRepeat_((function(){
  72167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72168. return $core.withContext(function($ctx2) {
  72169. //>>excludeEnd("ctx");
  72170. val=(10)._atRandom();
  72171. val;
  72172. self._assert_($recv(val).__gt((0)));
  72173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72174. $ctx2.sendIdx["assert:"]=1;
  72175. //>>excludeEnd("ctx");
  72176. return self._assert_($recv(val).__lt((11)));
  72177. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72178. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72179. //>>excludeEnd("ctx");
  72180. }));
  72181. return self;
  72182. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72183. }, function($ctx1) {$ctx1.fill(self,"testAtRandomNumber",{val:val},$globals.RandomTest)});
  72184. //>>excludeEnd("ctx");
  72185. },
  72186. //>>excludeStart("ide", pragmas.excludeIdeData);
  72187. args: [],
  72188. source: "testAtRandomNumber\x0a\x09|val|\x09\x0a\x0a\x09100 timesRepeat: [\x0a\x09\x09val := 10 atRandom.\x09\x0a\x09\x09self assert: (val > 0).\x0a\x09\x09self assert: (val <11)\x0a\x09]",
  72189. referencedClasses: [],
  72190. //>>excludeEnd("ide");
  72191. messageSends: ["timesRepeat:", "atRandom", "assert:", ">", "<"]
  72192. }),
  72193. $globals.RandomTest);
  72194. $core.addMethod(
  72195. $core.method({
  72196. selector: "testAtRandomSequenceableCollection",
  72197. protocol: 'tests',
  72198. fn: function (){
  72199. var self=this;
  72200. var val;
  72201. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72202. return $core.withContext(function($ctx1) {
  72203. //>>excludeEnd("ctx");
  72204. var $3,$4,$2,$1;
  72205. (100)._timesRepeat_((function(){
  72206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72207. return $core.withContext(function($ctx2) {
  72208. //>>excludeEnd("ctx");
  72209. val="abc"._atRandom();
  72210. val;
  72211. $3=$recv(val).__eq("a");
  72212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72213. $ctx2.sendIdx["="]=1;
  72214. //>>excludeEnd("ctx");
  72215. $4=$recv(val).__eq("b");
  72216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72217. $ctx2.sendIdx["="]=2;
  72218. //>>excludeEnd("ctx");
  72219. $2=$recv($3).__or($4);
  72220. $1=$recv($2).__or($recv(val).__eq("c"));
  72221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72222. $ctx2.sendIdx["|"]=1;
  72223. //>>excludeEnd("ctx");
  72224. return self._assert_($1);
  72225. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72226. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  72227. //>>excludeEnd("ctx");
  72228. }));
  72229. return self;
  72230. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72231. }, function($ctx1) {$ctx1.fill(self,"testAtRandomSequenceableCollection",{val:val},$globals.RandomTest)});
  72232. //>>excludeEnd("ctx");
  72233. },
  72234. //>>excludeStart("ide", pragmas.excludeIdeData);
  72235. args: [],
  72236. source: "testAtRandomSequenceableCollection\x0a\x09|val|\x0a\x09\x0a\x09100 timesRepeat: [\x0a\x09\x09val := 'abc' atRandom.\x0a\x09\x09self assert: ((val = 'a') | (val = 'b') | (val = 'c' )).\x0a\x09].",
  72237. referencedClasses: [],
  72238. //>>excludeEnd("ide");
  72239. messageSends: ["timesRepeat:", "atRandom", "assert:", "|", "="]
  72240. }),
  72241. $globals.RandomTest);
  72242. $core.addMethod(
  72243. $core.method({
  72244. selector: "textNext",
  72245. protocol: 'tests',
  72246. fn: function (){
  72247. var self=this;
  72248. function $Random(){return $globals.Random||(typeof Random=="undefined"?nil:Random)}
  72249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72250. return $core.withContext(function($ctx1) {
  72251. //>>excludeEnd("ctx");
  72252. var $1;
  72253. (10000)._timesRepeat_((function(){
  72254. var current,next;
  72255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72256. return $core.withContext(function($ctx2) {
  72257. //>>excludeEnd("ctx");
  72258. next=$recv($recv($Random())._new())._next();
  72259. next;
  72260. self._assert_($recv(next).__gt_eq((0)));
  72261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72262. $ctx2.sendIdx["assert:"]=1;
  72263. //>>excludeEnd("ctx");
  72264. self._assert_($recv(next).__lt((1)));
  72265. $1=$recv(current).__eq(next);
  72266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72267. $ctx2.sendIdx["="]=1;
  72268. //>>excludeEnd("ctx");
  72269. self._deny_($1);
  72270. return $recv(next).__eq(current);
  72271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72272. }, function($ctx2) {$ctx2.fillBlock({current:current,next:next},$ctx1,1)});
  72273. //>>excludeEnd("ctx");
  72274. }));
  72275. return self;
  72276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72277. }, function($ctx1) {$ctx1.fill(self,"textNext",{},$globals.RandomTest)});
  72278. //>>excludeEnd("ctx");
  72279. },
  72280. //>>excludeStart("ide", pragmas.excludeIdeData);
  72281. args: [],
  72282. source: "textNext\x0a\x0a\x0910000 timesRepeat: [\x0a\x09\x09\x09| current next |\x0a\x09\x09\x09next := Random new next.\x0a\x09\x09\x09self assert: (next >= 0).\x0a\x09\x09\x09self assert: (next < 1).\x0a\x09\x09\x09self deny: current = next.\x0a\x09\x09\x09next = current ]",
  72283. referencedClasses: ["Random"],
  72284. //>>excludeEnd("ide");
  72285. messageSends: ["timesRepeat:", "next", "new", "assert:", ">=", "<", "deny:", "="]
  72286. }),
  72287. $globals.RandomTest);
  72288. $core.addClass('StreamTest', $globals.TestCase, [], 'Kernel-Tests');
  72289. $core.addMethod(
  72290. $core.method({
  72291. selector: "collectionClass",
  72292. protocol: 'accessing',
  72293. fn: function (){
  72294. var self=this;
  72295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72296. return $core.withContext(function($ctx1) {
  72297. //>>excludeEnd("ctx");
  72298. var $1;
  72299. $1=$recv(self._class())._collectionClass();
  72300. return $1;
  72301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72302. }, function($ctx1) {$ctx1.fill(self,"collectionClass",{},$globals.StreamTest)});
  72303. //>>excludeEnd("ctx");
  72304. },
  72305. //>>excludeStart("ide", pragmas.excludeIdeData);
  72306. args: [],
  72307. source: "collectionClass\x0a\x09^ self class collectionClass",
  72308. referencedClasses: [],
  72309. //>>excludeEnd("ide");
  72310. messageSends: ["collectionClass", "class"]
  72311. }),
  72312. $globals.StreamTest);
  72313. $core.addMethod(
  72314. $core.method({
  72315. selector: "newCollection",
  72316. protocol: 'accessing',
  72317. fn: function (){
  72318. var self=this;
  72319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72320. return $core.withContext(function($ctx1) {
  72321. //>>excludeEnd("ctx");
  72322. var $1;
  72323. $1=$recv(self._collectionClass())._new();
  72324. return $1;
  72325. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72326. }, function($ctx1) {$ctx1.fill(self,"newCollection",{},$globals.StreamTest)});
  72327. //>>excludeEnd("ctx");
  72328. },
  72329. //>>excludeStart("ide", pragmas.excludeIdeData);
  72330. args: [],
  72331. source: "newCollection\x0a\x09^ self collectionClass new",
  72332. referencedClasses: [],
  72333. //>>excludeEnd("ide");
  72334. messageSends: ["new", "collectionClass"]
  72335. }),
  72336. $globals.StreamTest);
  72337. $core.addMethod(
  72338. $core.method({
  72339. selector: "newStream",
  72340. protocol: 'accessing',
  72341. fn: function (){
  72342. var self=this;
  72343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72344. return $core.withContext(function($ctx1) {
  72345. //>>excludeEnd("ctx");
  72346. var $1;
  72347. $1=$recv($recv(self._collectionClass())._new())._stream();
  72348. return $1;
  72349. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72350. }, function($ctx1) {$ctx1.fill(self,"newStream",{},$globals.StreamTest)});
  72351. //>>excludeEnd("ctx");
  72352. },
  72353. //>>excludeStart("ide", pragmas.excludeIdeData);
  72354. args: [],
  72355. source: "newStream\x0a\x09^ self collectionClass new stream",
  72356. referencedClasses: [],
  72357. //>>excludeEnd("ide");
  72358. messageSends: ["stream", "new", "collectionClass"]
  72359. }),
  72360. $globals.StreamTest);
  72361. $core.addMethod(
  72362. $core.method({
  72363. selector: "testAtStartAtEnd",
  72364. protocol: 'tests',
  72365. fn: function (){
  72366. var self=this;
  72367. var stream;
  72368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72369. return $core.withContext(function($ctx1) {
  72370. //>>excludeEnd("ctx");
  72371. var $1,$2,$3,$4;
  72372. stream=self._newStream();
  72373. $1=$recv(stream)._atStart();
  72374. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72375. $ctx1.sendIdx["atStart"]=1;
  72376. //>>excludeEnd("ctx");
  72377. self._assert_($1);
  72378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72379. $ctx1.sendIdx["assert:"]=1;
  72380. //>>excludeEnd("ctx");
  72381. $2=$recv(stream)._atEnd();
  72382. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72383. $ctx1.sendIdx["atEnd"]=1;
  72384. //>>excludeEnd("ctx");
  72385. self._assert_($2);
  72386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72387. $ctx1.sendIdx["assert:"]=2;
  72388. //>>excludeEnd("ctx");
  72389. $recv(stream)._nextPutAll_(self._newCollection());
  72390. $3=$recv(stream)._atEnd();
  72391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72392. $ctx1.sendIdx["atEnd"]=2;
  72393. //>>excludeEnd("ctx");
  72394. self._assert_($3);
  72395. $4=$recv(stream)._atStart();
  72396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72397. $ctx1.sendIdx["atStart"]=2;
  72398. //>>excludeEnd("ctx");
  72399. self._deny_($4);
  72400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72401. $ctx1.sendIdx["deny:"]=1;
  72402. //>>excludeEnd("ctx");
  72403. $recv(stream)._position_((1));
  72404. self._deny_($recv(stream)._atEnd());
  72405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72406. $ctx1.sendIdx["deny:"]=2;
  72407. //>>excludeEnd("ctx");
  72408. self._deny_($recv(stream)._atStart());
  72409. return self;
  72410. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72411. }, function($ctx1) {$ctx1.fill(self,"testAtStartAtEnd",{stream:stream},$globals.StreamTest)});
  72412. //>>excludeEnd("ctx");
  72413. },
  72414. //>>excludeStart("ide", pragmas.excludeIdeData);
  72415. args: [],
  72416. source: "testAtStartAtEnd\x0a\x09| stream |\x0a\x09\x0a\x09stream := self newStream.\x0a\x09self assert: stream atStart.\x0a\x09self assert: stream atEnd.\x0a\x09\x0a\x09stream nextPutAll: self newCollection.\x0a\x09self assert: stream atEnd.\x0a\x09self deny: stream atStart.\x0a\x09\x0a\x09stream position: 1.\x0a\x09self deny: stream atEnd.\x0a\x09self deny: stream atStart",
  72417. referencedClasses: [],
  72418. //>>excludeEnd("ide");
  72419. messageSends: ["newStream", "assert:", "atStart", "atEnd", "nextPutAll:", "newCollection", "deny:", "position:"]
  72420. }),
  72421. $globals.StreamTest);
  72422. $core.addMethod(
  72423. $core.method({
  72424. selector: "testContents",
  72425. protocol: 'tests',
  72426. fn: function (){
  72427. var self=this;
  72428. var stream;
  72429. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72430. return $core.withContext(function($ctx1) {
  72431. //>>excludeEnd("ctx");
  72432. var $1,$2;
  72433. stream=self._newStream();
  72434. $1=stream;
  72435. $2=self._newCollection();
  72436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72437. $ctx1.sendIdx["newCollection"]=1;
  72438. //>>excludeEnd("ctx");
  72439. $recv($1)._nextPutAll_($2);
  72440. self._assert_equals_($recv(stream)._contents(),self._newCollection());
  72441. return self;
  72442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72443. }, function($ctx1) {$ctx1.fill(self,"testContents",{stream:stream},$globals.StreamTest)});
  72444. //>>excludeEnd("ctx");
  72445. },
  72446. //>>excludeStart("ide", pragmas.excludeIdeData);
  72447. args: [],
  72448. source: "testContents\x0a\x09| stream |\x0a\x09\x0a\x09stream := self newStream.\x0a\x09stream nextPutAll: self newCollection.\x0a\x09\x0a\x09self assert: stream contents equals: self newCollection",
  72449. referencedClasses: [],
  72450. //>>excludeEnd("ide");
  72451. messageSends: ["newStream", "nextPutAll:", "newCollection", "assert:equals:", "contents"]
  72452. }),
  72453. $globals.StreamTest);
  72454. $core.addMethod(
  72455. $core.method({
  72456. selector: "testIsEmpty",
  72457. protocol: 'tests',
  72458. fn: function (){
  72459. var self=this;
  72460. var stream;
  72461. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72462. return $core.withContext(function($ctx1) {
  72463. //>>excludeEnd("ctx");
  72464. var $1;
  72465. stream=self._newStream();
  72466. $1=$recv(stream)._isEmpty();
  72467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72468. $ctx1.sendIdx["isEmpty"]=1;
  72469. //>>excludeEnd("ctx");
  72470. self._assert_($1);
  72471. $recv(stream)._nextPutAll_(self._newCollection());
  72472. self._deny_($recv(stream)._isEmpty());
  72473. return self;
  72474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72475. }, function($ctx1) {$ctx1.fill(self,"testIsEmpty",{stream:stream},$globals.StreamTest)});
  72476. //>>excludeEnd("ctx");
  72477. },
  72478. //>>excludeStart("ide", pragmas.excludeIdeData);
  72479. args: [],
  72480. source: "testIsEmpty\x0a\x09| stream |\x0a\x09\x0a\x09stream := self newStream.\x0a\x09self assert: stream isEmpty.\x0a\x09\x0a\x09stream nextPutAll: self newCollection.\x0a\x09self deny: stream isEmpty",
  72481. referencedClasses: [],
  72482. //>>excludeEnd("ide");
  72483. messageSends: ["newStream", "assert:", "isEmpty", "nextPutAll:", "newCollection", "deny:"]
  72484. }),
  72485. $globals.StreamTest);
  72486. $core.addMethod(
  72487. $core.method({
  72488. selector: "testPosition",
  72489. protocol: 'tests',
  72490. fn: function (){
  72491. var self=this;
  72492. var collection,stream;
  72493. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72494. return $core.withContext(function($ctx1) {
  72495. //>>excludeEnd("ctx");
  72496. var $1,$2,$3;
  72497. collection=self._newCollection();
  72498. stream=self._newStream();
  72499. $recv(stream)._nextPutAll_(collection);
  72500. $1=$recv(stream)._position();
  72501. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72502. $ctx1.sendIdx["position"]=1;
  72503. //>>excludeEnd("ctx");
  72504. self._assert_equals_($1,$recv(collection)._size());
  72505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72506. $ctx1.sendIdx["assert:equals:"]=1;
  72507. //>>excludeEnd("ctx");
  72508. $recv(stream)._position_((0));
  72509. $2=$recv(stream)._position();
  72510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72511. $ctx1.sendIdx["position"]=2;
  72512. //>>excludeEnd("ctx");
  72513. self._assert_equals_($2,(0));
  72514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72515. $ctx1.sendIdx["assert:equals:"]=2;
  72516. //>>excludeEnd("ctx");
  72517. $recv(stream)._next();
  72518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72519. $ctx1.sendIdx["next"]=1;
  72520. //>>excludeEnd("ctx");
  72521. $3=$recv(stream)._position();
  72522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72523. $ctx1.sendIdx["position"]=3;
  72524. //>>excludeEnd("ctx");
  72525. self._assert_equals_($3,(1));
  72526. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72527. $ctx1.sendIdx["assert:equals:"]=3;
  72528. //>>excludeEnd("ctx");
  72529. $recv(stream)._next();
  72530. self._assert_equals_($recv(stream)._position(),(2));
  72531. return self;
  72532. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72533. }, function($ctx1) {$ctx1.fill(self,"testPosition",{collection:collection,stream:stream},$globals.StreamTest)});
  72534. //>>excludeEnd("ctx");
  72535. },
  72536. //>>excludeStart("ide", pragmas.excludeIdeData);
  72537. args: [],
  72538. source: "testPosition\x0a\x09| collection stream |\x0a\x09\x0a\x09collection := self newCollection.\x0a\x09stream := self newStream.\x0a\x09\x0a\x09stream nextPutAll: collection.\x0a\x09self assert: stream position equals: collection size.\x0a\x09\x0a\x09stream position: 0.\x0a\x09self assert: stream position equals: 0.\x0a\x09\x0a\x09stream next.\x0a\x09self assert: stream position equals: 1.\x0a\x09\x0a\x09stream next.\x0a\x09self assert: stream position equals: 2",
  72539. referencedClasses: [],
  72540. //>>excludeEnd("ide");
  72541. messageSends: ["newCollection", "newStream", "nextPutAll:", "assert:equals:", "position", "size", "position:", "next"]
  72542. }),
  72543. $globals.StreamTest);
  72544. $core.addMethod(
  72545. $core.method({
  72546. selector: "testReading",
  72547. protocol: 'tests',
  72548. fn: function (){
  72549. var self=this;
  72550. var stream,collection;
  72551. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72552. return $core.withContext(function($ctx1) {
  72553. //>>excludeEnd("ctx");
  72554. var $1,$2,$3;
  72555. collection=self._newCollection();
  72556. stream=self._newStream();
  72557. $1=stream;
  72558. $recv($1)._nextPutAll_(collection);
  72559. $2=$recv($1)._position_((0));
  72560. $recv(collection)._do_((function(each){
  72561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72562. return $core.withContext(function($ctx2) {
  72563. //>>excludeEnd("ctx");
  72564. $3=$recv(stream)._next();
  72565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72566. $ctx2.sendIdx["next"]=1;
  72567. //>>excludeEnd("ctx");
  72568. return self._assert_equals_($3,each);
  72569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72570. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  72571. //>>excludeEnd("ctx");
  72572. }));
  72573. self._assert_($recv($recv(stream)._next())._isNil());
  72574. return self;
  72575. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72576. }, function($ctx1) {$ctx1.fill(self,"testReading",{stream:stream,collection:collection},$globals.StreamTest)});
  72577. //>>excludeEnd("ctx");
  72578. },
  72579. //>>excludeStart("ide", pragmas.excludeIdeData);
  72580. args: [],
  72581. source: "testReading\x0a\x09| stream collection |\x0a\x09\x0a\x09collection := self newCollection.\x0a\x09stream := self newStream.\x0a\x09\x0a\x09stream \x0a\x09\x09nextPutAll: collection;\x0a\x09\x09position: 0.\x0a\x09\x0a\x09collection do: [ :each |\x0a\x09\x09self assert: stream next equals: each ].\x0a\x09\x09\x0a\x09self assert: stream next isNil",
  72582. referencedClasses: [],
  72583. //>>excludeEnd("ide");
  72584. messageSends: ["newCollection", "newStream", "nextPutAll:", "position:", "do:", "assert:equals:", "next", "assert:", "isNil"]
  72585. }),
  72586. $globals.StreamTest);
  72587. $core.addMethod(
  72588. $core.method({
  72589. selector: "testStreamContents",
  72590. protocol: 'tests',
  72591. fn: function (){
  72592. var self=this;
  72593. return self;
  72594. },
  72595. //>>excludeStart("ide", pragmas.excludeIdeData);
  72596. args: [],
  72597. source: "testStreamContents",
  72598. referencedClasses: [],
  72599. //>>excludeEnd("ide");
  72600. messageSends: []
  72601. }),
  72602. $globals.StreamTest);
  72603. $core.addMethod(
  72604. $core.method({
  72605. selector: "testWrite",
  72606. protocol: 'tests',
  72607. fn: function (){
  72608. var self=this;
  72609. var stream,collection;
  72610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72611. return $core.withContext(function($ctx1) {
  72612. //>>excludeEnd("ctx");
  72613. collection=self._newCollection();
  72614. stream=self._newStream();
  72615. $recv(collection)._do_((function(each){
  72616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72617. return $core.withContext(function($ctx2) {
  72618. //>>excludeEnd("ctx");
  72619. return $recv(stream).__lt_lt(each);
  72620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72621. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  72622. //>>excludeEnd("ctx");
  72623. }));
  72624. self._assert_equals_($recv(stream)._contents(),collection);
  72625. return self;
  72626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72627. }, function($ctx1) {$ctx1.fill(self,"testWrite",{stream:stream,collection:collection},$globals.StreamTest)});
  72628. //>>excludeEnd("ctx");
  72629. },
  72630. //>>excludeStart("ide", pragmas.excludeIdeData);
  72631. args: [],
  72632. source: "testWrite\x0a\x09| stream collection |\x0a\x09\x0a\x09collection := self newCollection.\x0a\x09stream := self newStream.\x0a\x09\x0a\x09collection do: [ :each | stream << each ].\x0a\x09self assert: stream contents equals: collection",
  72633. referencedClasses: [],
  72634. //>>excludeEnd("ide");
  72635. messageSends: ["newCollection", "newStream", "do:", "<<", "assert:equals:", "contents"]
  72636. }),
  72637. $globals.StreamTest);
  72638. $core.addMethod(
  72639. $core.method({
  72640. selector: "testWriting",
  72641. protocol: 'tests',
  72642. fn: function (){
  72643. var self=this;
  72644. var stream,collection;
  72645. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72646. return $core.withContext(function($ctx1) {
  72647. //>>excludeEnd("ctx");
  72648. var $1;
  72649. collection=self._newCollection();
  72650. stream=self._newStream();
  72651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72652. $ctx1.sendIdx["newStream"]=1;
  72653. //>>excludeEnd("ctx");
  72654. $recv(collection)._do_((function(each){
  72655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72656. return $core.withContext(function($ctx2) {
  72657. //>>excludeEnd("ctx");
  72658. return $recv(stream)._nextPut_(each);
  72659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72660. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  72661. //>>excludeEnd("ctx");
  72662. }));
  72663. $1=$recv(stream)._contents();
  72664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72665. $ctx1.sendIdx["contents"]=1;
  72666. //>>excludeEnd("ctx");
  72667. self._assert_equals_($1,collection);
  72668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72669. $ctx1.sendIdx["assert:equals:"]=1;
  72670. //>>excludeEnd("ctx");
  72671. stream=self._newStream();
  72672. $recv(stream)._nextPutAll_(collection);
  72673. self._assert_equals_($recv(stream)._contents(),collection);
  72674. return self;
  72675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72676. }, function($ctx1) {$ctx1.fill(self,"testWriting",{stream:stream,collection:collection},$globals.StreamTest)});
  72677. //>>excludeEnd("ctx");
  72678. },
  72679. //>>excludeStart("ide", pragmas.excludeIdeData);
  72680. args: [],
  72681. source: "testWriting\x0a\x09| stream collection |\x0a\x09\x0a\x09collection := self newCollection.\x0a\x09stream := self newStream.\x0a\x09\x0a\x09collection do: [ :each | stream nextPut: each ].\x0a\x09self assert: stream contents equals: collection.\x0a\x09\x0a\x09stream := self newStream.\x0a\x09stream nextPutAll: collection.\x0a\x09self assert: stream contents equals: collection",
  72682. referencedClasses: [],
  72683. //>>excludeEnd("ide");
  72684. messageSends: ["newCollection", "newStream", "do:", "nextPut:", "assert:equals:", "contents", "nextPutAll:"]
  72685. }),
  72686. $globals.StreamTest);
  72687. $core.addMethod(
  72688. $core.method({
  72689. selector: "collectionClass",
  72690. protocol: 'accessing',
  72691. fn: function (){
  72692. var self=this;
  72693. return nil;
  72694. },
  72695. //>>excludeStart("ide", pragmas.excludeIdeData);
  72696. args: [],
  72697. source: "collectionClass\x0a\x09^ nil",
  72698. referencedClasses: [],
  72699. //>>excludeEnd("ide");
  72700. messageSends: []
  72701. }),
  72702. $globals.StreamTest.klass);
  72703. $core.addMethod(
  72704. $core.method({
  72705. selector: "isAbstract",
  72706. protocol: 'testing',
  72707. fn: function (){
  72708. var self=this;
  72709. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72710. return $core.withContext(function($ctx1) {
  72711. //>>excludeEnd("ctx");
  72712. var $1;
  72713. $1=$recv(self._collectionClass())._isNil();
  72714. return $1;
  72715. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72716. }, function($ctx1) {$ctx1.fill(self,"isAbstract",{},$globals.StreamTest.klass)});
  72717. //>>excludeEnd("ctx");
  72718. },
  72719. //>>excludeStart("ide", pragmas.excludeIdeData);
  72720. args: [],
  72721. source: "isAbstract\x0a\x09^ self collectionClass isNil",
  72722. referencedClasses: [],
  72723. //>>excludeEnd("ide");
  72724. messageSends: ["isNil", "collectionClass"]
  72725. }),
  72726. $globals.StreamTest.klass);
  72727. $core.addClass('ArrayStreamTest', $globals.StreamTest, [], 'Kernel-Tests');
  72728. $core.addMethod(
  72729. $core.method({
  72730. selector: "newCollection",
  72731. protocol: 'accessing',
  72732. fn: function (){
  72733. var self=this;
  72734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72735. return $core.withContext(function($ctx1) {
  72736. //>>excludeEnd("ctx");
  72737. var $1;
  72738. $1=[true,(1),(3).__at((4)),"foo"];
  72739. return $1;
  72740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72741. }, function($ctx1) {$ctx1.fill(self,"newCollection",{},$globals.ArrayStreamTest)});
  72742. //>>excludeEnd("ctx");
  72743. },
  72744. //>>excludeStart("ide", pragmas.excludeIdeData);
  72745. args: [],
  72746. source: "newCollection\x0a\x09^ { true. 1. 3@4. 'foo' }",
  72747. referencedClasses: [],
  72748. //>>excludeEnd("ide");
  72749. messageSends: ["@"]
  72750. }),
  72751. $globals.ArrayStreamTest);
  72752. $core.addMethod(
  72753. $core.method({
  72754. selector: "collectionClass",
  72755. protocol: 'accessing',
  72756. fn: function (){
  72757. var self=this;
  72758. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  72759. return $Array();
  72760. },
  72761. //>>excludeStart("ide", pragmas.excludeIdeData);
  72762. args: [],
  72763. source: "collectionClass\x0a\x09^ Array",
  72764. referencedClasses: ["Array"],
  72765. //>>excludeEnd("ide");
  72766. messageSends: []
  72767. }),
  72768. $globals.ArrayStreamTest.klass);
  72769. $core.addClass('StringStreamTest', $globals.StreamTest, [], 'Kernel-Tests');
  72770. $core.addMethod(
  72771. $core.method({
  72772. selector: "newCollection",
  72773. protocol: 'accessing',
  72774. fn: function (){
  72775. var self=this;
  72776. return "hello world";
  72777. },
  72778. //>>excludeStart("ide", pragmas.excludeIdeData);
  72779. args: [],
  72780. source: "newCollection\x0a\x09^ 'hello world'",
  72781. referencedClasses: [],
  72782. //>>excludeEnd("ide");
  72783. messageSends: []
  72784. }),
  72785. $globals.StringStreamTest);
  72786. $core.addMethod(
  72787. $core.method({
  72788. selector: "collectionClass",
  72789. protocol: 'accessing',
  72790. fn: function (){
  72791. var self=this;
  72792. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  72793. return $String();
  72794. },
  72795. //>>excludeStart("ide", pragmas.excludeIdeData);
  72796. args: [],
  72797. source: "collectionClass\x0a\x09^ String",
  72798. referencedClasses: ["String"],
  72799. //>>excludeEnd("ide");
  72800. messageSends: []
  72801. }),
  72802. $globals.StringStreamTest.klass);
  72803. $core.addClass('UndefinedTest', $globals.TestCase, [], 'Kernel-Tests');
  72804. $core.addMethod(
  72805. $core.method({
  72806. selector: "testCopying",
  72807. protocol: 'tests',
  72808. fn: function (){
  72809. var self=this;
  72810. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72811. return $core.withContext(function($ctx1) {
  72812. //>>excludeEnd("ctx");
  72813. self._assert_equals_(nil._copy(),nil);
  72814. return self;
  72815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72816. }, function($ctx1) {$ctx1.fill(self,"testCopying",{},$globals.UndefinedTest)});
  72817. //>>excludeEnd("ctx");
  72818. },
  72819. //>>excludeStart("ide", pragmas.excludeIdeData);
  72820. args: [],
  72821. source: "testCopying\x0a\x09self assert: nil copy equals: nil",
  72822. referencedClasses: [],
  72823. //>>excludeEnd("ide");
  72824. messageSends: ["assert:equals:", "copy"]
  72825. }),
  72826. $globals.UndefinedTest);
  72827. $core.addMethod(
  72828. $core.method({
  72829. selector: "testDeepCopy",
  72830. protocol: 'tests',
  72831. fn: function (){
  72832. var self=this;
  72833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72834. return $core.withContext(function($ctx1) {
  72835. //>>excludeEnd("ctx");
  72836. self._assert_($recv(nil._deepCopy()).__eq(nil));
  72837. return self;
  72838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72839. }, function($ctx1) {$ctx1.fill(self,"testDeepCopy",{},$globals.UndefinedTest)});
  72840. //>>excludeEnd("ctx");
  72841. },
  72842. //>>excludeStart("ide", pragmas.excludeIdeData);
  72843. args: [],
  72844. source: "testDeepCopy\x0a\x09self assert: nil deepCopy = nil",
  72845. referencedClasses: [],
  72846. //>>excludeEnd("ide");
  72847. messageSends: ["assert:", "=", "deepCopy"]
  72848. }),
  72849. $globals.UndefinedTest);
  72850. $core.addMethod(
  72851. $core.method({
  72852. selector: "testIfNil",
  72853. protocol: 'tests',
  72854. fn: function (){
  72855. var self=this;
  72856. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72857. return $core.withContext(function($ctx1) {
  72858. //>>excludeEnd("ctx");
  72859. var $1,$3,$2,$4,$6,$5,$receiver;
  72860. if(($receiver = nil) == null || $receiver.isNil){
  72861. $1=true;
  72862. } else {
  72863. $1=nil;
  72864. };
  72865. self._assert_equals_($1,true);
  72866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72867. $ctx1.sendIdx["assert:equals:"]=1;
  72868. //>>excludeEnd("ctx");
  72869. if(($receiver = nil) == null || $receiver.isNil){
  72870. $3=nil;
  72871. } else {
  72872. $3=true;
  72873. };
  72874. $2=$recv($3).__eq(true);
  72875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72876. $ctx1.sendIdx["="]=1;
  72877. //>>excludeEnd("ctx");
  72878. self._deny_($2);
  72879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72880. $ctx1.sendIdx["deny:"]=1;
  72881. //>>excludeEnd("ctx");
  72882. if(($receiver = nil) == null || $receiver.isNil){
  72883. $4=true;
  72884. } else {
  72885. $4=false;
  72886. };
  72887. self._assert_equals_($4,true);
  72888. if(($receiver = nil) == null || $receiver.isNil){
  72889. $6=false;
  72890. } else {
  72891. $6=true;
  72892. };
  72893. $5=$recv($6).__eq(true);
  72894. self._deny_($5);
  72895. return self;
  72896. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72897. }, function($ctx1) {$ctx1.fill(self,"testIfNil",{},$globals.UndefinedTest)});
  72898. //>>excludeEnd("ctx");
  72899. },
  72900. //>>excludeStart("ide", pragmas.excludeIdeData);
  72901. args: [],
  72902. source: "testIfNil\x0a\x09self assert: (nil ifNil: [ true ]) equals: true.\x0a\x09self deny: (nil ifNotNil: [ true ]) = true.\x0a\x09self assert: (nil ifNil: [ true ] ifNotNil: [ false ]) equals: true.\x0a\x09self deny: (nil ifNotNil: [ true ] ifNil: [ false ]) = true",
  72903. referencedClasses: [],
  72904. //>>excludeEnd("ide");
  72905. messageSends: ["assert:equals:", "ifNil:", "deny:", "=", "ifNotNil:", "ifNil:ifNotNil:", "ifNotNil:ifNil:"]
  72906. }),
  72907. $globals.UndefinedTest);
  72908. $core.addMethod(
  72909. $core.method({
  72910. selector: "testIsNil",
  72911. protocol: 'tests',
  72912. fn: function (){
  72913. var self=this;
  72914. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72915. return $core.withContext(function($ctx1) {
  72916. //>>excludeEnd("ctx");
  72917. self._assert_(nil._isNil());
  72918. self._deny_(nil._notNil());
  72919. return self;
  72920. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72921. }, function($ctx1) {$ctx1.fill(self,"testIsNil",{},$globals.UndefinedTest)});
  72922. //>>excludeEnd("ctx");
  72923. },
  72924. //>>excludeStart("ide", pragmas.excludeIdeData);
  72925. args: [],
  72926. source: "testIsNil\x0a\x09self assert: nil isNil.\x0a\x09self deny: nil notNil.",
  72927. referencedClasses: [],
  72928. //>>excludeEnd("ide");
  72929. messageSends: ["assert:", "isNil", "deny:", "notNil"]
  72930. }),
  72931. $globals.UndefinedTest);
  72932. });
  72933. define("amber_core/Compiler-Tests", ["amber/boot", "amber_core/SUnit"], function($boot){
  72934. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  72935. var smalltalk=$core,_st=$recv,globals=$globals;
  72936. $core.addPackage('Compiler-Tests');
  72937. $core.packages["Compiler-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  72938. $core.addClass('ASTParsingTest', $globals.TestCase, [], 'Compiler-Tests');
  72939. $core.addMethod(
  72940. $core.method({
  72941. selector: "analyze:forClass:",
  72942. protocol: 'convenience',
  72943. fn: function (aNode,aClass){
  72944. var self=this;
  72945. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  72946. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72947. return $core.withContext(function($ctx1) {
  72948. //>>excludeEnd("ctx");
  72949. $recv($recv($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
  72950. return aNode;
  72951. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72952. }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},$globals.ASTParsingTest)});
  72953. //>>excludeEnd("ctx");
  72954. },
  72955. //>>excludeStart("ide", pragmas.excludeIdeData);
  72956. args: ["aNode", "aClass"],
  72957. source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
  72958. referencedClasses: ["SemanticAnalyzer"],
  72959. //>>excludeEnd("ide");
  72960. messageSends: ["visit:", "on:"]
  72961. }),
  72962. $globals.ASTParsingTest);
  72963. $core.addMethod(
  72964. $core.method({
  72965. selector: "parse:",
  72966. protocol: 'parsing',
  72967. fn: function (aString){
  72968. var self=this;
  72969. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  72970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72971. return $core.withContext(function($ctx1) {
  72972. //>>excludeEnd("ctx");
  72973. var $1;
  72974. $1=$recv($Smalltalk())._parse_(aString);
  72975. return $1;
  72976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72977. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.ASTParsingTest)});
  72978. //>>excludeEnd("ctx");
  72979. },
  72980. //>>excludeStart("ide", pragmas.excludeIdeData);
  72981. args: ["aString"],
  72982. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  72983. referencedClasses: ["Smalltalk"],
  72984. //>>excludeEnd("ide");
  72985. messageSends: ["parse:"]
  72986. }),
  72987. $globals.ASTParsingTest);
  72988. $core.addMethod(
  72989. $core.method({
  72990. selector: "parse:forClass:",
  72991. protocol: 'parsing',
  72992. fn: function (aString,aClass){
  72993. var self=this;
  72994. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  72995. return $core.withContext(function($ctx1) {
  72996. //>>excludeEnd("ctx");
  72997. var $1;
  72998. $1=self._analyze_forClass_(self._parse_(aString),aClass);
  72999. return $1;
  73000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73001. }, function($ctx1) {$ctx1.fill(self,"parse:forClass:",{aString:aString,aClass:aClass},$globals.ASTParsingTest)});
  73002. //>>excludeEnd("ctx");
  73003. },
  73004. //>>excludeStart("ide", pragmas.excludeIdeData);
  73005. args: ["aString", "aClass"],
  73006. source: "parse: aString forClass: aClass\x0a\x09^ self analyze: (self parse: aString) forClass: aClass",
  73007. referencedClasses: [],
  73008. //>>excludeEnd("ide");
  73009. messageSends: ["analyze:forClass:", "parse:"]
  73010. }),
  73011. $globals.ASTParsingTest);
  73012. $core.addClass('ASTPCNodeVisitorTest', $globals.ASTParsingTest, [], 'Compiler-Tests');
  73013. $core.addMethod(
  73014. $core.method({
  73015. selector: "astPCNodeVisitor",
  73016. protocol: 'factory',
  73017. fn: function (){
  73018. var self=this;
  73019. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  73020. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  73021. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73022. return $core.withContext(function($ctx1) {
  73023. //>>excludeEnd("ctx");
  73024. var $2,$3,$4,$5,$1;
  73025. $2=$recv($ASTPCNodeVisitor())._new();
  73026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73027. $ctx1.sendIdx["new"]=1;
  73028. //>>excludeEnd("ctx");
  73029. $3=$2;
  73030. $4=$recv($recv($AIContext())._new())._yourself();
  73031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73032. $ctx1.sendIdx["yourself"]=1;
  73033. //>>excludeEnd("ctx");
  73034. $recv($3)._context_($4);
  73035. $5=$recv($2)._yourself();
  73036. $1=$5;
  73037. return $1;
  73038. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73039. }, function($ctx1) {$ctx1.fill(self,"astPCNodeVisitor",{},$globals.ASTPCNodeVisitorTest)});
  73040. //>>excludeEnd("ctx");
  73041. },
  73042. //>>excludeStart("ide", pragmas.excludeIdeData);
  73043. args: [],
  73044. source: "astPCNodeVisitor\x0a\x09^ ASTPCNodeVisitor new\x0a\x09\x09context: (AIContext new\x0a\x09\x09\x09yourself);\x0a\x09\x09yourself",
  73045. referencedClasses: ["ASTPCNodeVisitor", "AIContext"],
  73046. //>>excludeEnd("ide");
  73047. messageSends: ["context:", "new", "yourself"]
  73048. }),
  73049. $globals.ASTPCNodeVisitorTest);
  73050. $core.addMethod(
  73051. $core.method({
  73052. selector: "astPCNodeVisitorForSelector:",
  73053. protocol: 'factory',
  73054. fn: function (aString){
  73055. var self=this;
  73056. function $ASTPCNodeVisitor(){return $globals.ASTPCNodeVisitor||(typeof ASTPCNodeVisitor=="undefined"?nil:ASTPCNodeVisitor)}
  73057. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  73058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73059. return $core.withContext(function($ctx1) {
  73060. //>>excludeEnd("ctx");
  73061. var $2,$3,$4,$5,$1;
  73062. $2=$recv($ASTPCNodeVisitor())._new();
  73063. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73064. $ctx1.sendIdx["new"]=1;
  73065. //>>excludeEnd("ctx");
  73066. $recv($2)._selector_(aString);
  73067. $3=$2;
  73068. $4=$recv($recv($AIContext())._new())._yourself();
  73069. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73070. $ctx1.sendIdx["yourself"]=1;
  73071. //>>excludeEnd("ctx");
  73072. $recv($3)._context_($4);
  73073. $5=$recv($2)._yourself();
  73074. $1=$5;
  73075. return $1;
  73076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73077. }, function($ctx1) {$ctx1.fill(self,"astPCNodeVisitorForSelector:",{aString:aString},$globals.ASTPCNodeVisitorTest)});
  73078. //>>excludeEnd("ctx");
  73079. },
  73080. //>>excludeStart("ide", pragmas.excludeIdeData);
  73081. args: ["aString"],
  73082. source: "astPCNodeVisitorForSelector: aString\x0a\x09^ ASTPCNodeVisitor new\x0a\x09\x09selector: aString;\x0a\x09\x09context: (AIContext new\x0a\x09\x09\x09yourself);\x0a\x09\x09yourself",
  73083. referencedClasses: ["ASTPCNodeVisitor", "AIContext"],
  73084. //>>excludeEnd("ide");
  73085. messageSends: ["selector:", "new", "context:", "yourself"]
  73086. }),
  73087. $globals.ASTPCNodeVisitorTest);
  73088. $core.addMethod(
  73089. $core.method({
  73090. selector: "testJSStatementNode",
  73091. protocol: 'tests',
  73092. fn: function (){
  73093. var self=this;
  73094. var ast,visitor;
  73095. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73096. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73097. return $core.withContext(function($ctx1) {
  73098. //>>excludeEnd("ctx");
  73099. var $1,$2;
  73100. ast=self._parse_forClass_("foo <consolee.log(1)>",$Object());
  73101. $1=self._astPCNodeVisitor();
  73102. $recv($1)._visit_(ast);
  73103. $2=$recv($1)._currentNode();
  73104. self._assert_($recv($2)._isJSStatementNode());
  73105. return self;
  73106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73107. }, function($ctx1) {$ctx1.fill(self,"testJSStatementNode",{ast:ast,visitor:visitor},$globals.ASTPCNodeVisitorTest)});
  73108. //>>excludeEnd("ctx");
  73109. },
  73110. //>>excludeStart("ide", pragmas.excludeIdeData);
  73111. args: [],
  73112. source: "testJSStatementNode\x0a\x09| ast visitor |\x0a\x09\x0a\x09ast := self parse: 'foo <consolee.log(1)>' forClass: Object.\x0a\x09self assert: (self astPCNodeVisitor\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) isJSStatementNode",
  73113. referencedClasses: ["Object"],
  73114. //>>excludeEnd("ide");
  73115. messageSends: ["parse:forClass:", "assert:", "isJSStatementNode", "visit:", "astPCNodeVisitor", "currentNode"]
  73116. }),
  73117. $globals.ASTPCNodeVisitorTest);
  73118. $core.addMethod(
  73119. $core.method({
  73120. selector: "testMessageSend",
  73121. protocol: 'tests',
  73122. fn: function (){
  73123. var self=this;
  73124. var ast;
  73125. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73126. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73127. return $core.withContext(function($ctx1) {
  73128. //>>excludeEnd("ctx");
  73129. var $1,$2;
  73130. ast=self._parse_forClass_("foo self asString yourself. ^ self asBoolean",$Object());
  73131. $1=self._astPCNodeVisitorForSelector_("yourself");
  73132. $recv($1)._visit_(ast);
  73133. $2=$recv($1)._currentNode();
  73134. self._assert_equals_($recv($2)._selector(),"yourself");
  73135. return self;
  73136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73137. }, function($ctx1) {$ctx1.fill(self,"testMessageSend",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  73138. //>>excludeEnd("ctx");
  73139. },
  73140. //>>excludeStart("ide", pragmas.excludeIdeData);
  73141. args: [],
  73142. source: "testMessageSend\x0a\x09| ast |\x0a\x09\x0a\x09ast := self parse: 'foo self asString yourself. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'yourself')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'yourself'",
  73143. referencedClasses: ["Object"],
  73144. //>>excludeEnd("ide");
  73145. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  73146. }),
  73147. $globals.ASTPCNodeVisitorTest);
  73148. $core.addMethod(
  73149. $core.method({
  73150. selector: "testMessageSendWithBlocks",
  73151. protocol: 'tests',
  73152. fn: function (){
  73153. var self=this;
  73154. var ast;
  73155. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73157. return $core.withContext(function($ctx1) {
  73158. //>>excludeEnd("ctx");
  73159. var $1,$2;
  73160. ast=self._parse_forClass_("foo true ifTrue: [ [ self asString yourself ] value. ]. ^ self asBoolean",$Object());
  73161. $1=self._astPCNodeVisitorForSelector_("yourself");
  73162. $recv($1)._visit_(ast);
  73163. $2=$recv($1)._currentNode();
  73164. self._assert_equals_($recv($2)._selector(),"yourself");
  73165. return self;
  73166. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73167. }, function($ctx1) {$ctx1.fill(self,"testMessageSendWithBlocks",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  73168. //>>excludeEnd("ctx");
  73169. },
  73170. //>>excludeStart("ide", pragmas.excludeIdeData);
  73171. args: [],
  73172. source: "testMessageSendWithBlocks\x0a\x09| ast |\x0a\x09\x0a\x09ast := self parse: 'foo true ifTrue: [ [ self asString yourself ] value. ]. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'yourself')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'yourself'",
  73173. referencedClasses: ["Object"],
  73174. //>>excludeEnd("ide");
  73175. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  73176. }),
  73177. $globals.ASTPCNodeVisitorTest);
  73178. $core.addMethod(
  73179. $core.method({
  73180. selector: "testMessageSendWithInlining",
  73181. protocol: 'tests',
  73182. fn: function (){
  73183. var self=this;
  73184. var ast;
  73185. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73187. return $core.withContext(function($ctx1) {
  73188. //>>excludeEnd("ctx");
  73189. var $3,$4,$2,$1,$5,$6;
  73190. ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
  73191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73192. $ctx1.sendIdx["parse:forClass:"]=1;
  73193. //>>excludeEnd("ctx");
  73194. $3=self._astPCNodeVisitorForSelector_("yourself");
  73195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73196. $ctx1.sendIdx["astPCNodeVisitorForSelector:"]=1;
  73197. //>>excludeEnd("ctx");
  73198. $recv($3)._visit_(ast);
  73199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73200. $ctx1.sendIdx["visit:"]=1;
  73201. //>>excludeEnd("ctx");
  73202. $4=$recv($3)._currentNode();
  73203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73204. $ctx1.sendIdx["currentNode"]=1;
  73205. //>>excludeEnd("ctx");
  73206. $2=$4;
  73207. $1=$recv($2)._selector();
  73208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73209. $ctx1.sendIdx["selector"]=1;
  73210. //>>excludeEnd("ctx");
  73211. self._assert_equals_($1,"yourself");
  73212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73213. $ctx1.sendIdx["assert:equals:"]=1;
  73214. //>>excludeEnd("ctx");
  73215. ast=self._parse_forClass_("foo true ifTrue: [ self asString yourself ]. ^ self asBoolean",$Object());
  73216. $5=self._astPCNodeVisitorForSelector_("asBoolean");
  73217. $recv($5)._visit_(ast);
  73218. $6=$recv($5)._currentNode();
  73219. self._assert_equals_($recv($6)._selector(),"asBoolean");
  73220. return self;
  73221. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73222. }, function($ctx1) {$ctx1.fill(self,"testMessageSendWithInlining",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  73223. //>>excludeEnd("ctx");
  73224. },
  73225. //>>excludeStart("ide", pragmas.excludeIdeData);
  73226. args: [],
  73227. source: "testMessageSendWithInlining\x0a\x09| ast |\x0a\x09\x0a\x09ast := self parse: 'foo true ifTrue: [ self asString yourself ]. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'yourself')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'yourself'.\x0a\x09\x09\x0a\x09ast := self parse: 'foo true ifTrue: [ self asString yourself ]. ^ self asBoolean' forClass: Object.\x0a\x09self assert: ((self astPCNodeVisitorForSelector: 'asBoolean')\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) selector equals: 'asBoolean'",
  73228. referencedClasses: ["Object"],
  73229. //>>excludeEnd("ide");
  73230. messageSends: ["parse:forClass:", "assert:equals:", "selector", "visit:", "astPCNodeVisitorForSelector:", "currentNode"]
  73231. }),
  73232. $globals.ASTPCNodeVisitorTest);
  73233. $core.addMethod(
  73234. $core.method({
  73235. selector: "testNoMessageSend",
  73236. protocol: 'tests',
  73237. fn: function (){
  73238. var self=this;
  73239. var ast;
  73240. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73241. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73242. return $core.withContext(function($ctx1) {
  73243. //>>excludeEnd("ctx");
  73244. var $1,$2;
  73245. ast=self._parse_forClass_("foo ^ self",$Object());
  73246. $1=self._astPCNodeVisitor();
  73247. $recv($1)._visit_(ast);
  73248. $2=$recv($1)._currentNode();
  73249. self._assert_($recv($2)._isNil());
  73250. return self;
  73251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73252. }, function($ctx1) {$ctx1.fill(self,"testNoMessageSend",{ast:ast},$globals.ASTPCNodeVisitorTest)});
  73253. //>>excludeEnd("ctx");
  73254. },
  73255. //>>excludeStart("ide", pragmas.excludeIdeData);
  73256. args: [],
  73257. source: "testNoMessageSend\x0a\x09| ast |\x0a\x09\x0a\x09ast := self parse: 'foo ^ self' forClass: Object.\x0a\x09self assert: (self astPCNodeVisitor\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) isNil",
  73258. referencedClasses: ["Object"],
  73259. //>>excludeEnd("ide");
  73260. messageSends: ["parse:forClass:", "assert:", "isNil", "visit:", "astPCNodeVisitor", "currentNode"]
  73261. }),
  73262. $globals.ASTPCNodeVisitorTest);
  73263. $core.addMethod(
  73264. $core.method({
  73265. selector: "testPC",
  73266. protocol: 'tests',
  73267. fn: function (){
  73268. var self=this;
  73269. var ast,visitor;
  73270. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  73271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73272. return $core.withContext(function($ctx1) {
  73273. //>>excludeEnd("ctx");
  73274. var $1,$2;
  73275. ast=self._parse_forClass_("foo <console.log(1)>",$Object());
  73276. $1=self._astPCNodeVisitor();
  73277. $recv($1)._visit_(ast);
  73278. $2=$recv($1)._currentNode();
  73279. self._assert_($recv($2)._isJSStatementNode());
  73280. return self;
  73281. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73282. }, function($ctx1) {$ctx1.fill(self,"testPC",{ast:ast,visitor:visitor},$globals.ASTPCNodeVisitorTest)});
  73283. //>>excludeEnd("ctx");
  73284. },
  73285. //>>excludeStart("ide", pragmas.excludeIdeData);
  73286. args: [],
  73287. source: "testPC\x0a\x09| ast visitor |\x0a\x09\x0a\x09ast := self parse: 'foo <console.log(1)>' forClass: Object.\x0a\x09self assert: (self astPCNodeVisitor\x0a\x09\x09visit: ast;\x0a\x09\x09currentNode) isJSStatementNode",
  73288. referencedClasses: ["Object"],
  73289. //>>excludeEnd("ide");
  73290. messageSends: ["parse:forClass:", "assert:", "isJSStatementNode", "visit:", "astPCNodeVisitor", "currentNode"]
  73291. }),
  73292. $globals.ASTPCNodeVisitorTest);
  73293. $core.addClass('ASTPositionTest', $globals.ASTParsingTest, [], 'Compiler-Tests');
  73294. $core.addMethod(
  73295. $core.method({
  73296. selector: "testNodeAtPosition",
  73297. protocol: 'tests',
  73298. fn: function (){
  73299. var self=this;
  73300. var node;
  73301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73302. return $core.withContext(function($ctx1) {
  73303. //>>excludeEnd("ctx");
  73304. var $3,$4,$2,$1,$7,$8,$6,$5;
  73305. node=self._parse_("yourself\x0a\x09^ self");
  73306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73307. $ctx1.sendIdx["parse:"]=1;
  73308. //>>excludeEnd("ctx");
  73309. $3=node;
  73310. $4=(2).__at((4));
  73311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73312. $ctx1.sendIdx["@"]=1;
  73313. //>>excludeEnd("ctx");
  73314. $2=$recv($3)._navigationNodeAt_ifAbsent_($4,(function(){
  73315. return nil;
  73316. }));
  73317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73318. $ctx1.sendIdx["navigationNodeAt:ifAbsent:"]=1;
  73319. //>>excludeEnd("ctx");
  73320. $1=$recv($2)._source();
  73321. self._assert_equals_($1,"self");
  73322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73323. $ctx1.sendIdx["assert:equals:"]=1;
  73324. //>>excludeEnd("ctx");
  73325. node=self._parse_("foo\x0a\x09true ifTrue: [ 1 ]");
  73326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73327. $ctx1.sendIdx["parse:"]=2;
  73328. //>>excludeEnd("ctx");
  73329. $7=node;
  73330. $8=(2).__at((7));
  73331. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73332. $ctx1.sendIdx["@"]=2;
  73333. //>>excludeEnd("ctx");
  73334. $6=$recv($7)._navigationNodeAt_ifAbsent_($8,(function(){
  73335. return nil;
  73336. }));
  73337. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73338. $ctx1.sendIdx["navigationNodeAt:ifAbsent:"]=2;
  73339. //>>excludeEnd("ctx");
  73340. $5=$recv($6)._selector();
  73341. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73342. $ctx1.sendIdx["selector"]=1;
  73343. //>>excludeEnd("ctx");
  73344. self._assert_equals_($5,"ifTrue:");
  73345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73346. $ctx1.sendIdx["assert:equals:"]=2;
  73347. //>>excludeEnd("ctx");
  73348. node=self._parse_("foo\x0a\x09self foo; bar; baz");
  73349. self._assert_equals_($recv($recv(node)._navigationNodeAt_ifAbsent_((2).__at((8)),(function(){
  73350. return nil;
  73351. })))._selector(),"foo");
  73352. return self;
  73353. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73354. }, function($ctx1) {$ctx1.fill(self,"testNodeAtPosition",{node:node},$globals.ASTPositionTest)});
  73355. //>>excludeEnd("ctx");
  73356. },
  73357. //>>excludeStart("ide", pragmas.excludeIdeData);
  73358. args: [],
  73359. source: "testNodeAtPosition\x0a\x09| node |\x0a\x09\x0a\x09node := self parse: 'yourself\x0a\x09^ self'.\x0a\x09\x0a\x09self assert: (node navigationNodeAt: 2@4 ifAbsent: [ nil ]) source equals: 'self'.\x0a\x09\x0a\x09node := self parse: 'foo\x0a\x09true ifTrue: [ 1 ]'.\x0a\x09\x0a\x09self assert: (node navigationNodeAt: 2@7 ifAbsent: [ nil ]) selector equals: 'ifTrue:'.\x0a\x09\x0a\x09node := self parse: 'foo\x0a\x09self foo; bar; baz'.\x0a\x09\x0a\x09self assert: (node navigationNodeAt: 2@8 ifAbsent: [ nil ]) selector equals: 'foo'",
  73360. referencedClasses: [],
  73361. //>>excludeEnd("ide");
  73362. messageSends: ["parse:", "assert:equals:", "source", "navigationNodeAt:ifAbsent:", "@", "selector"]
  73363. }),
  73364. $globals.ASTPositionTest);
  73365. $core.addClass('CodeGeneratorTest', $globals.ASTParsingTest, ['receiver'], 'Compiler-Tests');
  73366. $core.addMethod(
  73367. $core.method({
  73368. selector: "codeGeneratorClass",
  73369. protocol: 'accessing',
  73370. fn: function (){
  73371. var self=this;
  73372. function $CodeGenerator(){return $globals.CodeGenerator||(typeof CodeGenerator=="undefined"?nil:CodeGenerator)}
  73373. return $CodeGenerator();
  73374. },
  73375. //>>excludeStart("ide", pragmas.excludeIdeData);
  73376. args: [],
  73377. source: "codeGeneratorClass\x0a\x09^ CodeGenerator",
  73378. referencedClasses: ["CodeGenerator"],
  73379. //>>excludeEnd("ide");
  73380. messageSends: []
  73381. }),
  73382. $globals.CodeGeneratorTest);
  73383. $core.addMethod(
  73384. $core.method({
  73385. selector: "compiler",
  73386. protocol: 'factory',
  73387. fn: function (){
  73388. var self=this;
  73389. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  73390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73391. return $core.withContext(function($ctx1) {
  73392. //>>excludeEnd("ctx");
  73393. var $2,$3,$1;
  73394. $2=$recv($Compiler())._new();
  73395. $recv($2)._codeGeneratorClass_(self._codeGeneratorClass());
  73396. $3=$recv($2)._yourself();
  73397. $1=$3;
  73398. return $1;
  73399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73400. }, function($ctx1) {$ctx1.fill(self,"compiler",{},$globals.CodeGeneratorTest)});
  73401. //>>excludeEnd("ctx");
  73402. },
  73403. //>>excludeStart("ide", pragmas.excludeIdeData);
  73404. args: [],
  73405. source: "compiler\x0a\x09^ Compiler new\x0a\x09\x09codeGeneratorClass: self codeGeneratorClass;\x0a\x09\x09yourself",
  73406. referencedClasses: ["Compiler"],
  73407. //>>excludeEnd("ide");
  73408. messageSends: ["codeGeneratorClass:", "new", "codeGeneratorClass", "yourself"]
  73409. }),
  73410. $globals.CodeGeneratorTest);
  73411. $core.addMethod(
  73412. $core.method({
  73413. selector: "setUp",
  73414. protocol: 'initialization',
  73415. fn: function (){
  73416. var self=this;
  73417. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  73418. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73419. return $core.withContext(function($ctx1) {
  73420. //>>excludeEnd("ctx");
  73421. self["@receiver"]=$recv($DoIt())._new();
  73422. return self;
  73423. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73424. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.CodeGeneratorTest)});
  73425. //>>excludeEnd("ctx");
  73426. },
  73427. //>>excludeStart("ide", pragmas.excludeIdeData);
  73428. args: [],
  73429. source: "setUp\x0a\x09receiver := DoIt new",
  73430. referencedClasses: ["DoIt"],
  73431. //>>excludeEnd("ide");
  73432. messageSends: ["new"]
  73433. }),
  73434. $globals.CodeGeneratorTest);
  73435. $core.addMethod(
  73436. $core.method({
  73437. selector: "should:receiver:return:",
  73438. protocol: 'testing',
  73439. fn: function (aString,anObject,aResult){
  73440. var self=this;
  73441. var method,result;
  73442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73443. return $core.withContext(function($ctx1) {
  73444. //>>excludeEnd("ctx");
  73445. var $1,$2;
  73446. self["@receiver"]=anObject;
  73447. $1=self._compiler();
  73448. $2=$recv(anObject)._class();
  73449. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73450. $ctx1.sendIdx["class"]=1;
  73451. //>>excludeEnd("ctx");
  73452. method=$recv($1)._install_forClass_protocol_(aString,$2,"tests");
  73453. result=$recv(self["@receiver"])._perform_($recv(method)._selector());
  73454. $recv($recv(anObject)._class())._removeCompiledMethod_(method);
  73455. self._assert_equals_(aResult,result);
  73456. return self;
  73457. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73458. }, function($ctx1) {$ctx1.fill(self,"should:receiver:return:",{aString:aString,anObject:anObject,aResult:aResult,method:method,result:result},$globals.CodeGeneratorTest)});
  73459. //>>excludeEnd("ctx");
  73460. },
  73461. //>>excludeStart("ide", pragmas.excludeIdeData);
  73462. args: ["aString", "anObject", "aResult"],
  73463. source: "should: aString receiver: anObject return: aResult\x0a\x09| method result |\x0a\x0a\x09receiver := anObject.\x0a\x09method := self compiler install: aString forClass: anObject class protocol: 'tests'.\x0a\x09result := receiver perform: method selector.\x0a\x09anObject class removeCompiledMethod: method.\x0a\x09self assert: aResult equals: result",
  73464. referencedClasses: [],
  73465. //>>excludeEnd("ide");
  73466. messageSends: ["install:forClass:protocol:", "compiler", "class", "perform:", "selector", "removeCompiledMethod:", "assert:equals:"]
  73467. }),
  73468. $globals.CodeGeneratorTest);
  73469. $core.addMethod(
  73470. $core.method({
  73471. selector: "should:return:",
  73472. protocol: 'testing',
  73473. fn: function (aString,anObject){
  73474. var self=this;
  73475. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73476. return $core.withContext(function($ctx1) {
  73477. //>>excludeEnd("ctx");
  73478. var $1;
  73479. $1=self._should_receiver_return_(aString,self["@receiver"],anObject);
  73480. return $1;
  73481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73482. }, function($ctx1) {$ctx1.fill(self,"should:return:",{aString:aString,anObject:anObject},$globals.CodeGeneratorTest)});
  73483. //>>excludeEnd("ctx");
  73484. },
  73485. //>>excludeStart("ide", pragmas.excludeIdeData);
  73486. args: ["aString", "anObject"],
  73487. source: "should: aString return: anObject\x0a\x09^ self \x0a\x09\x09should: aString \x0a\x09\x09receiver: receiver \x0a\x09\x09return: anObject",
  73488. referencedClasses: [],
  73489. //>>excludeEnd("ide");
  73490. messageSends: ["should:receiver:return:"]
  73491. }),
  73492. $globals.CodeGeneratorTest);
  73493. $core.addMethod(
  73494. $core.method({
  73495. selector: "tearDown",
  73496. protocol: 'initialization',
  73497. fn: function (){
  73498. var self=this;
  73499. return self;
  73500. },
  73501. //>>excludeStart("ide", pragmas.excludeIdeData);
  73502. args: [],
  73503. source: "tearDown\x0a\x09\x22receiver := nil\x22",
  73504. referencedClasses: [],
  73505. //>>excludeEnd("ide");
  73506. messageSends: []
  73507. }),
  73508. $globals.CodeGeneratorTest);
  73509. $core.addMethod(
  73510. $core.method({
  73511. selector: "testAssignment",
  73512. protocol: 'tests',
  73513. fn: function (){
  73514. var self=this;
  73515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73516. return $core.withContext(function($ctx1) {
  73517. //>>excludeEnd("ctx");
  73518. self._should_return_("foo | a | a := true ifTrue: [ 1 ]. ^ a",(1));
  73519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73520. $ctx1.sendIdx["should:return:"]=1;
  73521. //>>excludeEnd("ctx");
  73522. self._should_return_("foo | a | a := false ifTrue: [ 1 ]. ^ a",nil);
  73523. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73524. $ctx1.sendIdx["should:return:"]=2;
  73525. //>>excludeEnd("ctx");
  73526. self._should_return_("foo | a | ^ a := true ifTrue: [ 1 ]",(1));
  73527. return self;
  73528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73529. }, function($ctx1) {$ctx1.fill(self,"testAssignment",{},$globals.CodeGeneratorTest)});
  73530. //>>excludeEnd("ctx");
  73531. },
  73532. //>>excludeStart("ide", pragmas.excludeIdeData);
  73533. args: [],
  73534. source: "testAssignment\x0a\x09self should: 'foo | a | a := true ifTrue: [ 1 ]. ^ a' return: 1.\x0a\x09self should: 'foo | a | a := false ifTrue: [ 1 ]. ^ a' return: nil.\x0a\x0a\x09self should: 'foo | a | ^ a := true ifTrue: [ 1 ]' return: 1",
  73535. referencedClasses: [],
  73536. //>>excludeEnd("ide");
  73537. messageSends: ["should:return:"]
  73538. }),
  73539. $globals.CodeGeneratorTest);
  73540. $core.addMethod(
  73541. $core.method({
  73542. selector: "testBackslashSelectors",
  73543. protocol: 'tests',
  73544. fn: function (){
  73545. var self=this;
  73546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73547. return $core.withContext(function($ctx1) {
  73548. //>>excludeEnd("ctx");
  73549. self._should_return_("\x5c arg ^ 4",(4));
  73550. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73551. $ctx1.sendIdx["should:return:"]=1;
  73552. //>>excludeEnd("ctx");
  73553. self._should_return_("\x5c\x5c arg ^ 42",(42));
  73554. return self;
  73555. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73556. }, function($ctx1) {$ctx1.fill(self,"testBackslashSelectors",{},$globals.CodeGeneratorTest)});
  73557. //>>excludeEnd("ctx");
  73558. },
  73559. //>>excludeStart("ide", pragmas.excludeIdeData);
  73560. args: [],
  73561. source: "testBackslashSelectors\x0a\x09\x0a\x09self should: '\x5c arg ^ 4' return: 4.\x0a\x09self should: '\x5c\x5c arg ^ 42' return: 42",
  73562. referencedClasses: [],
  73563. //>>excludeEnd("ide");
  73564. messageSends: ["should:return:"]
  73565. }),
  73566. $globals.CodeGeneratorTest);
  73567. $core.addMethod(
  73568. $core.method({
  73569. selector: "testBlockReturn",
  73570. protocol: 'tests',
  73571. fn: function (){
  73572. var self=this;
  73573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73574. return $core.withContext(function($ctx1) {
  73575. //>>excludeEnd("ctx");
  73576. self._should_return_("foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]",[(2), (3), (4)]);
  73577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73578. $ctx1.sendIdx["should:return:"]=1;
  73579. //>>excludeEnd("ctx");
  73580. self._should_return_("foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]",[(2), (3), (4)]);
  73581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73582. $ctx1.sendIdx["should:return:"]=2;
  73583. //>>excludeEnd("ctx");
  73584. self._should_return_("foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]",[(2), (1), (4)]);
  73585. return self;
  73586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73587. }, function($ctx1) {$ctx1.fill(self,"testBlockReturn",{},$globals.CodeGeneratorTest)});
  73588. //>>excludeEnd("ctx");
  73589. },
  73590. //>>excludeStart("ide", pragmas.excludeIdeData);
  73591. args: [],
  73592. source: "testBlockReturn\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | true ifTrue: [ each + 1 ] ]' return: #(2 3 4).\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | false ifFalse: [ each + 1 ] ]' return: #(2 3 4).\x0a\x09self should: 'foo ^ #(1 2 3) collect: [ :each | each odd ifTrue: [ each + 1 ] ifFalse: [ each - 1 ] ]' return: #(2 1 4).",
  73593. referencedClasses: [],
  73594. //>>excludeEnd("ide");
  73595. messageSends: ["should:return:"]
  73596. }),
  73597. $globals.CodeGeneratorTest);
  73598. $core.addMethod(
  73599. $core.method({
  73600. selector: "testCascades",
  73601. protocol: 'tests',
  73602. fn: function (){
  73603. var self=this;
  73604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73605. return $core.withContext(function($ctx1) {
  73606. //>>excludeEnd("ctx");
  73607. self._should_return_("foo ^ Array new add: 3; add: 4; yourself",[(3), (4)]);
  73608. return self;
  73609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73610. }, function($ctx1) {$ctx1.fill(self,"testCascades",{},$globals.CodeGeneratorTest)});
  73611. //>>excludeEnd("ctx");
  73612. },
  73613. //>>excludeStart("ide", pragmas.excludeIdeData);
  73614. args: [],
  73615. source: "testCascades\x0a\x09\x0a\x09self should: 'foo ^ Array new add: 3; add: 4; yourself' return: #(3 4)",
  73616. referencedClasses: [],
  73617. //>>excludeEnd("ide");
  73618. messageSends: ["should:return:"]
  73619. }),
  73620. $globals.CodeGeneratorTest);
  73621. $core.addMethod(
  73622. $core.method({
  73623. selector: "testCascadesWithInlining",
  73624. protocol: 'tests',
  73625. fn: function (){
  73626. var self=this;
  73627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73628. return $core.withContext(function($ctx1) {
  73629. //>>excludeEnd("ctx");
  73630. self._should_return_("foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]",(1));
  73631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73632. $ctx1.sendIdx["should:return:"]=1;
  73633. //>>excludeEnd("ctx");
  73634. self._should_return_("foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]",(2));
  73635. return self;
  73636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73637. }, function($ctx1) {$ctx1.fill(self,"testCascadesWithInlining",{},$globals.CodeGeneratorTest)});
  73638. //>>excludeEnd("ctx");
  73639. },
  73640. //>>excludeStart("ide", pragmas.excludeIdeData);
  73641. args: [],
  73642. source: "testCascadesWithInlining\x0a\x09\x0a\x09self should: 'foo ^ true ifTrue: [ 1 ] ifFalse: [ 2 ]' return: 1.\x0a\x09self should: 'foo ^ false ifTrue: [ 1 ] ifFalse: [ 2 ]' return: 2",
  73643. referencedClasses: [],
  73644. //>>excludeEnd("ide");
  73645. messageSends: ["should:return:"]
  73646. }),
  73647. $globals.CodeGeneratorTest);
  73648. $core.addMethod(
  73649. $core.method({
  73650. selector: "testDynamicArrayElementsOrdered",
  73651. protocol: 'tests',
  73652. fn: function (){
  73653. var self=this;
  73654. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73655. return $core.withContext(function($ctx1) {
  73656. //>>excludeEnd("ctx");
  73657. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. x := 2 }\x0a",[(1), (2)]);
  73658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73659. $ctx1.sendIdx["should:return:"]=1;
  73660. //>>excludeEnd("ctx");
  73661. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. true ifTrue: [ x := 2 ] }\x0a",[(1), (2)]);
  73662. return self;
  73663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73664. }, function($ctx1) {$ctx1.fill(self,"testDynamicArrayElementsOrdered",{},$globals.CodeGeneratorTest)});
  73665. //>>excludeEnd("ctx");
  73666. },
  73667. //>>excludeStart("ide", pragmas.excludeIdeData);
  73668. args: [],
  73669. source: "testDynamicArrayElementsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. x := 2 }\x0a' return: #(1 2).\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { x. true ifTrue: [ x := 2 ] }\x0a' return: #(1 2).",
  73670. referencedClasses: [],
  73671. //>>excludeEnd("ide");
  73672. messageSends: ["should:return:"]
  73673. }),
  73674. $globals.CodeGeneratorTest);
  73675. $core.addMethod(
  73676. $core.method({
  73677. selector: "testDynamicDictionaryElementsOrdered",
  73678. protocol: 'tests',
  73679. fn: function (){
  73680. var self=this;
  73681. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73682. return $core.withContext(function($ctx1) {
  73683. //>>excludeEnd("ctx");
  73684. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 'foo'.\x0a\x09^ #{ x->1. 'bar'->(true ifTrue: [ 2 ]) }\x0a",$globals.HashedCollection._newFromPairs_(["foo",(1),"bar",(2)]));
  73685. return self;
  73686. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73687. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaryElementsOrdered",{},$globals.CodeGeneratorTest)});
  73688. //>>excludeEnd("ctx");
  73689. },
  73690. //>>excludeStart("ide", pragmas.excludeIdeData);
  73691. args: [],
  73692. source: "testDynamicDictionaryElementsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := ''foo''.\x0a\x09^ #{ x->1. ''bar''->(true ifTrue: [ 2 ]) }\x0a' return: #{'foo'->1. 'bar'->2}.",
  73693. referencedClasses: [],
  73694. //>>excludeEnd("ide");
  73695. messageSends: ["should:return:"]
  73696. }),
  73697. $globals.CodeGeneratorTest);
  73698. $core.addMethod(
  73699. $core.method({
  73700. selector: "testDynamicDictionaryWithMoreArrows",
  73701. protocol: 'tests',
  73702. fn: function (){
  73703. var self=this;
  73704. function $HashedCollection(){return $globals.HashedCollection||(typeof HashedCollection=="undefined"?nil:HashedCollection)}
  73705. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73706. return $core.withContext(function($ctx1) {
  73707. //>>excludeEnd("ctx");
  73708. var $2,$1;
  73709. $2=$recv((1).__minus_gt((2))).__minus_gt((3));
  73710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73711. $ctx1.sendIdx["->"]=1;
  73712. //>>excludeEnd("ctx");
  73713. $1=$recv($HashedCollection())._with_($2);
  73714. self._should_return_("foo ^ #{1->2->3}",$1);
  73715. return self;
  73716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73717. }, function($ctx1) {$ctx1.fill(self,"testDynamicDictionaryWithMoreArrows",{},$globals.CodeGeneratorTest)});
  73718. //>>excludeEnd("ctx");
  73719. },
  73720. //>>excludeStart("ide", pragmas.excludeIdeData);
  73721. args: [],
  73722. source: "testDynamicDictionaryWithMoreArrows\x0a\x09self should: 'foo ^ #{1->2->3}' return: (HashedCollection with: 1->2->3)",
  73723. referencedClasses: ["HashedCollection"],
  73724. //>>excludeEnd("ide");
  73725. messageSends: ["should:return:", "with:", "->"]
  73726. }),
  73727. $globals.CodeGeneratorTest);
  73728. $core.addMethod(
  73729. $core.method({
  73730. selector: "testGlobalVar",
  73731. protocol: 'tests',
  73732. fn: function (){
  73733. var self=this;
  73734. function $BlockClosure(){return $globals.BlockClosure||(typeof BlockClosure=="undefined"?nil:BlockClosure)}
  73735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73736. return $core.withContext(function($ctx1) {
  73737. //>>excludeEnd("ctx");
  73738. self._should_return_("foo ^ eval class",$BlockClosure());
  73739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73740. $ctx1.sendIdx["should:return:"]=1;
  73741. //>>excludeEnd("ctx");
  73742. self._should_return_("foo ^ Math cos: 0",(1));
  73743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73744. $ctx1.sendIdx["should:return:"]=2;
  73745. //>>excludeEnd("ctx");
  73746. self._should_return_("foo ^ NonExistingVar",nil);
  73747. return self;
  73748. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73749. }, function($ctx1) {$ctx1.fill(self,"testGlobalVar",{},$globals.CodeGeneratorTest)});
  73750. //>>excludeEnd("ctx");
  73751. },
  73752. //>>excludeStart("ide", pragmas.excludeIdeData);
  73753. args: [],
  73754. source: "testGlobalVar\x0a\x09self should: 'foo ^ eval class' return: BlockClosure.\x0a\x09self should: 'foo ^ Math cos: 0' return: 1.\x0a\x09self should: 'foo ^ NonExistingVar' return: nil",
  73755. referencedClasses: ["BlockClosure"],
  73756. //>>excludeEnd("ide");
  73757. messageSends: ["should:return:"]
  73758. }),
  73759. $globals.CodeGeneratorTest);
  73760. $core.addMethod(
  73761. $core.method({
  73762. selector: "testInnerTemporalDependentElementsOrdered",
  73763. protocol: 'tests',
  73764. fn: function (){
  73765. var self=this;
  73766. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  73767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73768. return $core.withContext(function($ctx1) {
  73769. //>>excludeEnd("ctx");
  73770. var $2,$3,$1,$5,$6,$4,$8,$9,$7,$11,$10;
  73771. $2="foo".__minus_gt($Array());
  73772. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73773. $ctx1.sendIdx["->"]=1;
  73774. //>>excludeEnd("ctx");
  73775. $3="bar".__minus_gt((2));
  73776. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73777. $ctx1.sendIdx["->"]=2;
  73778. //>>excludeEnd("ctx");
  73779. $1=[$2,$3];
  73780. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(x := 2)\x0a",$1);
  73781. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73782. $ctx1.sendIdx["should:return:"]=1;
  73783. //>>excludeEnd("ctx");
  73784. $5="foo".__minus_gt($Array());
  73785. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73786. $ctx1.sendIdx["->"]=3;
  73787. //>>excludeEnd("ctx");
  73788. $6="bar".__minus_gt((2));
  73789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73790. $ctx1.sendIdx["->"]=4;
  73791. //>>excludeEnd("ctx");
  73792. $4=[$5,$6];
  73793. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$4);
  73794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73795. $ctx1.sendIdx["should:return:"]=2;
  73796. //>>excludeEnd("ctx");
  73797. $8="foo".__minus_gt((1));
  73798. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73799. $ctx1.sendIdx["->"]=5;
  73800. //>>excludeEnd("ctx");
  73801. $9="bar".__minus_gt((2));
  73802. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73803. $ctx1.sendIdx["->"]=6;
  73804. //>>excludeEnd("ctx");
  73805. $7=[$8,$9];
  73806. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: 'foo'->x with: 'bar'->(true ifTrue: [ x := 2 ])\x0a",$7);
  73807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73808. $ctx1.sendIdx["should:return:"]=3;
  73809. //>>excludeEnd("ctx");
  73810. $11="foo".__minus_gt((1));
  73811. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73812. $ctx1.sendIdx["->"]=7;
  73813. //>>excludeEnd("ctx");
  73814. $10=[$11,"bar".__minus_gt((2))];
  73815. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$10);
  73816. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73817. $ctx1.sendIdx["should:return:"]=4;
  73818. //>>excludeEnd("ctx");
  73819. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ #{ 'foo'->x. 'bar'->(true ifTrue: [ x := 2 ]) }\x0a",$globals.HashedCollection._newFromPairs_(["foo",(1),"bar",(2)]));
  73820. return self;
  73821. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73822. }, function($ctx1) {$ctx1.fill(self,"testInnerTemporalDependentElementsOrdered",{},$globals.CodeGeneratorTest)});
  73823. //>>excludeEnd("ctx");
  73824. },
  73825. //>>excludeStart("ide", pragmas.excludeIdeData);
  73826. args: [],
  73827. source: "testInnerTemporalDependentElementsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: ''foo''->x with: ''bar''->(x := 2)\x0a' return: {'foo'->Array. 'bar'->2}.\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: ''foo''->x with: ''bar''->(true ifTrue: [ x := 2 ])\x0a' return: {'foo'->Array. 'bar'->2}.\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: ''foo''->x with: ''bar''->(true ifTrue: [ x := 2 ])\x0a' return: {'foo'->1. 'bar'->2}.\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ { ''foo''->x. ''bar''->(true ifTrue: [ x := 2 ]) }\x0a' return: {'foo'->1. 'bar'->2}.\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ #{ ''foo''->x. ''bar''->(true ifTrue: [ x := 2 ]) }\x0a' return: #{'foo'->1. 'bar'->2}.",
  73828. referencedClasses: ["Array"],
  73829. //>>excludeEnd("ide");
  73830. messageSends: ["should:return:", "->"]
  73831. }),
  73832. $globals.CodeGeneratorTest);
  73833. $core.addMethod(
  73834. $core.method({
  73835. selector: "testJSStatement",
  73836. protocol: 'tests',
  73837. fn: function (){
  73838. var self=this;
  73839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73840. return $core.withContext(function($ctx1) {
  73841. //>>excludeEnd("ctx");
  73842. self._should_return_("foo <return 2+3>",(5));
  73843. return self;
  73844. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73845. }, function($ctx1) {$ctx1.fill(self,"testJSStatement",{},$globals.CodeGeneratorTest)});
  73846. //>>excludeEnd("ctx");
  73847. },
  73848. //>>excludeStart("ide", pragmas.excludeIdeData);
  73849. args: [],
  73850. source: "testJSStatement\x0a\x09self should: 'foo <return 2+3>' return: 5",
  73851. referencedClasses: [],
  73852. //>>excludeEnd("ide");
  73853. messageSends: ["should:return:"]
  73854. }),
  73855. $globals.CodeGeneratorTest);
  73856. $core.addMethod(
  73857. $core.method({
  73858. selector: "testLexicalScope",
  73859. protocol: 'tests',
  73860. fn: function (){
  73861. var self=this;
  73862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73863. return $core.withContext(function($ctx1) {
  73864. //>>excludeEnd("ctx");
  73865. self._should_return_("foo | a | a := 1. [ a := 2 ] value. ^ a",(2));
  73866. return self;
  73867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73868. }, function($ctx1) {$ctx1.fill(self,"testLexicalScope",{},$globals.CodeGeneratorTest)});
  73869. //>>excludeEnd("ctx");
  73870. },
  73871. //>>excludeStart("ide", pragmas.excludeIdeData);
  73872. args: [],
  73873. source: "testLexicalScope\x0a\x09self should: 'foo | a | a := 1. [ a := 2 ] value. ^ a' return: 2",
  73874. referencedClasses: [],
  73875. //>>excludeEnd("ide");
  73876. messageSends: ["should:return:"]
  73877. }),
  73878. $globals.CodeGeneratorTest);
  73879. $core.addMethod(
  73880. $core.method({
  73881. selector: "testLiterals",
  73882. protocol: 'tests',
  73883. fn: function (){
  73884. var self=this;
  73885. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73886. return $core.withContext(function($ctx1) {
  73887. //>>excludeEnd("ctx");
  73888. self._should_return_("foo ^ 1",(1));
  73889. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73890. $ctx1.sendIdx["should:return:"]=1;
  73891. //>>excludeEnd("ctx");
  73892. self._should_return_("foo ^ 'hello'","hello");
  73893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73894. $ctx1.sendIdx["should:return:"]=2;
  73895. //>>excludeEnd("ctx");
  73896. self._should_return_("foo ^ #(1 2 3 4)",[(1), (2), (3), (4)]);
  73897. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73898. $ctx1.sendIdx["should:return:"]=3;
  73899. //>>excludeEnd("ctx");
  73900. self._should_return_("foo ^ {1. [:x | x ] value: 2. 3. [4] value}",[(1), (2), (3), (4)]);
  73901. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73902. $ctx1.sendIdx["should:return:"]=4;
  73903. //>>excludeEnd("ctx");
  73904. self._should_return_("foo ^ true",true);
  73905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73906. $ctx1.sendIdx["should:return:"]=5;
  73907. //>>excludeEnd("ctx");
  73908. self._should_return_("foo ^ false",false);
  73909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73910. $ctx1.sendIdx["should:return:"]=6;
  73911. //>>excludeEnd("ctx");
  73912. self._should_return_("foo ^ #{1->2. 3->4}",$globals.HashedCollection._newFromPairs_([(1),(2),(3),(4)]));
  73913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73914. $ctx1.sendIdx["should:return:"]=7;
  73915. //>>excludeEnd("ctx");
  73916. self._should_return_("foo ^ #hello","hello");
  73917. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73918. $ctx1.sendIdx["should:return:"]=8;
  73919. //>>excludeEnd("ctx");
  73920. self._should_return_("foo ^ $h","h");
  73921. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73922. $ctx1.sendIdx["should:return:"]=9;
  73923. //>>excludeEnd("ctx");
  73924. self._should_return_("foo ^ -123.456",(-123.456));
  73925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73926. $ctx1.sendIdx["should:return:"]=10;
  73927. //>>excludeEnd("ctx");
  73928. self._should_return_("foo ^ -2.5e4",(-25000));
  73929. return self;
  73930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73931. }, function($ctx1) {$ctx1.fill(self,"testLiterals",{},$globals.CodeGeneratorTest)});
  73932. //>>excludeEnd("ctx");
  73933. },
  73934. //>>excludeStart("ide", pragmas.excludeIdeData);
  73935. args: [],
  73936. source: "testLiterals\x0a\x09self should: 'foo ^ 1' return: 1.\x0a\x09self should: 'foo ^ ''hello''' return: 'hello'.\x0a\x09self should: 'foo ^ #(1 2 3 4)' return: #(1 2 3 4).\x0a\x09self should: 'foo ^ {1. [:x | x ] value: 2. 3. [4] value}' return: #(1 2 3 4).\x0a\x09self should: 'foo ^ true' return: true.\x0a\x09self should: 'foo ^ false' return: false.\x0a\x09self should: 'foo ^ #{1->2. 3->4}' return: #{1->2. 3->4}.\x0a\x09self should: 'foo ^ #hello' return: #hello.\x0a\x09self should: 'foo ^ $h' return: 'h'.\x0a\x09self should: 'foo ^ -123.456' return: -123.456.\x0a\x09self should: 'foo ^ -2.5e4' return: -25000.",
  73937. referencedClasses: [],
  73938. //>>excludeEnd("ide");
  73939. messageSends: ["should:return:"]
  73940. }),
  73941. $globals.CodeGeneratorTest);
  73942. $core.addMethod(
  73943. $core.method({
  73944. selector: "testLocalReturn",
  73945. protocol: 'tests',
  73946. fn: function (){
  73947. var self=this;
  73948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73949. return $core.withContext(function($ctx1) {
  73950. //>>excludeEnd("ctx");
  73951. self._should_return_("foo ^ 1",(1));
  73952. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73953. $ctx1.sendIdx["should:return:"]=1;
  73954. //>>excludeEnd("ctx");
  73955. self._should_return_("foo ^ 1 + 1",(2));
  73956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73957. $ctx1.sendIdx["should:return:"]=2;
  73958. //>>excludeEnd("ctx");
  73959. self._should_return_("foo ",self["@receiver"]);
  73960. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73961. $ctx1.sendIdx["should:return:"]=3;
  73962. //>>excludeEnd("ctx");
  73963. self._should_return_("foo self asString",self["@receiver"]);
  73964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73965. $ctx1.sendIdx["should:return:"]=4;
  73966. //>>excludeEnd("ctx");
  73967. self._should_return_("foo | a b | a := 1. b := 2. ^ a + b",(3));
  73968. return self;
  73969. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73970. }, function($ctx1) {$ctx1.fill(self,"testLocalReturn",{},$globals.CodeGeneratorTest)});
  73971. //>>excludeEnd("ctx");
  73972. },
  73973. //>>excludeStart("ide", pragmas.excludeIdeData);
  73974. args: [],
  73975. source: "testLocalReturn\x0a\x09self should: 'foo ^ 1' return: 1.\x0a\x09self should: 'foo ^ 1 + 1' return: 2.\x0a\x09self should: 'foo ' return: receiver.\x0a\x09self should: 'foo self asString' return: receiver.\x0a\x09self should: 'foo | a b | a := 1. b := 2. ^ a + b' return: 3",
  73976. referencedClasses: [],
  73977. //>>excludeEnd("ide");
  73978. messageSends: ["should:return:"]
  73979. }),
  73980. $globals.CodeGeneratorTest);
  73981. $core.addMethod(
  73982. $core.method({
  73983. selector: "testMessageSends",
  73984. protocol: 'tests',
  73985. fn: function (){
  73986. var self=this;
  73987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73988. return $core.withContext(function($ctx1) {
  73989. //>>excludeEnd("ctx");
  73990. self._should_return_("foo ^ 1 asString","1");
  73991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73992. $ctx1.sendIdx["should:return:"]=1;
  73993. //>>excludeEnd("ctx");
  73994. self._should_return_("foo ^ 1 + 1",(2));
  73995. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73996. $ctx1.sendIdx["should:return:"]=2;
  73997. //>>excludeEnd("ctx");
  73998. self._should_return_("foo ^ 1 + 2 * 3",(9));
  73999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74000. $ctx1.sendIdx["should:return:"]=3;
  74001. //>>excludeEnd("ctx");
  74002. self._should_return_("foo ^ 1 to: 3",[(1), (2), (3)]);
  74003. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74004. $ctx1.sendIdx["should:return:"]=4;
  74005. //>>excludeEnd("ctx");
  74006. self._should_return_("foo ^ 1 to: 5 by: 2",[(1), (3), (5)]);
  74007. return self;
  74008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74009. }, function($ctx1) {$ctx1.fill(self,"testMessageSends",{},$globals.CodeGeneratorTest)});
  74010. //>>excludeEnd("ctx");
  74011. },
  74012. //>>excludeStart("ide", pragmas.excludeIdeData);
  74013. args: [],
  74014. source: "testMessageSends\x0a\x09self should: 'foo ^ 1 asString' return: '1'.\x0a\x0a\x09self should: 'foo ^ 1 + 1' return: 2.\x0a\x09self should: 'foo ^ 1 + 2 * 3' return: 9.\x0a\x0a\x09self should: 'foo ^ 1 to: 3' return: #(1 2 3).\x0a\x09self should: 'foo ^ 1 to: 5 by: 2' return: #(1 3 5)",
  74015. referencedClasses: [],
  74016. //>>excludeEnd("ide");
  74017. messageSends: ["should:return:"]
  74018. }),
  74019. $globals.CodeGeneratorTest);
  74020. $core.addMethod(
  74021. $core.method({
  74022. selector: "testMultipleSequences",
  74023. protocol: 'tests',
  74024. fn: function (){
  74025. var self=this;
  74026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74027. return $core.withContext(function($ctx1) {
  74028. //>>excludeEnd("ctx");
  74029. self._should_return_("foo | a b c | a := 2. b := 3. c := a + b. ^ c * 6",(30));
  74030. return self;
  74031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74032. }, function($ctx1) {$ctx1.fill(self,"testMultipleSequences",{},$globals.CodeGeneratorTest)});
  74033. //>>excludeEnd("ctx");
  74034. },
  74035. //>>excludeStart("ide", pragmas.excludeIdeData);
  74036. args: [],
  74037. source: "testMultipleSequences\x0a\x09self should: 'foo | a b c | a := 2. b := 3. c := a + b. ^ c * 6' return: 30",
  74038. referencedClasses: [],
  74039. //>>excludeEnd("ide");
  74040. messageSends: ["should:return:"]
  74041. }),
  74042. $globals.CodeGeneratorTest);
  74043. $core.addMethod(
  74044. $core.method({
  74045. selector: "testMutableLiterals",
  74046. protocol: 'tests',
  74047. fn: function (){
  74048. var self=this;
  74049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74050. return $core.withContext(function($ctx1) {
  74051. //>>excludeEnd("ctx");
  74052. self._should_return_("foo ^ #( 1 2 ) at: 1 put: 3; yourself",[(3), (2)]);
  74053. return self;
  74054. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74055. }, function($ctx1) {$ctx1.fill(self,"testMutableLiterals",{},$globals.CodeGeneratorTest)});
  74056. //>>excludeEnd("ctx");
  74057. },
  74058. //>>excludeStart("ide", pragmas.excludeIdeData);
  74059. args: [],
  74060. source: "testMutableLiterals\x0a\x09\x22Mutable literals must be aliased in cascades.\x0a\x09See https://github.com/amber-smalltalk/amber/issues/428\x22\x0a\x09\x0a\x09self \x0a\x09\x09should: 'foo ^ #( 1 2 ) at: 1 put: 3; yourself' \x0a\x09\x09return: #(3 2)",
  74061. referencedClasses: [],
  74062. //>>excludeEnd("ide");
  74063. messageSends: ["should:return:"]
  74064. }),
  74065. $globals.CodeGeneratorTest);
  74066. $core.addMethod(
  74067. $core.method({
  74068. selector: "testNestedIfTrue",
  74069. protocol: 'tests',
  74070. fn: function (){
  74071. var self=this;
  74072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74073. return $core.withContext(function($ctx1) {
  74074. //>>excludeEnd("ctx");
  74075. self._should_return_("foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]",(1));
  74076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74077. $ctx1.sendIdx["should:return:"]=1;
  74078. //>>excludeEnd("ctx");
  74079. self._should_return_("foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]",nil);
  74080. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74081. $ctx1.sendIdx["should:return:"]=2;
  74082. //>>excludeEnd("ctx");
  74083. self._should_return_("foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]",(1));
  74084. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74085. $ctx1.sendIdx["should:return:"]=3;
  74086. //>>excludeEnd("ctx");
  74087. self._should_return_("foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]",self["@receiver"]);
  74088. return self;
  74089. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74090. }, function($ctx1) {$ctx1.fill(self,"testNestedIfTrue",{},$globals.CodeGeneratorTest)});
  74091. //>>excludeEnd("ctx");
  74092. },
  74093. //>>excludeStart("ide", pragmas.excludeIdeData);
  74094. args: [],
  74095. source: "testNestedIfTrue\x0a\x09self should: 'foo ^ true ifTrue: [ false ifFalse: [ 1 ] ]' return: 1.\x0a\x09self should: 'foo ^ true ifTrue: [ false ifTrue: [ 1 ] ]' return: nil.\x0a\x0a\x09self should: 'foo true ifTrue: [ false ifFalse: [ ^ 1 ] ]' return: 1.\x0a\x09self should: 'foo true ifTrue: [ false ifTrue: [ ^ 1 ] ]' return: receiver.",
  74096. referencedClasses: [],
  74097. //>>excludeEnd("ide");
  74098. messageSends: ["should:return:"]
  74099. }),
  74100. $globals.CodeGeneratorTest);
  74101. $core.addMethod(
  74102. $core.method({
  74103. selector: "testNestedSends",
  74104. protocol: 'tests',
  74105. fn: function (){
  74106. var self=this;
  74107. function $Point(){return $globals.Point||(typeof Point=="undefined"?nil:Point)}
  74108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74109. return $core.withContext(function($ctx1) {
  74110. //>>excludeEnd("ctx");
  74111. self._should_return_("foo ^ (Point x: (Point x: 2 y: 3) y: 4) asString",$recv($recv($Point())._x_y_((2).__at((3)),(4)))._asString());
  74112. return self;
  74113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74114. }, function($ctx1) {$ctx1.fill(self,"testNestedSends",{},$globals.CodeGeneratorTest)});
  74115. //>>excludeEnd("ctx");
  74116. },
  74117. //>>excludeStart("ide", pragmas.excludeIdeData);
  74118. args: [],
  74119. source: "testNestedSends\x0a\x09self should: 'foo ^ (Point x: (Point x: 2 y: 3) y: 4) asString' return: (Point x: (2@3) y: 4) asString",
  74120. referencedClasses: ["Point"],
  74121. //>>excludeEnd("ide");
  74122. messageSends: ["should:return:", "asString", "x:y:", "@"]
  74123. }),
  74124. $globals.CodeGeneratorTest);
  74125. $core.addMethod(
  74126. $core.method({
  74127. selector: "testNonLocalReturn",
  74128. protocol: 'tests',
  74129. fn: function (){
  74130. var self=this;
  74131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74132. return $core.withContext(function($ctx1) {
  74133. //>>excludeEnd("ctx");
  74134. self._should_return_("foo [ ^ 1 ] value",(1));
  74135. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74136. $ctx1.sendIdx["should:return:"]=1;
  74137. //>>excludeEnd("ctx");
  74138. self._should_return_("foo [ ^ 1 + 1 ] value",(2));
  74139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74140. $ctx1.sendIdx["should:return:"]=2;
  74141. //>>excludeEnd("ctx");
  74142. self._should_return_("foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt",(3));
  74143. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74144. $ctx1.sendIdx["should:return:"]=3;
  74145. //>>excludeEnd("ctx");
  74146. self._should_return_("foo [ :x | ^ x + x ] value: 4. ^ 2",(8));
  74147. return self;
  74148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74149. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn",{},$globals.CodeGeneratorTest)});
  74150. //>>excludeEnd("ctx");
  74151. },
  74152. //>>excludeStart("ide", pragmas.excludeIdeData);
  74153. args: [],
  74154. source: "testNonLocalReturn\x0a\x09self should: 'foo [ ^ 1 ] value' return: 1.\x0a\x09self should: 'foo [ ^ 1 + 1 ] value' return: 2.\x0a\x09self should: 'foo | a b | a := 1. b := 2. [ ^ a + b ] value. self halt' return: 3.\x0a\x09self should: 'foo [ :x | ^ x + x ] value: 4. ^ 2' return: 8",
  74155. referencedClasses: [],
  74156. //>>excludeEnd("ide");
  74157. messageSends: ["should:return:"]
  74158. }),
  74159. $globals.CodeGeneratorTest);
  74160. $core.addMethod(
  74161. $core.method({
  74162. selector: "testPascalCaseGlobal",
  74163. protocol: 'tests',
  74164. fn: function (){
  74165. var self=this;
  74166. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  74167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74168. return $core.withContext(function($ctx1) {
  74169. //>>excludeEnd("ctx");
  74170. self._should_return_("foo ^Object",$recv($recv($Smalltalk())._globals())._at_("Object"));
  74171. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74172. $ctx1.sendIdx["should:return:"]=1;
  74173. //>>excludeEnd("ctx");
  74174. self._should_return_("foo ^NonExistent",nil);
  74175. return self;
  74176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74177. }, function($ctx1) {$ctx1.fill(self,"testPascalCaseGlobal",{},$globals.CodeGeneratorTest)});
  74178. //>>excludeEnd("ctx");
  74179. },
  74180. //>>excludeStart("ide", pragmas.excludeIdeData);
  74181. args: [],
  74182. source: "testPascalCaseGlobal\x0a\x09self should: 'foo ^Object' return: (Smalltalk globals at: 'Object').\x0a\x09self should: 'foo ^NonExistent' return: nil",
  74183. referencedClasses: ["Smalltalk"],
  74184. //>>excludeEnd("ide");
  74185. messageSends: ["should:return:", "at:", "globals"]
  74186. }),
  74187. $globals.CodeGeneratorTest);
  74188. $core.addMethod(
  74189. $core.method({
  74190. selector: "testSendReceiverAndArgumentsOrdered",
  74191. protocol: 'tests',
  74192. fn: function (){
  74193. var self=this;
  74194. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  74195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74196. return $core.withContext(function($ctx1) {
  74197. //>>excludeEnd("ctx");
  74198. self._should_return_("foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a",[(1), (2)]);
  74199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74200. $ctx1.sendIdx["should:return:"]=1;
  74201. //>>excludeEnd("ctx");
  74202. self._should_return_("foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a",[$Array(),(2)]);
  74203. return self;
  74204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74205. }, function($ctx1) {$ctx1.fill(self,"testSendReceiverAndArgumentsOrdered",{},$globals.CodeGeneratorTest)});
  74206. //>>excludeEnd("ctx");
  74207. },
  74208. //>>excludeStart("ide", pragmas.excludeIdeData);
  74209. args: [],
  74210. source: "testSendReceiverAndArgumentsOrdered\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := 1.\x0a\x09^ Array with: x with: (true ifTrue: [ x := 2 ])\x0a' return: #(1 2).\x0a\x0a\x09self should: 'foo\x0a\x09| x |\x0a\x09x := Array.\x0a\x09^ x with: x with: (true ifTrue: [ x := 2 ])\x0a' return: {Array. 2}.",
  74211. referencedClasses: ["Array"],
  74212. //>>excludeEnd("ide");
  74213. messageSends: ["should:return:"]
  74214. }),
  74215. $globals.CodeGeneratorTest);
  74216. $core.addMethod(
  74217. $core.method({
  74218. selector: "testSuperSend",
  74219. protocol: 'tests',
  74220. fn: function (){
  74221. var self=this;
  74222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74223. return $core.withContext(function($ctx1) {
  74224. //>>excludeEnd("ctx");
  74225. self._should_receiver_return_("foo ^ super isBoolean",true,false);
  74226. return self;
  74227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74228. }, function($ctx1) {$ctx1.fill(self,"testSuperSend",{},$globals.CodeGeneratorTest)});
  74229. //>>excludeEnd("ctx");
  74230. },
  74231. //>>excludeStart("ide", pragmas.excludeIdeData);
  74232. args: [],
  74233. source: "testSuperSend\x0a\x09self \x0a\x09\x09should: 'foo ^ super isBoolean' \x0a\x09\x09receiver: true\x0a\x09\x09return: false",
  74234. referencedClasses: [],
  74235. //>>excludeEnd("ide");
  74236. messageSends: ["should:receiver:return:"]
  74237. }),
  74238. $globals.CodeGeneratorTest);
  74239. $core.addMethod(
  74240. $core.method({
  74241. selector: "testTempVariables",
  74242. protocol: 'tests',
  74243. fn: function (){
  74244. var self=this;
  74245. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74246. return $core.withContext(function($ctx1) {
  74247. //>>excludeEnd("ctx");
  74248. self._should_return_("foo | a | ^ a",nil);
  74249. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74250. $ctx1.sendIdx["should:return:"]=1;
  74251. //>>excludeEnd("ctx");
  74252. self._should_return_("foo | AVariable | ^ AVariable",nil);
  74253. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74254. $ctx1.sendIdx["should:return:"]=2;
  74255. //>>excludeEnd("ctx");
  74256. self._should_return_("foo | a b c | ^ c",nil);
  74257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74258. $ctx1.sendIdx["should:return:"]=3;
  74259. //>>excludeEnd("ctx");
  74260. self._should_return_("foo | a | [ | d | ^ d ] value",nil);
  74261. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74262. $ctx1.sendIdx["should:return:"]=4;
  74263. //>>excludeEnd("ctx");
  74264. self._should_return_("foo | a | a:= 1. ^ a",(1));
  74265. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74266. $ctx1.sendIdx["should:return:"]=5;
  74267. //>>excludeEnd("ctx");
  74268. self._should_return_("foo | AVariable | AVariable := 1. ^ AVariable",(1));
  74269. return self;
  74270. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74271. }, function($ctx1) {$ctx1.fill(self,"testTempVariables",{},$globals.CodeGeneratorTest)});
  74272. //>>excludeEnd("ctx");
  74273. },
  74274. //>>excludeStart("ide", pragmas.excludeIdeData);
  74275. args: [],
  74276. source: "testTempVariables\x0a\x09self should: 'foo | a | ^ a' return: nil.\x0a\x09self should: 'foo | AVariable | ^ AVariable' return: nil.\x0a\x09self should: 'foo | a b c | ^ c' return: nil.\x0a\x09self should: 'foo | a | [ | d | ^ d ] value' return: nil.\x0a\x09\x0a\x09self should: 'foo | a | a:= 1. ^ a' return: 1.\x0a\x09self should: 'foo | AVariable | AVariable := 1. ^ AVariable' return: 1.",
  74277. referencedClasses: [],
  74278. //>>excludeEnd("ide");
  74279. messageSends: ["should:return:"]
  74280. }),
  74281. $globals.CodeGeneratorTest);
  74282. $core.addMethod(
  74283. $core.method({
  74284. selector: "testThisContext",
  74285. protocol: 'tests',
  74286. fn: function (){
  74287. var self=this;
  74288. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74289. return $core.withContext(function($ctx1) {
  74290. //>>excludeEnd("ctx");
  74291. self._should_return_("foo ^ [ thisContext ] value outerContext == thisContext",true);
  74292. return self;
  74293. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74294. }, function($ctx1) {$ctx1.fill(self,"testThisContext",{},$globals.CodeGeneratorTest)});
  74295. //>>excludeEnd("ctx");
  74296. },
  74297. //>>excludeStart("ide", pragmas.excludeIdeData);
  74298. args: [],
  74299. source: "testThisContext\x0a\x09self should: 'foo ^ [ thisContext ] value outerContext == thisContext' return: true",
  74300. referencedClasses: [],
  74301. //>>excludeEnd("ide");
  74302. messageSends: ["should:return:"]
  74303. }),
  74304. $globals.CodeGeneratorTest);
  74305. $core.addMethod(
  74306. $core.method({
  74307. selector: "testifFalse",
  74308. protocol: 'tests',
  74309. fn: function (){
  74310. var self=this;
  74311. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74312. return $core.withContext(function($ctx1) {
  74313. //>>excludeEnd("ctx");
  74314. self._should_return_("foo true ifFalse: [ ^ 1 ]",self["@receiver"]);
  74315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74316. $ctx1.sendIdx["should:return:"]=1;
  74317. //>>excludeEnd("ctx");
  74318. self._should_return_("foo false ifFalse: [ ^ 2 ]",(2));
  74319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74320. $ctx1.sendIdx["should:return:"]=2;
  74321. //>>excludeEnd("ctx");
  74322. self._should_return_("foo ^ true ifFalse: [ 1 ]",nil);
  74323. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74324. $ctx1.sendIdx["should:return:"]=3;
  74325. //>>excludeEnd("ctx");
  74326. self._should_return_("foo ^ false ifFalse: [ 2 ]",(2));
  74327. return self;
  74328. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74329. }, function($ctx1) {$ctx1.fill(self,"testifFalse",{},$globals.CodeGeneratorTest)});
  74330. //>>excludeEnd("ctx");
  74331. },
  74332. //>>excludeStart("ide", pragmas.excludeIdeData);
  74333. args: [],
  74334. source: "testifFalse\x0a\x09self should: 'foo true ifFalse: [ ^ 1 ]' return: receiver.\x0a\x09self should: 'foo false ifFalse: [ ^ 2 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ true ifFalse: [ 1 ]' return: nil.\x0a\x09self should: 'foo ^ false ifFalse: [ 2 ]' return: 2.",
  74335. referencedClasses: [],
  74336. //>>excludeEnd("ide");
  74337. messageSends: ["should:return:"]
  74338. }),
  74339. $globals.CodeGeneratorTest);
  74340. $core.addMethod(
  74341. $core.method({
  74342. selector: "testifFalseIfTrue",
  74343. protocol: 'tests',
  74344. fn: function (){
  74345. var self=this;
  74346. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74347. return $core.withContext(function($ctx1) {
  74348. //>>excludeEnd("ctx");
  74349. self._should_return_("foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]",(2));
  74350. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74351. $ctx1.sendIdx["should:return:"]=1;
  74352. //>>excludeEnd("ctx");
  74353. self._should_return_("foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]",(2));
  74354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74355. $ctx1.sendIdx["should:return:"]=2;
  74356. //>>excludeEnd("ctx");
  74357. self._should_return_("foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]",(2));
  74358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74359. $ctx1.sendIdx["should:return:"]=3;
  74360. //>>excludeEnd("ctx");
  74361. self._should_return_("foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]",(2));
  74362. return self;
  74363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74364. }, function($ctx1) {$ctx1.fill(self,"testifFalseIfTrue",{},$globals.CodeGeneratorTest)});
  74365. //>>excludeEnd("ctx");
  74366. },
  74367. //>>excludeStart("ide", pragmas.excludeIdeData);
  74368. args: [],
  74369. source: "testifFalseIfTrue\x0a\x09self should: 'foo true ifFalse: [ ^ 1 ] ifTrue: [ ^ 2 ]' return: 2.\x0a\x09self should: 'foo false ifFalse: [ ^ 2 ] ifTrue: [ ^1 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ true ifFalse: [ 1 ] ifTrue: [ 2 ]' return: 2.\x0a\x09self should: 'foo ^ false ifFalse: [ 2 ] ifTrue: [ 1 ]' return: 2.",
  74370. referencedClasses: [],
  74371. //>>excludeEnd("ide");
  74372. messageSends: ["should:return:"]
  74373. }),
  74374. $globals.CodeGeneratorTest);
  74375. $core.addMethod(
  74376. $core.method({
  74377. selector: "testifNil",
  74378. protocol: 'tests',
  74379. fn: function (){
  74380. var self=this;
  74381. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74382. return $core.withContext(function($ctx1) {
  74383. //>>excludeEnd("ctx");
  74384. self._should_return_("foo ^ 1 ifNil: [ 2 ]",(1));
  74385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74386. $ctx1.sendIdx["should:return:"]=1;
  74387. //>>excludeEnd("ctx");
  74388. self._should_return_("foo ^ nil ifNil: [ 2 ]",(2));
  74389. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74390. $ctx1.sendIdx["should:return:"]=2;
  74391. //>>excludeEnd("ctx");
  74392. self._should_return_("foo 1 ifNil: [ ^ 2 ]",self["@receiver"]);
  74393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74394. $ctx1.sendIdx["should:return:"]=3;
  74395. //>>excludeEnd("ctx");
  74396. self._should_return_("foo nil ifNil: [ ^ 2 ]",(2));
  74397. return self;
  74398. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74399. }, function($ctx1) {$ctx1.fill(self,"testifNil",{},$globals.CodeGeneratorTest)});
  74400. //>>excludeEnd("ctx");
  74401. },
  74402. //>>excludeStart("ide", pragmas.excludeIdeData);
  74403. args: [],
  74404. source: "testifNil\x0a\x09self should: 'foo ^ 1 ifNil: [ 2 ]' return: 1.\x0a\x09self should: 'foo ^ nil ifNil: [ 2 ]' return: 2.\x0a\x0a\x09self should: 'foo 1 ifNil: [ ^ 2 ]' return: receiver.\x0a\x09self should: 'foo nil ifNil: [ ^ 2 ]' return: 2.",
  74405. referencedClasses: [],
  74406. //>>excludeEnd("ide");
  74407. messageSends: ["should:return:"]
  74408. }),
  74409. $globals.CodeGeneratorTest);
  74410. $core.addMethod(
  74411. $core.method({
  74412. selector: "testifNilIfNotNil",
  74413. protocol: 'tests',
  74414. fn: function (){
  74415. var self=this;
  74416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74417. return $core.withContext(function($ctx1) {
  74418. //>>excludeEnd("ctx");
  74419. self._should_return_("foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]",(3));
  74420. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74421. $ctx1.sendIdx["should:return:"]=1;
  74422. //>>excludeEnd("ctx");
  74423. self._should_return_("foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]",(2));
  74424. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74425. $ctx1.sendIdx["should:return:"]=2;
  74426. //>>excludeEnd("ctx");
  74427. self._should_return_("foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(3));
  74428. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74429. $ctx1.sendIdx["should:return:"]=3;
  74430. //>>excludeEnd("ctx");
  74431. self._should_return_("foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]",(2));
  74432. return self;
  74433. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74434. }, function($ctx1) {$ctx1.fill(self,"testifNilIfNotNil",{},$globals.CodeGeneratorTest)});
  74435. //>>excludeEnd("ctx");
  74436. },
  74437. //>>excludeStart("ide", pragmas.excludeIdeData);
  74438. args: [],
  74439. source: "testifNilIfNotNil\x0a\x09self should: 'foo ^ 1 ifNil: [ 2 ] ifNotNil: [ 3 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNil: [ 2 ] ifNotNil: [ 3 ]' return: 2.\x0a\x0a\x09self should: 'foo 1 ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]' return: 3.\x0a\x09self should: 'foo nil ifNil: [ ^ 2 ] ifNotNil: [ ^3 ]' return: 2.",
  74440. referencedClasses: [],
  74441. //>>excludeEnd("ide");
  74442. messageSends: ["should:return:"]
  74443. }),
  74444. $globals.CodeGeneratorTest);
  74445. $core.addMethod(
  74446. $core.method({
  74447. selector: "testifNotNil",
  74448. protocol: 'tests',
  74449. fn: function (){
  74450. var self=this;
  74451. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74452. return $core.withContext(function($ctx1) {
  74453. //>>excludeEnd("ctx");
  74454. self._should_return_("foo ^ 1 ifNotNil: [ 2 ]",(2));
  74455. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74456. $ctx1.sendIdx["should:return:"]=1;
  74457. //>>excludeEnd("ctx");
  74458. self._should_return_("foo ^ nil ifNotNil: [ 2 ]",nil);
  74459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74460. $ctx1.sendIdx["should:return:"]=2;
  74461. //>>excludeEnd("ctx");
  74462. self._should_return_("foo 1 ifNotNil: [ ^ 2 ]",(2));
  74463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74464. $ctx1.sendIdx["should:return:"]=3;
  74465. //>>excludeEnd("ctx");
  74466. self._should_return_("foo nil ifNotNil: [ ^ 2 ]",self["@receiver"]);
  74467. return self;
  74468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74469. }, function($ctx1) {$ctx1.fill(self,"testifNotNil",{},$globals.CodeGeneratorTest)});
  74470. //>>excludeEnd("ctx");
  74471. },
  74472. //>>excludeStart("ide", pragmas.excludeIdeData);
  74473. args: [],
  74474. source: "testifNotNil\x0a\x09self should: 'foo ^ 1 ifNotNil: [ 2 ]' return: 2.\x0a\x09self should: 'foo ^ nil ifNotNil: [ 2 ]' return: nil.\x0a\x0a\x09self should: 'foo 1 ifNotNil: [ ^ 2 ]' return: 2.\x0a\x09self should: 'foo nil ifNotNil: [ ^ 2 ]' return: receiver.",
  74475. referencedClasses: [],
  74476. //>>excludeEnd("ide");
  74477. messageSends: ["should:return:"]
  74478. }),
  74479. $globals.CodeGeneratorTest);
  74480. $core.addMethod(
  74481. $core.method({
  74482. selector: "testifNotNilWithArgument",
  74483. protocol: 'tests',
  74484. fn: function (){
  74485. var self=this;
  74486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74487. return $core.withContext(function($ctx1) {
  74488. //>>excludeEnd("ctx");
  74489. self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ]",(3));
  74490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74491. $ctx1.sendIdx["should:return:"]=1;
  74492. //>>excludeEnd("ctx");
  74493. self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ]",nil);
  74494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74495. $ctx1.sendIdx["should:return:"]=2;
  74496. //>>excludeEnd("ctx");
  74497. self._should_return_("foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(3));
  74498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74499. $ctx1.sendIdx["should:return:"]=3;
  74500. //>>excludeEnd("ctx");
  74501. self._should_return_("foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]",(5));
  74502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74503. $ctx1.sendIdx["should:return:"]=4;
  74504. //>>excludeEnd("ctx");
  74505. self._should_return_("foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(3));
  74506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74507. $ctx1.sendIdx["should:return:"]=5;
  74508. //>>excludeEnd("ctx");
  74509. self._should_return_("foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]",(5));
  74510. return self;
  74511. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74512. }, function($ctx1) {$ctx1.fill(self,"testifNotNilWithArgument",{},$globals.CodeGeneratorTest)});
  74513. //>>excludeEnd("ctx");
  74514. },
  74515. //>>excludeStart("ide", pragmas.excludeIdeData);
  74516. args: [],
  74517. source: "testifNotNilWithArgument\x0a\x09self should: 'foo ^ 1 ifNotNil: [ :val | val + 2 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNotNil: [ :val | val + 2 ]' return: nil.\x0a\x09\x0a\x09self should: 'foo ^ 1 ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNil: [ 5 ] ifNotNil: [ :val | val + 2 ]' return: 5.\x0a\x09\x0a\x09self should: 'foo ^ 1 ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]' return: 3.\x0a\x09self should: 'foo ^ nil ifNotNil: [ :val | val + 2 ] ifNil: [ 5 ]' return: 5",
  74518. referencedClasses: [],
  74519. //>>excludeEnd("ide");
  74520. messageSends: ["should:return:"]
  74521. }),
  74522. $globals.CodeGeneratorTest);
  74523. $core.addMethod(
  74524. $core.method({
  74525. selector: "testifTrue",
  74526. protocol: 'tests',
  74527. fn: function (){
  74528. var self=this;
  74529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74530. return $core.withContext(function($ctx1) {
  74531. //>>excludeEnd("ctx");
  74532. self._should_return_("foo false ifTrue: [ ^ 1 ]",self["@receiver"]);
  74533. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74534. $ctx1.sendIdx["should:return:"]=1;
  74535. //>>excludeEnd("ctx");
  74536. self._should_return_("foo true ifTrue: [ ^ 2 ]",(2));
  74537. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74538. $ctx1.sendIdx["should:return:"]=2;
  74539. //>>excludeEnd("ctx");
  74540. self._should_return_("foo ^ false ifTrue: [ 1 ]",nil);
  74541. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74542. $ctx1.sendIdx["should:return:"]=3;
  74543. //>>excludeEnd("ctx");
  74544. self._should_return_("foo ^ true ifTrue: [ 2 ]",(2));
  74545. return self;
  74546. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74547. }, function($ctx1) {$ctx1.fill(self,"testifTrue",{},$globals.CodeGeneratorTest)});
  74548. //>>excludeEnd("ctx");
  74549. },
  74550. //>>excludeStart("ide", pragmas.excludeIdeData);
  74551. args: [],
  74552. source: "testifTrue\x0a\x09self should: 'foo false ifTrue: [ ^ 1 ]' return: receiver.\x0a\x09self should: 'foo true ifTrue: [ ^ 2 ]' return: 2.\x0a\x09\x0a\x09self should: 'foo ^ false ifTrue: [ 1 ]' return: nil.\x0a\x09self should: 'foo ^ true ifTrue: [ 2 ]' return: 2.",
  74553. referencedClasses: [],
  74554. //>>excludeEnd("ide");
  74555. messageSends: ["should:return:"]
  74556. }),
  74557. $globals.CodeGeneratorTest);
  74558. $core.addMethod(
  74559. $core.method({
  74560. selector: "testifTrueIfFalse",
  74561. protocol: 'tests',
  74562. fn: function (){
  74563. var self=this;
  74564. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74565. return $core.withContext(function($ctx1) {
  74566. //>>excludeEnd("ctx");
  74567. self._should_return_("foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]",(2));
  74568. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74569. $ctx1.sendIdx["should:return:"]=1;
  74570. //>>excludeEnd("ctx");
  74571. self._should_return_("foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]",(1));
  74572. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74573. $ctx1.sendIdx["should:return:"]=2;
  74574. //>>excludeEnd("ctx");
  74575. self._should_return_("foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]",(1));
  74576. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74577. $ctx1.sendIdx["should:return:"]=3;
  74578. //>>excludeEnd("ctx");
  74579. self._should_return_("foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]",(2));
  74580. return self;
  74581. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74582. }, function($ctx1) {$ctx1.fill(self,"testifTrueIfFalse",{},$globals.CodeGeneratorTest)});
  74583. //>>excludeEnd("ctx");
  74584. },
  74585. //>>excludeStart("ide", pragmas.excludeIdeData);
  74586. args: [],
  74587. source: "testifTrueIfFalse\x0a\x09self should: 'foo false ifTrue: [ ^ 1 ] ifFalse: [ ^2 ]' return: 2.\x0a\x09self should: 'foo true ifTrue: [ ^ 1 ] ifFalse: [ ^ 2 ]' return: 1.\x0a\x09\x0a\x09self should: 'foo ^ false ifTrue: [ 2 ] ifFalse: [ 1 ]' return: 1.\x0a\x09self should: 'foo ^ true ifTrue: [ 2 ] ifFalse: [ 1 ]' return: 2.",
  74588. referencedClasses: [],
  74589. //>>excludeEnd("ide");
  74590. messageSends: ["should:return:"]
  74591. }),
  74592. $globals.CodeGeneratorTest);
  74593. $core.addClass('ASTInterpreterTest', $globals.CodeGeneratorTest, [], 'Compiler-Tests');
  74594. $core.addMethod(
  74595. $core.method({
  74596. selector: "analyze:forClass:",
  74597. protocol: 'parsing',
  74598. fn: function (aNode,aClass){
  74599. var self=this;
  74600. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  74601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74602. return $core.withContext(function($ctx1) {
  74603. //>>excludeEnd("ctx");
  74604. $recv($recv($SemanticAnalyzer())._on_(aClass))._visit_(aNode);
  74605. return aNode;
  74606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74607. }, function($ctx1) {$ctx1.fill(self,"analyze:forClass:",{aNode:aNode,aClass:aClass},$globals.ASTInterpreterTest)});
  74608. //>>excludeEnd("ctx");
  74609. },
  74610. //>>excludeStart("ide", pragmas.excludeIdeData);
  74611. args: ["aNode", "aClass"],
  74612. source: "analyze: aNode forClass: aClass\x0a\x09(SemanticAnalyzer on: aClass) visit: aNode.\x0a\x09^ aNode",
  74613. referencedClasses: ["SemanticAnalyzer"],
  74614. //>>excludeEnd("ide");
  74615. messageSends: ["visit:", "on:"]
  74616. }),
  74617. $globals.ASTInterpreterTest);
  74618. $core.addMethod(
  74619. $core.method({
  74620. selector: "interpret:receiver:withArguments:",
  74621. protocol: 'private',
  74622. fn: function (aString,anObject,aDictionary){
  74623. var self=this;
  74624. var ctx,ast,interpreter;
  74625. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  74626. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  74627. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74628. return $core.withContext(function($ctx1) {
  74629. //>>excludeEnd("ctx");
  74630. var $1,$2,$3,$5,$6,$4,$receiver;
  74631. interpreter=$recv($ASTInterpreter())._new();
  74632. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74633. $ctx1.sendIdx["new"]=1;
  74634. //>>excludeEnd("ctx");
  74635. ast=self._parse_forClass_(aString,$recv(anObject)._class());
  74636. $1=$recv($AIContext())._new();
  74637. $recv($1)._receiver_(anObject);
  74638. $recv($1)._interpreter_(interpreter);
  74639. $2=$recv($1)._yourself();
  74640. ctx=$2;
  74641. $3=$recv(ast)._sequenceNode();
  74642. if(($receiver = $3) == null || $receiver.isNil){
  74643. $3;
  74644. } else {
  74645. var sequence;
  74646. sequence=$receiver;
  74647. $recv($recv(sequence)._temps())._do_((function(each){
  74648. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74649. return $core.withContext(function($ctx2) {
  74650. //>>excludeEnd("ctx");
  74651. return $recv(ctx)._defineLocal_(each);
  74652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74653. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  74654. //>>excludeEnd("ctx");
  74655. }));
  74656. };
  74657. $recv(aDictionary)._keysAndValuesDo_((function(key,value){
  74658. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74659. return $core.withContext(function($ctx2) {
  74660. //>>excludeEnd("ctx");
  74661. return $recv(ctx)._localAt_put_(key,value);
  74662. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74663. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  74664. //>>excludeEnd("ctx");
  74665. }));
  74666. $5=interpreter;
  74667. $recv($5)._context_(ctx);
  74668. $recv($5)._interpret_($recv(ast)._nextChild());
  74669. $recv($5)._proceed();
  74670. $6=$recv($5)._result();
  74671. $4=$6;
  74672. return $4;
  74673. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74674. }, function($ctx1) {$ctx1.fill(self,"interpret:receiver:withArguments:",{aString:aString,anObject:anObject,aDictionary:aDictionary,ctx:ctx,ast:ast,interpreter:interpreter},$globals.ASTInterpreterTest)});
  74675. //>>excludeEnd("ctx");
  74676. },
  74677. //>>excludeStart("ide", pragmas.excludeIdeData);
  74678. args: ["aString", "anObject", "aDictionary"],
  74679. source: "interpret: aString receiver: anObject withArguments: aDictionary\x0a\x09\x22The food is a methodNode. Interpret the sequenceNode only\x22\x0a\x09\x0a\x09| ctx ast interpreter |\x0a\x09\x0a\x09interpreter := ASTInterpreter new.\x0a\x09ast := self parse: aString forClass: anObject class.\x0a\x09\x0a\x09ctx := AIContext new\x0a\x09\x09receiver: anObject;\x0a\x09\x09interpreter: interpreter;\x0a\x09\x09yourself.\x0a\x09\x09\x0a\x09\x22Define locals for the context\x22\x0a\x09ast sequenceNode ifNotNil: [ :sequence |\x0a\x09\x09sequence temps do: [ :each |\x0a\x09\x09\x09ctx defineLocal: each ] ].\x0a\x09\x09\x0a\x09aDictionary keysAndValuesDo: [ :key :value |\x0a\x09\x09ctx localAt: key put: value ].\x0a\x09\x0a\x09^ interpreter\x0a\x09\x09context: ctx;\x0a\x09\x09interpret: ast nextChild;\x0a\x09\x09proceed;\x0a\x09\x09result",
  74680. referencedClasses: ["ASTInterpreter", "AIContext"],
  74681. //>>excludeEnd("ide");
  74682. messageSends: ["new", "parse:forClass:", "class", "receiver:", "interpreter:", "yourself", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "keysAndValuesDo:", "localAt:put:", "context:", "interpret:", "nextChild", "proceed", "result"]
  74683. }),
  74684. $globals.ASTInterpreterTest);
  74685. $core.addMethod(
  74686. $core.method({
  74687. selector: "parse:",
  74688. protocol: 'parsing',
  74689. fn: function (aString){
  74690. var self=this;
  74691. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  74692. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74693. return $core.withContext(function($ctx1) {
  74694. //>>excludeEnd("ctx");
  74695. var $1;
  74696. $1=$recv($Smalltalk())._parse_(aString);
  74697. return $1;
  74698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74699. }, function($ctx1) {$ctx1.fill(self,"parse:",{aString:aString},$globals.ASTInterpreterTest)});
  74700. //>>excludeEnd("ctx");
  74701. },
  74702. //>>excludeStart("ide", pragmas.excludeIdeData);
  74703. args: ["aString"],
  74704. source: "parse: aString\x0a\x09^ Smalltalk parse: aString",
  74705. referencedClasses: ["Smalltalk"],
  74706. //>>excludeEnd("ide");
  74707. messageSends: ["parse:"]
  74708. }),
  74709. $globals.ASTInterpreterTest);
  74710. $core.addMethod(
  74711. $core.method({
  74712. selector: "parse:forClass:",
  74713. protocol: 'parsing',
  74714. fn: function (aString,aClass){
  74715. var self=this;
  74716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74717. return $core.withContext(function($ctx1) {
  74718. //>>excludeEnd("ctx");
  74719. var $1;
  74720. $1=self._analyze_forClass_(self._parse_(aString),aClass);
  74721. return $1;
  74722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74723. }, function($ctx1) {$ctx1.fill(self,"parse:forClass:",{aString:aString,aClass:aClass},$globals.ASTInterpreterTest)});
  74724. //>>excludeEnd("ctx");
  74725. },
  74726. //>>excludeStart("ide", pragmas.excludeIdeData);
  74727. args: ["aString", "aClass"],
  74728. source: "parse: aString forClass: aClass\x0a\x09^ self analyze: (self parse: aString) forClass: aClass",
  74729. referencedClasses: [],
  74730. //>>excludeEnd("ide");
  74731. messageSends: ["analyze:forClass:", "parse:"]
  74732. }),
  74733. $globals.ASTInterpreterTest);
  74734. $core.addMethod(
  74735. $core.method({
  74736. selector: "should:receiver:return:",
  74737. protocol: 'testing',
  74738. fn: function (aString,anObject,aResult){
  74739. var self=this;
  74740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74741. return $core.withContext(function($ctx1) {
  74742. //>>excludeEnd("ctx");
  74743. var $1;
  74744. self["@receiver"]=anObject;
  74745. $1=self._assert_equals_(self._interpret_receiver_withArguments_(aString,self["@receiver"],$globals.HashedCollection._newFromPairs_([])),aResult);
  74746. return $1;
  74747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74748. }, function($ctx1) {$ctx1.fill(self,"should:receiver:return:",{aString:aString,anObject:anObject,aResult:aResult},$globals.ASTInterpreterTest)});
  74749. //>>excludeEnd("ctx");
  74750. },
  74751. //>>excludeStart("ide", pragmas.excludeIdeData);
  74752. args: ["aString", "anObject", "aResult"],
  74753. source: "should: aString receiver: anObject return: aResult\x0a\x09receiver := anObject.\x0a\x09\x0a\x09^ self \x0a\x09\x09assert: (self interpret: aString receiver: receiver withArguments: #{})\x0a\x09\x09equals: aResult",
  74754. referencedClasses: [],
  74755. //>>excludeEnd("ide");
  74756. messageSends: ["assert:equals:", "interpret:receiver:withArguments:"]
  74757. }),
  74758. $globals.ASTInterpreterTest);
  74759. $core.addMethod(
  74760. $core.method({
  74761. selector: "should:return:",
  74762. protocol: 'testing',
  74763. fn: function (aString,anObject){
  74764. var self=this;
  74765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74766. return $core.withContext(function($ctx1) {
  74767. //>>excludeEnd("ctx");
  74768. var $1;
  74769. $1=self._should_receiver_return_(aString,self["@receiver"],anObject);
  74770. return $1;
  74771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74772. }, function($ctx1) {$ctx1.fill(self,"should:return:",{aString:aString,anObject:anObject},$globals.ASTInterpreterTest)});
  74773. //>>excludeEnd("ctx");
  74774. },
  74775. //>>excludeStart("ide", pragmas.excludeIdeData);
  74776. args: ["aString", "anObject"],
  74777. source: "should: aString return: anObject\x0a\x09^ self \x0a\x09\x09should: aString\x0a\x09\x09receiver: receiver\x0a\x09\x09return: anObject",
  74778. referencedClasses: [],
  74779. //>>excludeEnd("ide");
  74780. messageSends: ["should:receiver:return:"]
  74781. }),
  74782. $globals.ASTInterpreterTest);
  74783. $core.addClass('ASTDebuggerTest', $globals.ASTInterpreterTest, [], 'Compiler-Tests');
  74784. $core.addMethod(
  74785. $core.method({
  74786. selector: "interpret:receiver:withArguments:",
  74787. protocol: 'private',
  74788. fn: function (aString,anObject,aDictionary){
  74789. var self=this;
  74790. var ctx,ast,debugger_;
  74791. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  74792. function $ASTInterpreter(){return $globals.ASTInterpreter||(typeof ASTInterpreter=="undefined"?nil:ASTInterpreter)}
  74793. function $ASTDebugger(){return $globals.ASTDebugger||(typeof ASTDebugger=="undefined"?nil:ASTDebugger)}
  74794. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74795. return $core.withContext(function($ctx1) {
  74796. //>>excludeEnd("ctx");
  74797. var $1,$2,$3,$4,$6,$7,$5,$receiver;
  74798. $1=$recv($AIContext())._new();
  74799. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74800. $ctx1.sendIdx["new"]=1;
  74801. //>>excludeEnd("ctx");
  74802. $recv($1)._receiver_(anObject);
  74803. $recv($1)._interpreter_($recv($ASTInterpreter())._new());
  74804. $2=$recv($1)._yourself();
  74805. ctx=$2;
  74806. ast=self._parse_forClass_(aString,$recv(anObject)._class());
  74807. $3=$recv(ast)._sequenceNode();
  74808. if(($receiver = $3) == null || $receiver.isNil){
  74809. $3;
  74810. } else {
  74811. var sequence;
  74812. sequence=$receiver;
  74813. $recv($recv(sequence)._temps())._do_((function(each){
  74814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74815. return $core.withContext(function($ctx2) {
  74816. //>>excludeEnd("ctx");
  74817. return $recv(ctx)._defineLocal_(each);
  74818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74819. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  74820. //>>excludeEnd("ctx");
  74821. }));
  74822. };
  74823. $recv(aDictionary)._keysAndValuesDo_((function(key,value){
  74824. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74825. return $core.withContext(function($ctx2) {
  74826. //>>excludeEnd("ctx");
  74827. return $recv(ctx)._localAt_put_(key,value);
  74828. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74829. }, function($ctx2) {$ctx2.fillBlock({key:key,value:value},$ctx1,3)});
  74830. //>>excludeEnd("ctx");
  74831. }));
  74832. $4=$recv(ctx)._interpreter();
  74833. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74834. $ctx1.sendIdx["interpreter"]=1;
  74835. //>>excludeEnd("ctx");
  74836. $recv($4)._context_(ctx);
  74837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74838. $ctx1.sendIdx["context:"]=1;
  74839. //>>excludeEnd("ctx");
  74840. $recv($recv(ctx)._interpreter())._node_($recv(ast)._nextChild());
  74841. debugger_=$recv($ASTDebugger())._context_(ctx);
  74842. $6=debugger_;
  74843. $recv($6)._proceed();
  74844. $7=$recv($6)._result();
  74845. $5=$7;
  74846. return $5;
  74847. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74848. }, function($ctx1) {$ctx1.fill(self,"interpret:receiver:withArguments:",{aString:aString,anObject:anObject,aDictionary:aDictionary,ctx:ctx,ast:ast,debugger_:debugger_},$globals.ASTDebuggerTest)});
  74849. //>>excludeEnd("ctx");
  74850. },
  74851. //>>excludeStart("ide", pragmas.excludeIdeData);
  74852. args: ["aString", "anObject", "aDictionary"],
  74853. source: "interpret: aString receiver: anObject withArguments: aDictionary\x0a\x09| ctx ast debugger |\x0a\x09\x0a\x09ctx := AIContext new\x0a\x09\x09receiver: anObject;\x0a\x09\x09interpreter: ASTInterpreter new;\x0a\x09\x09yourself.\x0a\x09ast := self parse: aString forClass: anObject class.\x0a\x09\x09\x0a\x09\x22Define locals for the context\x22\x0a\x09ast sequenceNode ifNotNil: [ :sequence |\x0a\x09\x09sequence temps do: [ :each |\x0a\x09\x09\x09ctx defineLocal: each ] ].\x0a\x09\x0a\x09aDictionary keysAndValuesDo: [ :key :value |\x0a\x09\x09ctx localAt: key put: value ].\x0a\x09ctx interpreter context: ctx.\x0a\x09\x0a\x09ctx interpreter node: ast nextChild.\x0a\x09\x0a\x09debugger := ASTDebugger context: ctx.\x0a\x09\x0a\x09^ debugger \x0a\x09\x09proceed; \x0a\x09\x09result",
  74854. referencedClasses: ["AIContext", "ASTInterpreter", "ASTDebugger"],
  74855. //>>excludeEnd("ide");
  74856. messageSends: ["receiver:", "new", "interpreter:", "yourself", "parse:forClass:", "class", "ifNotNil:", "sequenceNode", "do:", "temps", "defineLocal:", "keysAndValuesDo:", "localAt:put:", "context:", "interpreter", "node:", "nextChild", "proceed", "result"]
  74857. }),
  74858. $globals.ASTDebuggerTest);
  74859. $core.addClass('InliningCodeGeneratorTest', $globals.CodeGeneratorTest, [], 'Compiler-Tests');
  74860. $core.addMethod(
  74861. $core.method({
  74862. selector: "codeGeneratorClass",
  74863. protocol: 'accessing',
  74864. fn: function (){
  74865. var self=this;
  74866. function $InliningCodeGenerator(){return $globals.InliningCodeGenerator||(typeof InliningCodeGenerator=="undefined"?nil:InliningCodeGenerator)}
  74867. return $InliningCodeGenerator();
  74868. },
  74869. //>>excludeStart("ide", pragmas.excludeIdeData);
  74870. args: [],
  74871. source: "codeGeneratorClass\x0a\x09^ InliningCodeGenerator",
  74872. referencedClasses: ["InliningCodeGenerator"],
  74873. //>>excludeEnd("ide");
  74874. messageSends: []
  74875. }),
  74876. $globals.InliningCodeGeneratorTest);
  74877. $core.addClass('ScopeVarTest', $globals.TestCase, [], 'Compiler-Tests');
  74878. $core.addMethod(
  74879. $core.method({
  74880. selector: "testClassRefVar",
  74881. protocol: 'tests',
  74882. fn: function (){
  74883. var self=this;
  74884. var node;
  74885. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  74886. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  74887. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  74888. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74889. return $core.withContext(function($ctx1) {
  74890. //>>excludeEnd("ctx");
  74891. var $1,$2,$3,$4;
  74892. $1=$recv($VariableNode())._new();
  74893. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74894. $ctx1.sendIdx["new"]=1;
  74895. //>>excludeEnd("ctx");
  74896. $recv($1)._value_("Object");
  74897. $2=$recv($1)._yourself();
  74898. node=$2;
  74899. $3=$recv($SemanticAnalyzer())._new();
  74900. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74901. $ctx1.sendIdx["new"]=2;
  74902. //>>excludeEnd("ctx");
  74903. $recv($3)._pushScope_($recv($MethodLexicalScope())._new());
  74904. $4=$recv($3)._visit_(node);
  74905. self._assert_($recv($recv(node)._binding())._isClassRefVar());
  74906. return self;
  74907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74908. }, function($ctx1) {$ctx1.fill(self,"testClassRefVar",{node:node},$globals.ScopeVarTest)});
  74909. //>>excludeEnd("ctx");
  74910. },
  74911. //>>excludeStart("ide", pragmas.excludeIdeData);
  74912. args: [],
  74913. source: "testClassRefVar\x0a\x09| node |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'Object';\x0a\x09\x09yourself.\x0a\x09SemanticAnalyzer new \x0a\x09\x09pushScope: MethodLexicalScope new;\x0a\x09\x09visit: node.\x0a\x09self assert: node binding isClassRefVar",
  74914. referencedClasses: ["VariableNode", "SemanticAnalyzer", "MethodLexicalScope"],
  74915. //>>excludeEnd("ide");
  74916. messageSends: ["value:", "new", "yourself", "pushScope:", "visit:", "assert:", "isClassRefVar", "binding"]
  74917. }),
  74918. $globals.ScopeVarTest);
  74919. $core.addMethod(
  74920. $core.method({
  74921. selector: "testInstanceVar",
  74922. protocol: 'tests',
  74923. fn: function (){
  74924. var self=this;
  74925. var node,scope;
  74926. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  74927. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  74928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74929. return $core.withContext(function($ctx1) {
  74930. //>>excludeEnd("ctx");
  74931. var $1,$2;
  74932. $1=$recv($VariableNode())._new();
  74933. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74934. $ctx1.sendIdx["new"]=1;
  74935. //>>excludeEnd("ctx");
  74936. $recv($1)._value_("bzzz");
  74937. $2=$recv($1)._yourself();
  74938. node=$2;
  74939. scope=$recv($MethodLexicalScope())._new();
  74940. $recv(scope)._addIVar_("bzzz");
  74941. self._assert_($recv($recv(scope)._bindingFor_(node))._isInstanceVar());
  74942. return self;
  74943. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74944. }, function($ctx1) {$ctx1.fill(self,"testInstanceVar",{node:node,scope:scope},$globals.ScopeVarTest)});
  74945. //>>excludeEnd("ctx");
  74946. },
  74947. //>>excludeStart("ide", pragmas.excludeIdeData);
  74948. args: [],
  74949. source: "testInstanceVar\x0a\x09| node scope |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09scope := MethodLexicalScope new.\x0a\x09scope addIVar: 'bzzz'.\x0a\x09self assert: (scope bindingFor: node) isInstanceVar",
  74950. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  74951. //>>excludeEnd("ide");
  74952. messageSends: ["value:", "new", "yourself", "addIVar:", "assert:", "isInstanceVar", "bindingFor:"]
  74953. }),
  74954. $globals.ScopeVarTest);
  74955. $core.addMethod(
  74956. $core.method({
  74957. selector: "testPseudoVar",
  74958. protocol: 'tests',
  74959. fn: function (){
  74960. var self=this;
  74961. var node,pseudoVars;
  74962. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  74963. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  74964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74965. return $core.withContext(function($ctx1) {
  74966. //>>excludeEnd("ctx");
  74967. var $1,$2;
  74968. pseudoVars=["self", "super", "true", "false", "nil"];
  74969. $recv(pseudoVars)._do_((function(each){
  74970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74971. return $core.withContext(function($ctx2) {
  74972. //>>excludeEnd("ctx");
  74973. $1=$recv($VariableNode())._new();
  74974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74975. $ctx2.sendIdx["new"]=1;
  74976. //>>excludeEnd("ctx");
  74977. $recv($1)._value_(each);
  74978. $2=$recv($1)._yourself();
  74979. node=$2;
  74980. node;
  74981. return self._assert_($recv($recv($recv($MethodLexicalScope())._new())._bindingFor_(node))._isPseudoVar());
  74982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74983. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  74984. //>>excludeEnd("ctx");
  74985. }));
  74986. return self;
  74987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74988. }, function($ctx1) {$ctx1.fill(self,"testPseudoVar",{node:node,pseudoVars:pseudoVars},$globals.ScopeVarTest)});
  74989. //>>excludeEnd("ctx");
  74990. },
  74991. //>>excludeStart("ide", pragmas.excludeIdeData);
  74992. args: [],
  74993. source: "testPseudoVar\x0a\x09| node pseudoVars |\x0a\x09pseudoVars := #('self' 'super' 'true' 'false' 'nil').\x0a\x09pseudoVars do: [:each |\x0a\x09\x09node := VariableNode new\x0a\x09\x09value: each;\x0a\x09\x09yourself.\x0a\x09\x09self assert: (MethodLexicalScope new bindingFor: node) isPseudoVar]",
  74994. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  74995. //>>excludeEnd("ide");
  74996. messageSends: ["do:", "value:", "new", "yourself", "assert:", "isPseudoVar", "bindingFor:"]
  74997. }),
  74998. $globals.ScopeVarTest);
  74999. $core.addMethod(
  75000. $core.method({
  75001. selector: "testTempVar",
  75002. protocol: 'tests',
  75003. fn: function (){
  75004. var self=this;
  75005. var node,scope;
  75006. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  75007. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  75008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75009. return $core.withContext(function($ctx1) {
  75010. //>>excludeEnd("ctx");
  75011. var $1,$2;
  75012. $1=$recv($VariableNode())._new();
  75013. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75014. $ctx1.sendIdx["new"]=1;
  75015. //>>excludeEnd("ctx");
  75016. $recv($1)._value_("bzzz");
  75017. $2=$recv($1)._yourself();
  75018. node=$2;
  75019. scope=$recv($MethodLexicalScope())._new();
  75020. $recv(scope)._addTemp_("bzzz");
  75021. self._assert_($recv($recv(scope)._bindingFor_(node))._isTempVar());
  75022. return self;
  75023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75024. }, function($ctx1) {$ctx1.fill(self,"testTempVar",{node:node,scope:scope},$globals.ScopeVarTest)});
  75025. //>>excludeEnd("ctx");
  75026. },
  75027. //>>excludeStart("ide", pragmas.excludeIdeData);
  75028. args: [],
  75029. source: "testTempVar\x0a\x09| node scope |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09scope := MethodLexicalScope new.\x0a\x09scope addTemp: 'bzzz'.\x0a\x09self assert: (scope bindingFor: node) isTempVar",
  75030. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  75031. //>>excludeEnd("ide");
  75032. messageSends: ["value:", "new", "yourself", "addTemp:", "assert:", "isTempVar", "bindingFor:"]
  75033. }),
  75034. $globals.ScopeVarTest);
  75035. $core.addMethod(
  75036. $core.method({
  75037. selector: "testUnknownVar",
  75038. protocol: 'tests',
  75039. fn: function (){
  75040. var self=this;
  75041. var node;
  75042. function $VariableNode(){return $globals.VariableNode||(typeof VariableNode=="undefined"?nil:VariableNode)}
  75043. function $MethodLexicalScope(){return $globals.MethodLexicalScope||(typeof MethodLexicalScope=="undefined"?nil:MethodLexicalScope)}
  75044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75045. return $core.withContext(function($ctx1) {
  75046. //>>excludeEnd("ctx");
  75047. var $1,$2;
  75048. $1=$recv($VariableNode())._new();
  75049. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75050. $ctx1.sendIdx["new"]=1;
  75051. //>>excludeEnd("ctx");
  75052. $recv($1)._value_("bzzz");
  75053. $2=$recv($1)._yourself();
  75054. node=$2;
  75055. self._assert_($recv($recv($recv($MethodLexicalScope())._new())._bindingFor_(node))._isNil());
  75056. return self;
  75057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75058. }, function($ctx1) {$ctx1.fill(self,"testUnknownVar",{node:node},$globals.ScopeVarTest)});
  75059. //>>excludeEnd("ctx");
  75060. },
  75061. //>>excludeStart("ide", pragmas.excludeIdeData);
  75062. args: [],
  75063. source: "testUnknownVar\x0a\x09| node |\x0a\x09node := VariableNode new\x0a\x09\x09value: 'bzzz';\x0a\x09\x09yourself.\x0a\x09self assert: (MethodLexicalScope new bindingFor: node) isNil",
  75064. referencedClasses: ["VariableNode", "MethodLexicalScope"],
  75065. //>>excludeEnd("ide");
  75066. messageSends: ["value:", "new", "yourself", "assert:", "isNil", "bindingFor:"]
  75067. }),
  75068. $globals.ScopeVarTest);
  75069. $core.addClass('SemanticAnalyzerTest', $globals.TestCase, ['analyzer'], 'Compiler-Tests');
  75070. $core.addMethod(
  75071. $core.method({
  75072. selector: "setUp",
  75073. protocol: 'running',
  75074. fn: function (){
  75075. var self=this;
  75076. function $SemanticAnalyzer(){return $globals.SemanticAnalyzer||(typeof SemanticAnalyzer=="undefined"?nil:SemanticAnalyzer)}
  75077. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  75078. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75079. return $core.withContext(function($ctx1) {
  75080. //>>excludeEnd("ctx");
  75081. self["@analyzer"]=$recv($SemanticAnalyzer())._on_($Object());
  75082. return self;
  75083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75084. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.SemanticAnalyzerTest)});
  75085. //>>excludeEnd("ctx");
  75086. },
  75087. //>>excludeStart("ide", pragmas.excludeIdeData);
  75088. args: [],
  75089. source: "setUp\x0a\x09analyzer := SemanticAnalyzer on: Object",
  75090. referencedClasses: ["SemanticAnalyzer", "Object"],
  75091. //>>excludeEnd("ide");
  75092. messageSends: ["on:"]
  75093. }),
  75094. $globals.SemanticAnalyzerTest);
  75095. $core.addMethod(
  75096. $core.method({
  75097. selector: "testAssignment",
  75098. protocol: 'tests',
  75099. fn: function (){
  75100. var self=this;
  75101. var src,ast;
  75102. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75103. function $InvalidAssignmentError(){return $globals.InvalidAssignmentError||(typeof InvalidAssignmentError=="undefined"?nil:InvalidAssignmentError)}
  75104. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75105. return $core.withContext(function($ctx1) {
  75106. //>>excludeEnd("ctx");
  75107. src="foo self := 1";
  75108. ast=$recv($Smalltalk())._parse_(src);
  75109. self._should_raise_((function(){
  75110. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75111. return $core.withContext(function($ctx2) {
  75112. //>>excludeEnd("ctx");
  75113. return $recv(self["@analyzer"])._visit_(ast);
  75114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75115. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75116. //>>excludeEnd("ctx");
  75117. }),$InvalidAssignmentError());
  75118. return self;
  75119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75120. }, function($ctx1) {$ctx1.fill(self,"testAssignment",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75121. //>>excludeEnd("ctx");
  75122. },
  75123. //>>excludeStart("ide", pragmas.excludeIdeData);
  75124. args: [],
  75125. source: "testAssignment\x0a\x09| src ast |\x0a\x0a\x09src := 'foo self := 1'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: InvalidAssignmentError",
  75126. referencedClasses: ["Smalltalk", "InvalidAssignmentError"],
  75127. //>>excludeEnd("ide");
  75128. messageSends: ["parse:", "should:raise:", "visit:"]
  75129. }),
  75130. $globals.SemanticAnalyzerTest);
  75131. $core.addMethod(
  75132. $core.method({
  75133. selector: "testNonLocalReturn",
  75134. protocol: 'tests',
  75135. fn: function (){
  75136. var self=this;
  75137. var src,ast;
  75138. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75140. return $core.withContext(function($ctx1) {
  75141. //>>excludeEnd("ctx");
  75142. src="foo | a | a + 1. ^ a";
  75143. ast=$recv($Smalltalk())._parse_(src);
  75144. $recv(self["@analyzer"])._visit_(ast);
  75145. self._deny_($recv($recv(ast)._scope())._hasNonLocalReturn());
  75146. return self;
  75147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75148. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75149. //>>excludeEnd("ctx");
  75150. },
  75151. //>>excludeStart("ide", pragmas.excludeIdeData);
  75152. args: [],
  75153. source: "testNonLocalReturn\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. ^ a'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast scope hasNonLocalReturn",
  75154. referencedClasses: ["Smalltalk"],
  75155. //>>excludeEnd("ide");
  75156. messageSends: ["parse:", "visit:", "deny:", "hasNonLocalReturn", "scope"]
  75157. }),
  75158. $globals.SemanticAnalyzerTest);
  75159. $core.addMethod(
  75160. $core.method({
  75161. selector: "testNonLocalReturn2",
  75162. protocol: 'tests',
  75163. fn: function (){
  75164. var self=this;
  75165. var src,ast;
  75166. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75167. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75168. return $core.withContext(function($ctx1) {
  75169. //>>excludeEnd("ctx");
  75170. src="foo | a | a + 1. [ [ ^ a] ]";
  75171. ast=$recv($Smalltalk())._parse_(src);
  75172. $recv(self["@analyzer"])._visit_(ast);
  75173. self._assert_($recv($recv(ast)._scope())._hasNonLocalReturn());
  75174. return self;
  75175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75176. }, function($ctx1) {$ctx1.fill(self,"testNonLocalReturn2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75177. //>>excludeEnd("ctx");
  75178. },
  75179. //>>excludeStart("ide", pragmas.excludeIdeData);
  75180. args: [],
  75181. source: "testNonLocalReturn2\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ ^ a] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self assert: ast scope hasNonLocalReturn",
  75182. referencedClasses: ["Smalltalk"],
  75183. //>>excludeEnd("ide");
  75184. messageSends: ["parse:", "visit:", "assert:", "hasNonLocalReturn", "scope"]
  75185. }),
  75186. $globals.SemanticAnalyzerTest);
  75187. $core.addMethod(
  75188. $core.method({
  75189. selector: "testScope",
  75190. protocol: 'tests',
  75191. fn: function (){
  75192. var self=this;
  75193. var src,ast;
  75194. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75196. return $core.withContext(function($ctx1) {
  75197. //>>excludeEnd("ctx");
  75198. var $4,$3,$2,$1;
  75199. src="foo | a | a + 1. [ | b | b := a ]";
  75200. ast=$recv($Smalltalk())._parse_(src);
  75201. $recv(self["@analyzer"])._visit_(ast);
  75202. $4=$recv($recv($recv(ast)._nodes())._first())._nodes();
  75203. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75204. $ctx1.sendIdx["nodes"]=1;
  75205. //>>excludeEnd("ctx");
  75206. $3=$recv($4)._last();
  75207. $2=$recv($3)._scope();
  75208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75209. $ctx1.sendIdx["scope"]=1;
  75210. //>>excludeEnd("ctx");
  75211. $1=$recv($2).__eq_eq($recv(ast)._scope());
  75212. self._deny_($1);
  75213. return self;
  75214. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75215. }, function($ctx1) {$ctx1.fill(self,"testScope",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75216. //>>excludeEnd("ctx");
  75217. },
  75218. //>>excludeStart("ide", pragmas.excludeIdeData);
  75219. args: [],
  75220. source: "testScope\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ | b | b := a ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast nodes first nodes last scope == ast scope.",
  75221. referencedClasses: ["Smalltalk"],
  75222. //>>excludeEnd("ide");
  75223. messageSends: ["parse:", "visit:", "deny:", "==", "scope", "last", "nodes", "first"]
  75224. }),
  75225. $globals.SemanticAnalyzerTest);
  75226. $core.addMethod(
  75227. $core.method({
  75228. selector: "testScope2",
  75229. protocol: 'tests',
  75230. fn: function (){
  75231. var self=this;
  75232. var src,ast;
  75233. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75235. return $core.withContext(function($ctx1) {
  75236. //>>excludeEnd("ctx");
  75237. var $8,$7,$6,$5,$4,$3,$2,$1;
  75238. src="foo | a | a + 1. [ [ | b | b := a ] ]";
  75239. ast=$recv($Smalltalk())._parse_(src);
  75240. $recv(self["@analyzer"])._visit_(ast);
  75241. $8=$recv($recv($recv(ast)._nodes())._first())._nodes();
  75242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75243. $ctx1.sendIdx["nodes"]=3;
  75244. //>>excludeEnd("ctx");
  75245. $7=$recv($8)._last();
  75246. $6=$recv($7)._nodes();
  75247. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75248. $ctx1.sendIdx["nodes"]=2;
  75249. //>>excludeEnd("ctx");
  75250. $5=$recv($6)._first();
  75251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75252. $ctx1.sendIdx["first"]=2;
  75253. //>>excludeEnd("ctx");
  75254. $4=$recv($5)._nodes();
  75255. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75256. $ctx1.sendIdx["nodes"]=1;
  75257. //>>excludeEnd("ctx");
  75258. $3=$recv($4)._first();
  75259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75260. $ctx1.sendIdx["first"]=1;
  75261. //>>excludeEnd("ctx");
  75262. $2=$recv($3)._scope();
  75263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75264. $ctx1.sendIdx["scope"]=1;
  75265. //>>excludeEnd("ctx");
  75266. $1=$recv($2).__eq_eq($recv(ast)._scope());
  75267. self._deny_($1);
  75268. return self;
  75269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75270. }, function($ctx1) {$ctx1.fill(self,"testScope2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75271. //>>excludeEnd("ctx");
  75272. },
  75273. //>>excludeStart("ide", pragmas.excludeIdeData);
  75274. args: [],
  75275. source: "testScope2\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ | b | b := a ] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self deny: ast nodes first nodes last nodes first nodes first scope == ast scope.",
  75276. referencedClasses: ["Smalltalk"],
  75277. //>>excludeEnd("ide");
  75278. messageSends: ["parse:", "visit:", "deny:", "==", "scope", "first", "nodes", "last"]
  75279. }),
  75280. $globals.SemanticAnalyzerTest);
  75281. $core.addMethod(
  75282. $core.method({
  75283. selector: "testScopeLevel",
  75284. protocol: 'tests',
  75285. fn: function (){
  75286. var self=this;
  75287. var src,ast;
  75288. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75289. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75290. return $core.withContext(function($ctx1) {
  75291. //>>excludeEnd("ctx");
  75292. var $2,$1,$10,$9,$8,$7,$6,$5,$4,$3;
  75293. src="foo | a | a + 1. [ [ | b | b := a ] ]";
  75294. ast=$recv($Smalltalk())._parse_(src);
  75295. $recv(self["@analyzer"])._visit_(ast);
  75296. $2=$recv(ast)._scope();
  75297. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75298. $ctx1.sendIdx["scope"]=1;
  75299. //>>excludeEnd("ctx");
  75300. $1=$recv($2)._scopeLevel();
  75301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75302. $ctx1.sendIdx["scopeLevel"]=1;
  75303. //>>excludeEnd("ctx");
  75304. self._assert_equals_($1,(1));
  75305. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75306. $ctx1.sendIdx["assert:equals:"]=1;
  75307. //>>excludeEnd("ctx");
  75308. $10=$recv($recv($recv(ast)._nodes())._first())._nodes();
  75309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75310. $ctx1.sendIdx["nodes"]=3;
  75311. //>>excludeEnd("ctx");
  75312. $9=$recv($10)._last();
  75313. $8=$recv($9)._nodes();
  75314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75315. $ctx1.sendIdx["nodes"]=2;
  75316. //>>excludeEnd("ctx");
  75317. $7=$recv($8)._first();
  75318. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75319. $ctx1.sendIdx["first"]=2;
  75320. //>>excludeEnd("ctx");
  75321. $6=$recv($7)._nodes();
  75322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75323. $ctx1.sendIdx["nodes"]=1;
  75324. //>>excludeEnd("ctx");
  75325. $5=$recv($6)._first();
  75326. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75327. $ctx1.sendIdx["first"]=1;
  75328. //>>excludeEnd("ctx");
  75329. $4=$recv($5)._scope();
  75330. $3=$recv($4)._scopeLevel();
  75331. self._assert_equals_($3,(3));
  75332. return self;
  75333. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75334. }, function($ctx1) {$ctx1.fill(self,"testScopeLevel",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75335. //>>excludeEnd("ctx");
  75336. },
  75337. //>>excludeStart("ide", pragmas.excludeIdeData);
  75338. args: [],
  75339. source: "testScopeLevel\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ [ | b | b := a ] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09self assert: ast scope scopeLevel equals: 1.\x0a\x09self assert: ast nodes first nodes last nodes first nodes first scope scopeLevel equals: 3",
  75340. referencedClasses: ["Smalltalk"],
  75341. //>>excludeEnd("ide");
  75342. messageSends: ["parse:", "visit:", "assert:equals:", "scopeLevel", "scope", "first", "nodes", "last"]
  75343. }),
  75344. $globals.SemanticAnalyzerTest);
  75345. $core.addMethod(
  75346. $core.method({
  75347. selector: "testUnknownVariables",
  75348. protocol: 'tests',
  75349. fn: function (){
  75350. var self=this;
  75351. var src,ast;
  75352. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75353. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  75354. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75355. return $core.withContext(function($ctx1) {
  75356. //>>excludeEnd("ctx");
  75357. src="foo | a | b + a";
  75358. ast=$recv($Smalltalk())._parse_(src);
  75359. self._should_raise_((function(){
  75360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75361. return $core.withContext(function($ctx2) {
  75362. //>>excludeEnd("ctx");
  75363. return $recv(self["@analyzer"])._visit_(ast);
  75364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75365. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75366. //>>excludeEnd("ctx");
  75367. }),$UnknownVariableError());
  75368. return self;
  75369. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75370. }, function($ctx1) {$ctx1.fill(self,"testUnknownVariables",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75371. //>>excludeEnd("ctx");
  75372. },
  75373. //>>excludeStart("ide", pragmas.excludeIdeData);
  75374. args: [],
  75375. source: "testUnknownVariables\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | b + a'.\x0a\x09ast := Smalltalk parse: src.\x0a\x0a\x09self should: [ analyzer visit: ast ] raise: UnknownVariableError",
  75376. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  75377. //>>excludeEnd("ide");
  75378. messageSends: ["parse:", "should:raise:", "visit:"]
  75379. }),
  75380. $globals.SemanticAnalyzerTest);
  75381. $core.addMethod(
  75382. $core.method({
  75383. selector: "testUnknownVariablesWithScope",
  75384. protocol: 'tests',
  75385. fn: function (){
  75386. var self=this;
  75387. var src,ast;
  75388. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75389. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  75390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75391. return $core.withContext(function($ctx1) {
  75392. //>>excludeEnd("ctx");
  75393. src="foo | a b | [ c + 1. [ a + 1. d + 1 ]]";
  75394. ast=$recv($Smalltalk())._parse_(src);
  75395. self._should_raise_((function(){
  75396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75397. return $core.withContext(function($ctx2) {
  75398. //>>excludeEnd("ctx");
  75399. return $recv(self["@analyzer"])._visit_(ast);
  75400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75401. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75402. //>>excludeEnd("ctx");
  75403. }),$UnknownVariableError());
  75404. return self;
  75405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75406. }, function($ctx1) {$ctx1.fill(self,"testUnknownVariablesWithScope",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75407. //>>excludeEnd("ctx");
  75408. },
  75409. //>>excludeStart("ide", pragmas.excludeIdeData);
  75410. args: [],
  75411. source: "testUnknownVariablesWithScope\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a b | [ c + 1. [ a + 1. d + 1 ]]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09\x0a\x09self should: [ analyzer visit: ast ] raise: UnknownVariableError",
  75412. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  75413. //>>excludeEnd("ide");
  75414. messageSends: ["parse:", "should:raise:", "visit:"]
  75415. }),
  75416. $globals.SemanticAnalyzerTest);
  75417. $core.addMethod(
  75418. $core.method({
  75419. selector: "testVariableShadowing",
  75420. protocol: 'tests',
  75421. fn: function (){
  75422. var self=this;
  75423. var src,ast;
  75424. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75425. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75426. return $core.withContext(function($ctx1) {
  75427. //>>excludeEnd("ctx");
  75428. src="foo | a | a + 1";
  75429. ast=$recv($Smalltalk())._parse_(src);
  75430. $recv(self["@analyzer"])._visit_(ast);
  75431. return self;
  75432. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75433. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75434. //>>excludeEnd("ctx");
  75435. },
  75436. //>>excludeStart("ide", pragmas.excludeIdeData);
  75437. args: [],
  75438. source: "testVariableShadowing\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  75439. referencedClasses: ["Smalltalk"],
  75440. //>>excludeEnd("ide");
  75441. messageSends: ["parse:", "visit:"]
  75442. }),
  75443. $globals.SemanticAnalyzerTest);
  75444. $core.addMethod(
  75445. $core.method({
  75446. selector: "testVariableShadowing2",
  75447. protocol: 'tests',
  75448. fn: function (){
  75449. var self=this;
  75450. var src,ast;
  75451. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75452. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  75453. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75454. return $core.withContext(function($ctx1) {
  75455. //>>excludeEnd("ctx");
  75456. src="foo | a | a + 1. [ | a | a := 2 ]";
  75457. ast=$recv($Smalltalk())._parse_(src);
  75458. self._should_raise_((function(){
  75459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75460. return $core.withContext(function($ctx2) {
  75461. //>>excludeEnd("ctx");
  75462. return $recv(self["@analyzer"])._visit_(ast);
  75463. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75464. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75465. //>>excludeEnd("ctx");
  75466. }),$ShadowingVariableError());
  75467. return self;
  75468. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75469. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing2",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75470. //>>excludeEnd("ctx");
  75471. },
  75472. //>>excludeStart("ide", pragmas.excludeIdeData);
  75473. args: [],
  75474. source: "testVariableShadowing2\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ | a | a := 2 ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: ShadowingVariableError",
  75475. referencedClasses: ["Smalltalk", "ShadowingVariableError"],
  75476. //>>excludeEnd("ide");
  75477. messageSends: ["parse:", "should:raise:", "visit:"]
  75478. }),
  75479. $globals.SemanticAnalyzerTest);
  75480. $core.addMethod(
  75481. $core.method({
  75482. selector: "testVariableShadowing3",
  75483. protocol: 'tests',
  75484. fn: function (){
  75485. var self=this;
  75486. var src,ast;
  75487. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75489. return $core.withContext(function($ctx1) {
  75490. //>>excludeEnd("ctx");
  75491. src="foo | a | a + 1. [ | b | b := 2 ]";
  75492. ast=$recv($Smalltalk())._parse_(src);
  75493. $recv(self["@analyzer"])._visit_(ast);
  75494. return self;
  75495. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75496. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing3",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75497. //>>excludeEnd("ctx");
  75498. },
  75499. //>>excludeStart("ide", pragmas.excludeIdeData);
  75500. args: [],
  75501. source: "testVariableShadowing3\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ | b | b := 2 ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  75502. referencedClasses: ["Smalltalk"],
  75503. //>>excludeEnd("ide");
  75504. messageSends: ["parse:", "visit:"]
  75505. }),
  75506. $globals.SemanticAnalyzerTest);
  75507. $core.addMethod(
  75508. $core.method({
  75509. selector: "testVariableShadowing4",
  75510. protocol: 'tests',
  75511. fn: function (){
  75512. var self=this;
  75513. var src,ast;
  75514. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75515. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75516. return $core.withContext(function($ctx1) {
  75517. //>>excludeEnd("ctx");
  75518. src="foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]";
  75519. ast=$recv($Smalltalk())._parse_(src);
  75520. $recv(self["@analyzer"])._visit_(ast);
  75521. return self;
  75522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75523. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing4",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75524. //>>excludeEnd("ctx");
  75525. },
  75526. //>>excludeStart("ide", pragmas.excludeIdeData);
  75527. args: [],
  75528. source: "testVariableShadowing4\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ [ [ | b | b := 2 ] ] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast",
  75529. referencedClasses: ["Smalltalk"],
  75530. //>>excludeEnd("ide");
  75531. messageSends: ["parse:", "visit:"]
  75532. }),
  75533. $globals.SemanticAnalyzerTest);
  75534. $core.addMethod(
  75535. $core.method({
  75536. selector: "testVariableShadowing5",
  75537. protocol: 'tests',
  75538. fn: function (){
  75539. var self=this;
  75540. var src,ast;
  75541. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75542. function $ShadowingVariableError(){return $globals.ShadowingVariableError||(typeof ShadowingVariableError=="undefined"?nil:ShadowingVariableError)}
  75543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75544. return $core.withContext(function($ctx1) {
  75545. //>>excludeEnd("ctx");
  75546. src="foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]";
  75547. ast=$recv($Smalltalk())._parse_(src);
  75548. self._should_raise_((function(){
  75549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75550. return $core.withContext(function($ctx2) {
  75551. //>>excludeEnd("ctx");
  75552. return $recv(self["@analyzer"])._visit_(ast);
  75553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75554. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75555. //>>excludeEnd("ctx");
  75556. }),$ShadowingVariableError());
  75557. return self;
  75558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75559. }, function($ctx1) {$ctx1.fill(self,"testVariableShadowing5",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75560. //>>excludeEnd("ctx");
  75561. },
  75562. //>>excludeStart("ide", pragmas.excludeIdeData);
  75563. args: [],
  75564. source: "testVariableShadowing5\x0a\x09| src ast |\x0a\x09src := 'foo | a | a + 1. [ [ [ | a | a := 2 ] ] ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09self should: [analyzer visit: ast] raise: ShadowingVariableError",
  75565. referencedClasses: ["Smalltalk", "ShadowingVariableError"],
  75566. //>>excludeEnd("ide");
  75567. messageSends: ["parse:", "should:raise:", "visit:"]
  75568. }),
  75569. $globals.SemanticAnalyzerTest);
  75570. $core.addMethod(
  75571. $core.method({
  75572. selector: "testVariablesLookup",
  75573. protocol: 'tests',
  75574. fn: function (){
  75575. var self=this;
  75576. var src,ast;
  75577. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75579. return $core.withContext(function($ctx1) {
  75580. //>>excludeEnd("ctx");
  75581. var $7,$6,$5,$4,$3,$2,$1,$15,$14,$13,$12,$11,$10,$9,$16,$8,$27,$26,$25,$24,$23,$22,$21,$20,$19,$18,$17,$39,$38,$37,$36,$35,$34,$33,$32,$31,$30,$29,$42,$41,$40,$28;
  75582. src="foo | a | a + 1. [ | b | b := a ]";
  75583. ast=$recv($Smalltalk())._parse_(src);
  75584. $recv(self["@analyzer"])._visit_(ast);
  75585. $7=$recv(ast)._nodes();
  75586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75587. $ctx1.sendIdx["nodes"]=2;
  75588. //>>excludeEnd("ctx");
  75589. $6=$recv($7)._first();
  75590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75591. $ctx1.sendIdx["first"]=2;
  75592. //>>excludeEnd("ctx");
  75593. $5=$recv($6)._nodes();
  75594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75595. $ctx1.sendIdx["nodes"]=1;
  75596. //>>excludeEnd("ctx");
  75597. $4=$recv($5)._first();
  75598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75599. $ctx1.sendIdx["first"]=1;
  75600. //>>excludeEnd("ctx");
  75601. $3=$recv($4)._receiver();
  75602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75603. $ctx1.sendIdx["receiver"]=1;
  75604. //>>excludeEnd("ctx");
  75605. $2=$recv($3)._binding();
  75606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75607. $ctx1.sendIdx["binding"]=1;
  75608. //>>excludeEnd("ctx");
  75609. $1=$recv($2)._isTempVar();
  75610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75611. $ctx1.sendIdx["isTempVar"]=1;
  75612. //>>excludeEnd("ctx");
  75613. self._assert_($1);
  75614. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75615. $ctx1.sendIdx["assert:"]=1;
  75616. //>>excludeEnd("ctx");
  75617. $15=$recv(ast)._nodes();
  75618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75619. $ctx1.sendIdx["nodes"]=4;
  75620. //>>excludeEnd("ctx");
  75621. $14=$recv($15)._first();
  75622. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75623. $ctx1.sendIdx["first"]=4;
  75624. //>>excludeEnd("ctx");
  75625. $13=$recv($14)._nodes();
  75626. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75627. $ctx1.sendIdx["nodes"]=3;
  75628. //>>excludeEnd("ctx");
  75629. $12=$recv($13)._first();
  75630. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75631. $ctx1.sendIdx["first"]=3;
  75632. //>>excludeEnd("ctx");
  75633. $11=$recv($12)._receiver();
  75634. $10=$recv($11)._binding();
  75635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75636. $ctx1.sendIdx["binding"]=2;
  75637. //>>excludeEnd("ctx");
  75638. $9=$recv($10)._scope();
  75639. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75640. $ctx1.sendIdx["scope"]=1;
  75641. //>>excludeEnd("ctx");
  75642. $16=$recv(ast)._scope();
  75643. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75644. $ctx1.sendIdx["scope"]=2;
  75645. //>>excludeEnd("ctx");
  75646. $8=$recv($9).__eq_eq($16);
  75647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75648. $ctx1.sendIdx["=="]=1;
  75649. //>>excludeEnd("ctx");
  75650. self._assert_($8);
  75651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75652. $ctx1.sendIdx["assert:"]=2;
  75653. //>>excludeEnd("ctx");
  75654. $27=$recv(ast)._nodes();
  75655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75656. $ctx1.sendIdx["nodes"]=8;
  75657. //>>excludeEnd("ctx");
  75658. $26=$recv($27)._first();
  75659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75660. $ctx1.sendIdx["first"]=7;
  75661. //>>excludeEnd("ctx");
  75662. $25=$recv($26)._nodes();
  75663. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75664. $ctx1.sendIdx["nodes"]=7;
  75665. //>>excludeEnd("ctx");
  75666. $24=$recv($25)._last();
  75667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75668. $ctx1.sendIdx["last"]=1;
  75669. //>>excludeEnd("ctx");
  75670. $23=$recv($24)._nodes();
  75671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75672. $ctx1.sendIdx["nodes"]=6;
  75673. //>>excludeEnd("ctx");
  75674. $22=$recv($23)._first();
  75675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75676. $ctx1.sendIdx["first"]=6;
  75677. //>>excludeEnd("ctx");
  75678. $21=$recv($22)._nodes();
  75679. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75680. $ctx1.sendIdx["nodes"]=5;
  75681. //>>excludeEnd("ctx");
  75682. $20=$recv($21)._first();
  75683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75684. $ctx1.sendIdx["first"]=5;
  75685. //>>excludeEnd("ctx");
  75686. $19=$recv($20)._left();
  75687. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75688. $ctx1.sendIdx["left"]=1;
  75689. //>>excludeEnd("ctx");
  75690. $18=$recv($19)._binding();
  75691. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75692. $ctx1.sendIdx["binding"]=3;
  75693. //>>excludeEnd("ctx");
  75694. $17=$recv($18)._isTempVar();
  75695. self._assert_($17);
  75696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75697. $ctx1.sendIdx["assert:"]=3;
  75698. //>>excludeEnd("ctx");
  75699. $39=$recv(ast)._nodes();
  75700. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75701. $ctx1.sendIdx["nodes"]=12;
  75702. //>>excludeEnd("ctx");
  75703. $38=$recv($39)._first();
  75704. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75705. $ctx1.sendIdx["first"]=10;
  75706. //>>excludeEnd("ctx");
  75707. $37=$recv($38)._nodes();
  75708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75709. $ctx1.sendIdx["nodes"]=11;
  75710. //>>excludeEnd("ctx");
  75711. $36=$recv($37)._last();
  75712. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75713. $ctx1.sendIdx["last"]=2;
  75714. //>>excludeEnd("ctx");
  75715. $35=$recv($36)._nodes();
  75716. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75717. $ctx1.sendIdx["nodes"]=10;
  75718. //>>excludeEnd("ctx");
  75719. $34=$recv($35)._first();
  75720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75721. $ctx1.sendIdx["first"]=9;
  75722. //>>excludeEnd("ctx");
  75723. $33=$recv($34)._nodes();
  75724. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75725. $ctx1.sendIdx["nodes"]=9;
  75726. //>>excludeEnd("ctx");
  75727. $32=$recv($33)._first();
  75728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75729. $ctx1.sendIdx["first"]=8;
  75730. //>>excludeEnd("ctx");
  75731. $31=$recv($32)._left();
  75732. $30=$recv($31)._binding();
  75733. $29=$recv($30)._scope();
  75734. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75735. $ctx1.sendIdx["scope"]=3;
  75736. //>>excludeEnd("ctx");
  75737. $42=$recv($recv($recv(ast)._nodes())._first())._nodes();
  75738. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75739. $ctx1.sendIdx["nodes"]=13;
  75740. //>>excludeEnd("ctx");
  75741. $41=$recv($42)._last();
  75742. $40=$recv($41)._scope();
  75743. $28=$recv($29).__eq_eq($40);
  75744. self._assert_($28);
  75745. return self;
  75746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75747. }, function($ctx1) {$ctx1.fill(self,"testVariablesLookup",{src:src,ast:ast},$globals.SemanticAnalyzerTest)});
  75748. //>>excludeEnd("ctx");
  75749. },
  75750. //>>excludeStart("ide", pragmas.excludeIdeData);
  75751. args: [],
  75752. source: "testVariablesLookup\x0a\x09| src ast |\x0a\x0a\x09src := 'foo | a | a + 1. [ | b | b := a ]'.\x0a\x09ast := Smalltalk parse: src.\x0a\x09analyzer visit: ast.\x0a\x0a\x09\x22Binding for `a` in the message send\x22\x0a\x09self assert: ast nodes first nodes first receiver binding isTempVar.\x0a\x09self assert: ast nodes first nodes first receiver binding scope == ast scope.\x0a\x0a\x09\x22Binding for `b`\x22\x0a\x09self assert: ast nodes first nodes last nodes first nodes first left binding isTempVar.\x0a\x09self assert: ast nodes first nodes last nodes first nodes first left binding scope == ast nodes first nodes last scope.",
  75753. referencedClasses: ["Smalltalk"],
  75754. //>>excludeEnd("ide");
  75755. messageSends: ["parse:", "visit:", "assert:", "isTempVar", "binding", "receiver", "first", "nodes", "==", "scope", "left", "last"]
  75756. }),
  75757. $globals.SemanticAnalyzerTest);
  75758. $core.addClass('AISemanticAnalyzerTest', $globals.SemanticAnalyzerTest, [], 'Compiler-Tests');
  75759. $core.addMethod(
  75760. $core.method({
  75761. selector: "setUp",
  75762. protocol: 'running',
  75763. fn: function (){
  75764. var self=this;
  75765. function $AISemanticAnalyzer(){return $globals.AISemanticAnalyzer||(typeof AISemanticAnalyzer=="undefined"?nil:AISemanticAnalyzer)}
  75766. function $Object(){return $globals.Object||(typeof Object=="undefined"?nil:Object)}
  75767. function $AIContext(){return $globals.AIContext||(typeof AIContext=="undefined"?nil:AIContext)}
  75768. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75769. return $core.withContext(function($ctx1) {
  75770. //>>excludeEnd("ctx");
  75771. var $1,$2,$4,$5,$3,$6;
  75772. $1=$recv($AISemanticAnalyzer())._on_($Object());
  75773. $2=$1;
  75774. $4=$recv($AIContext())._new();
  75775. $recv($4)._defineLocal_("local");
  75776. $recv($4)._localAt_put_("local",(3));
  75777. $5=$recv($4)._yourself();
  75778. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75779. $ctx1.sendIdx["yourself"]=1;
  75780. //>>excludeEnd("ctx");
  75781. $3=$5;
  75782. $recv($2)._context_($3);
  75783. $6=$recv($1)._yourself();
  75784. self["@analyzer"]=$6;
  75785. return self;
  75786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75787. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.AISemanticAnalyzerTest)});
  75788. //>>excludeEnd("ctx");
  75789. },
  75790. //>>excludeStart("ide", pragmas.excludeIdeData);
  75791. args: [],
  75792. source: "setUp\x0a\x09analyzer := (AISemanticAnalyzer on: Object)\x0a\x09\x09context: (AIContext new\x0a\x09\x09\x09defineLocal: 'local';\x0a\x09\x09\x09localAt: 'local' put: 3;\x0a\x09\x09\x09yourself);\x0a\x09\x09yourself",
  75793. referencedClasses: ["AISemanticAnalyzer", "Object", "AIContext"],
  75794. //>>excludeEnd("ide");
  75795. messageSends: ["context:", "on:", "defineLocal:", "new", "localAt:put:", "yourself"]
  75796. }),
  75797. $globals.AISemanticAnalyzerTest);
  75798. $core.addMethod(
  75799. $core.method({
  75800. selector: "testContextVariables",
  75801. protocol: 'tests',
  75802. fn: function (){
  75803. var self=this;
  75804. var src,ast;
  75805. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  75806. function $UnknownVariableError(){return $globals.UnknownVariableError||(typeof UnknownVariableError=="undefined"?nil:UnknownVariableError)}
  75807. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75808. return $core.withContext(function($ctx1) {
  75809. //>>excludeEnd("ctx");
  75810. src="foo | a | local + a";
  75811. ast=$recv($Smalltalk())._parse_(src);
  75812. self._shouldnt_raise_((function(){
  75813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75814. return $core.withContext(function($ctx2) {
  75815. //>>excludeEnd("ctx");
  75816. return $recv(self["@analyzer"])._visit_(ast);
  75817. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75818. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75819. //>>excludeEnd("ctx");
  75820. }),$UnknownVariableError());
  75821. return self;
  75822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75823. }, function($ctx1) {$ctx1.fill(self,"testContextVariables",{src:src,ast:ast},$globals.AISemanticAnalyzerTest)});
  75824. //>>excludeEnd("ctx");
  75825. },
  75826. //>>excludeStart("ide", pragmas.excludeIdeData);
  75827. args: [],
  75828. source: "testContextVariables\x0a\x09| src ast |\x0a\x09\x0a\x09src := 'foo | a | local + a'.\x0a\x09ast := Smalltalk parse: src.\x0a\x0a\x09self shouldnt: [ analyzer visit: ast ] raise: UnknownVariableError",
  75829. referencedClasses: ["Smalltalk", "UnknownVariableError"],
  75830. //>>excludeEnd("ide");
  75831. messageSends: ["parse:", "shouldnt:raise:", "visit:"]
  75832. }),
  75833. $globals.AISemanticAnalyzerTest);
  75834. });
  75835. define("amber_core/SUnit-Tests", ["amber/boot", "amber_core/SUnit"], function($boot){
  75836. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  75837. var smalltalk=$core,_st=$recv,globals=$globals;
  75838. $core.addPackage('SUnit-Tests');
  75839. $core.packages["SUnit-Tests"].transport = {"type":"amd","amdNamespace":"amber_core"};
  75840. $core.addClass('ExampleSetTest', $globals.TestCase, ['empty', 'full'], 'SUnit-Tests');
  75841. //>>excludeStart("ide", pragmas.excludeIdeData);
  75842. $globals.ExampleSetTest.comment="ExampleSetTest is taken from Pharo 1.4.\x0a\x0aTHe purpose of this class is to demonstrate a simple use case of the test framework.";
  75843. //>>excludeEnd("ide");
  75844. $core.addMethod(
  75845. $core.method({
  75846. selector: "setUp",
  75847. protocol: 'running',
  75848. fn: function (){
  75849. var self=this;
  75850. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  75851. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75852. return $core.withContext(function($ctx1) {
  75853. //>>excludeEnd("ctx");
  75854. self["@empty"]=$recv($Set())._new();
  75855. self["@full"]=$recv($Set())._with_with_((5),"abc");
  75856. return self;
  75857. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75858. }, function($ctx1) {$ctx1.fill(self,"setUp",{},$globals.ExampleSetTest)});
  75859. //>>excludeEnd("ctx");
  75860. },
  75861. //>>excludeStart("ide", pragmas.excludeIdeData);
  75862. args: [],
  75863. source: "setUp\x0a\x09empty := Set new.\x0a\x09full := Set with: 5 with: #abc",
  75864. referencedClasses: ["Set"],
  75865. //>>excludeEnd("ide");
  75866. messageSends: ["new", "with:with:"]
  75867. }),
  75868. $globals.ExampleSetTest);
  75869. $core.addMethod(
  75870. $core.method({
  75871. selector: "testAdd",
  75872. protocol: 'tests',
  75873. fn: function (){
  75874. var self=this;
  75875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75876. return $core.withContext(function($ctx1) {
  75877. //>>excludeEnd("ctx");
  75878. $recv(self["@empty"])._add_((5));
  75879. self._assert_($recv(self["@empty"])._includes_((5)));
  75880. return self;
  75881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75882. }, function($ctx1) {$ctx1.fill(self,"testAdd",{},$globals.ExampleSetTest)});
  75883. //>>excludeEnd("ctx");
  75884. },
  75885. //>>excludeStart("ide", pragmas.excludeIdeData);
  75886. args: [],
  75887. source: "testAdd\x0a\x09empty add: 5.\x0a\x09self assert: (empty includes: 5)",
  75888. referencedClasses: [],
  75889. //>>excludeEnd("ide");
  75890. messageSends: ["add:", "assert:", "includes:"]
  75891. }),
  75892. $globals.ExampleSetTest);
  75893. $core.addMethod(
  75894. $core.method({
  75895. selector: "testGrow",
  75896. protocol: 'tests',
  75897. fn: function (){
  75898. var self=this;
  75899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75900. return $core.withContext(function($ctx1) {
  75901. //>>excludeEnd("ctx");
  75902. $recv(self["@empty"])._addAll_((1)._to_((100)));
  75903. self._assert_equals_($recv(self["@empty"])._size(),(100));
  75904. return self;
  75905. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75906. }, function($ctx1) {$ctx1.fill(self,"testGrow",{},$globals.ExampleSetTest)});
  75907. //>>excludeEnd("ctx");
  75908. },
  75909. //>>excludeStart("ide", pragmas.excludeIdeData);
  75910. args: [],
  75911. source: "testGrow\x0a\x09empty addAll: (1 to: 100).\x0a\x09self assert: empty size equals: 100",
  75912. referencedClasses: [],
  75913. //>>excludeEnd("ide");
  75914. messageSends: ["addAll:", "to:", "assert:equals:", "size"]
  75915. }),
  75916. $globals.ExampleSetTest);
  75917. $core.addMethod(
  75918. $core.method({
  75919. selector: "testIllegal",
  75920. protocol: 'tests',
  75921. fn: function (){
  75922. var self=this;
  75923. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  75924. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75925. return $core.withContext(function($ctx1) {
  75926. //>>excludeEnd("ctx");
  75927. self._should_raise_((function(){
  75928. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75929. return $core.withContext(function($ctx2) {
  75930. //>>excludeEnd("ctx");
  75931. return $recv(self["@empty"])._at_((5));
  75932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75933. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  75934. //>>excludeEnd("ctx");
  75935. }),$Error());
  75936. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75937. $ctx1.sendIdx["should:raise:"]=1;
  75938. //>>excludeEnd("ctx");
  75939. self._should_raise_((function(){
  75940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75941. return $core.withContext(function($ctx2) {
  75942. //>>excludeEnd("ctx");
  75943. return $recv(self["@empty"])._at_put_((5),"abc");
  75944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75945. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  75946. //>>excludeEnd("ctx");
  75947. }),$Error());
  75948. return self;
  75949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75950. }, function($ctx1) {$ctx1.fill(self,"testIllegal",{},$globals.ExampleSetTest)});
  75951. //>>excludeEnd("ctx");
  75952. },
  75953. //>>excludeStart("ide", pragmas.excludeIdeData);
  75954. args: [],
  75955. source: "testIllegal\x0a\x09self\x0a\x09\x09should: [ empty at: 5 ]\x0a\x09\x09raise: Error.\x0a\x09self\x0a\x09\x09should: [ empty at: 5 put: #abc ]\x0a\x09\x09raise: Error",
  75956. referencedClasses: ["Error"],
  75957. //>>excludeEnd("ide");
  75958. messageSends: ["should:raise:", "at:", "at:put:"]
  75959. }),
  75960. $globals.ExampleSetTest);
  75961. $core.addMethod(
  75962. $core.method({
  75963. selector: "testIncludes",
  75964. protocol: 'tests',
  75965. fn: function (){
  75966. var self=this;
  75967. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75968. return $core.withContext(function($ctx1) {
  75969. //>>excludeEnd("ctx");
  75970. var $1;
  75971. $1=$recv(self["@full"])._includes_((5));
  75972. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75973. $ctx1.sendIdx["includes:"]=1;
  75974. //>>excludeEnd("ctx");
  75975. self._assert_($1);
  75976. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75977. $ctx1.sendIdx["assert:"]=1;
  75978. //>>excludeEnd("ctx");
  75979. self._assert_($recv(self["@full"])._includes_("abc"));
  75980. return self;
  75981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  75982. }, function($ctx1) {$ctx1.fill(self,"testIncludes",{},$globals.ExampleSetTest)});
  75983. //>>excludeEnd("ctx");
  75984. },
  75985. //>>excludeStart("ide", pragmas.excludeIdeData);
  75986. args: [],
  75987. source: "testIncludes\x0a\x09self assert: (full includes: 5).\x0a\x09self assert: (full includes: #abc)",
  75988. referencedClasses: [],
  75989. //>>excludeEnd("ide");
  75990. messageSends: ["assert:", "includes:"]
  75991. }),
  75992. $globals.ExampleSetTest);
  75993. $core.addMethod(
  75994. $core.method({
  75995. selector: "testOccurrences",
  75996. protocol: 'tests',
  75997. fn: function (){
  75998. var self=this;
  75999. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76000. return $core.withContext(function($ctx1) {
  76001. //>>excludeEnd("ctx");
  76002. var $1,$2;
  76003. $1=$recv(self["@empty"])._occurrencesOf_((0));
  76004. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76005. $ctx1.sendIdx["occurrencesOf:"]=1;
  76006. //>>excludeEnd("ctx");
  76007. self._assert_equals_($1,(0));
  76008. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76009. $ctx1.sendIdx["assert:equals:"]=1;
  76010. //>>excludeEnd("ctx");
  76011. $2=$recv(self["@full"])._occurrencesOf_((5));
  76012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76013. $ctx1.sendIdx["occurrencesOf:"]=2;
  76014. //>>excludeEnd("ctx");
  76015. self._assert_equals_($2,(1));
  76016. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76017. $ctx1.sendIdx["assert:equals:"]=2;
  76018. //>>excludeEnd("ctx");
  76019. $recv(self["@full"])._add_((5));
  76020. self._assert_equals_($recv(self["@full"])._occurrencesOf_((5)),(1));
  76021. return self;
  76022. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76023. }, function($ctx1) {$ctx1.fill(self,"testOccurrences",{},$globals.ExampleSetTest)});
  76024. //>>excludeEnd("ctx");
  76025. },
  76026. //>>excludeStart("ide", pragmas.excludeIdeData);
  76027. args: [],
  76028. source: "testOccurrences\x0a\x09self assert: (empty occurrencesOf: 0) equals: 0.\x0a\x09self assert: (full occurrencesOf: 5) equals: 1.\x0a\x09full add: 5.\x0a\x09self assert: (full occurrencesOf: 5) equals: 1",
  76029. referencedClasses: [],
  76030. //>>excludeEnd("ide");
  76031. messageSends: ["assert:equals:", "occurrencesOf:", "add:"]
  76032. }),
  76033. $globals.ExampleSetTest);
  76034. $core.addMethod(
  76035. $core.method({
  76036. selector: "testRemove",
  76037. protocol: 'tests',
  76038. fn: function (){
  76039. var self=this;
  76040. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76041. return $core.withContext(function($ctx1) {
  76042. //>>excludeEnd("ctx");
  76043. var $1;
  76044. $recv(self["@full"])._remove_((5));
  76045. $1=$recv(self["@full"])._includes_("abc");
  76046. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76047. $ctx1.sendIdx["includes:"]=1;
  76048. //>>excludeEnd("ctx");
  76049. self._assert_($1);
  76050. self._deny_($recv(self["@full"])._includes_((5)));
  76051. return self;
  76052. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76053. }, function($ctx1) {$ctx1.fill(self,"testRemove",{},$globals.ExampleSetTest)});
  76054. //>>excludeEnd("ctx");
  76055. },
  76056. //>>excludeStart("ide", pragmas.excludeIdeData);
  76057. args: [],
  76058. source: "testRemove\x0a\x09full remove: 5.\x0a\x09self assert: (full includes: #abc).\x0a\x09self deny: (full includes: 5)",
  76059. referencedClasses: [],
  76060. //>>excludeEnd("ide");
  76061. messageSends: ["remove:", "assert:", "includes:", "deny:"]
  76062. }),
  76063. $globals.ExampleSetTest);
  76064. $core.addClass('SUnitAsyncTest', $globals.TestCase, ['flag'], 'SUnit-Tests');
  76065. $core.addMethod(
  76066. $core.method({
  76067. selector: "fakeError",
  76068. protocol: 'helpers',
  76069. fn: function (){
  76070. var self=this;
  76071. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76072. return $core.withContext(function($ctx1) {
  76073. //>>excludeEnd("ctx");
  76074. self["@flag"]="bad";
  76075. self._timeout_((30));
  76076. self["@flag"]=$recv(self._async_((function(){
  76077. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76078. return $core.withContext(function($ctx2) {
  76079. //>>excludeEnd("ctx");
  76080. self["@flag"]="ok";
  76081. self["@flag"];
  76082. return self._error_("Intentional");
  76083. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76084. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76085. //>>excludeEnd("ctx");
  76086. })))._valueWithTimeout_((20));
  76087. return self;
  76088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76089. }, function($ctx1) {$ctx1.fill(self,"fakeError",{},$globals.SUnitAsyncTest)});
  76090. //>>excludeEnd("ctx");
  76091. },
  76092. //>>excludeStart("ide", pragmas.excludeIdeData);
  76093. args: [],
  76094. source: "fakeError\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ flag := 'ok'. self error: 'Intentional' ]) valueWithTimeout: 20",
  76095. referencedClasses: [],
  76096. //>>excludeEnd("ide");
  76097. messageSends: ["timeout:", "valueWithTimeout:", "async:", "error:"]
  76098. }),
  76099. $globals.SUnitAsyncTest);
  76100. $core.addMethod(
  76101. $core.method({
  76102. selector: "fakeErrorFailingInTearDown",
  76103. protocol: 'helpers',
  76104. fn: function (){
  76105. var self=this;
  76106. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76107. return $core.withContext(function($ctx1) {
  76108. //>>excludeEnd("ctx");
  76109. self["@flag"]="bad";
  76110. self._timeout_((30));
  76111. self["@flag"]=$recv(self._async_((function(){
  76112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76113. return $core.withContext(function($ctx2) {
  76114. //>>excludeEnd("ctx");
  76115. return self._error_("Intentional");
  76116. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76117. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76118. //>>excludeEnd("ctx");
  76119. })))._valueWithTimeout_((20));
  76120. return self;
  76121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76122. }, function($ctx1) {$ctx1.fill(self,"fakeErrorFailingInTearDown",{},$globals.SUnitAsyncTest)});
  76123. //>>excludeEnd("ctx");
  76124. },
  76125. //>>excludeStart("ide", pragmas.excludeIdeData);
  76126. args: [],
  76127. source: "fakeErrorFailingInTearDown\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ self error: 'Intentional' ]) valueWithTimeout: 20",
  76128. referencedClasses: [],
  76129. //>>excludeEnd("ide");
  76130. messageSends: ["timeout:", "valueWithTimeout:", "async:", "error:"]
  76131. }),
  76132. $globals.SUnitAsyncTest);
  76133. $core.addMethod(
  76134. $core.method({
  76135. selector: "fakeFailure",
  76136. protocol: 'helpers',
  76137. fn: function (){
  76138. var self=this;
  76139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76140. return $core.withContext(function($ctx1) {
  76141. //>>excludeEnd("ctx");
  76142. self["@flag"]="bad";
  76143. self._timeout_((30));
  76144. self["@flag"]=$recv(self._async_((function(){
  76145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76146. return $core.withContext(function($ctx2) {
  76147. //>>excludeEnd("ctx");
  76148. self["@flag"]="ok";
  76149. self["@flag"];
  76150. return self._assert_(false);
  76151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76152. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76153. //>>excludeEnd("ctx");
  76154. })))._valueWithTimeout_((20));
  76155. return self;
  76156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76157. }, function($ctx1) {$ctx1.fill(self,"fakeFailure",{},$globals.SUnitAsyncTest)});
  76158. //>>excludeEnd("ctx");
  76159. },
  76160. //>>excludeStart("ide", pragmas.excludeIdeData);
  76161. args: [],
  76162. source: "fakeFailure\x0a\x09flag := 'bad'.\x0a\x09self timeout: 30.\x0a\x09flag := (self async: [ flag := 'ok'. self assert: false ]) valueWithTimeout: 20",
  76163. referencedClasses: [],
  76164. //>>excludeEnd("ide");
  76165. messageSends: ["timeout:", "valueWithTimeout:", "async:", "assert:"]
  76166. }),
  76167. $globals.SUnitAsyncTest);
  76168. $core.addMethod(
  76169. $core.method({
  76170. selector: "fakeMultipleTimeoutFailing",
  76171. protocol: 'helpers',
  76172. fn: function (){
  76173. var self=this;
  76174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76175. return $core.withContext(function($ctx1) {
  76176. //>>excludeEnd("ctx");
  76177. var $1;
  76178. self._timeout_((100));
  76179. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76180. $ctx1.sendIdx["timeout:"]=1;
  76181. //>>excludeEnd("ctx");
  76182. $1=self._async_((function(){
  76183. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76184. return $core.withContext(function($ctx2) {
  76185. //>>excludeEnd("ctx");
  76186. self._timeout_((20));
  76187. return $recv(self._async_((function(){
  76188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76189. return $core.withContext(function($ctx3) {
  76190. //>>excludeEnd("ctx");
  76191. return self._finished();
  76192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76193. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  76194. //>>excludeEnd("ctx");
  76195. })))._valueWithTimeout_((30));
  76196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76197. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76198. //>>excludeEnd("ctx");
  76199. }));
  76200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76201. $ctx1.sendIdx["async:"]=1;
  76202. //>>excludeEnd("ctx");
  76203. $recv($1)._valueWithTimeout_((20));
  76204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76205. $ctx1.sendIdx["valueWithTimeout:"]=1;
  76206. //>>excludeEnd("ctx");
  76207. return self;
  76208. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76209. }, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutFailing",{},$globals.SUnitAsyncTest)});
  76210. //>>excludeEnd("ctx");
  76211. },
  76212. //>>excludeStart("ide", pragmas.excludeIdeData);
  76213. args: [],
  76214. source: "fakeMultipleTimeoutFailing\x0a\x09self timeout: 100.\x0a\x09(self async: [ \x0a\x09\x09self timeout: 20.\x0a\x09\x09(self async: [ self finished ]) valueWithTimeout: 30\x0a\x09]) valueWithTimeout: 20",
  76215. referencedClasses: [],
  76216. //>>excludeEnd("ide");
  76217. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  76218. }),
  76219. $globals.SUnitAsyncTest);
  76220. $core.addMethod(
  76221. $core.method({
  76222. selector: "fakeMultipleTimeoutPassing",
  76223. protocol: 'helpers',
  76224. fn: function (){
  76225. var self=this;
  76226. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76227. return $core.withContext(function($ctx1) {
  76228. //>>excludeEnd("ctx");
  76229. var $1;
  76230. self._timeout_((20));
  76231. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76232. $ctx1.sendIdx["timeout:"]=1;
  76233. //>>excludeEnd("ctx");
  76234. $1=self._async_((function(){
  76235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76236. return $core.withContext(function($ctx2) {
  76237. //>>excludeEnd("ctx");
  76238. self._timeout_((40));
  76239. return $recv(self._async_((function(){
  76240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76241. return $core.withContext(function($ctx3) {
  76242. //>>excludeEnd("ctx");
  76243. return self._finished();
  76244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76245. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  76246. //>>excludeEnd("ctx");
  76247. })))._valueWithTimeout_((20));
  76248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76249. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76250. //>>excludeEnd("ctx");
  76251. }));
  76252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76253. $ctx1.sendIdx["async:"]=1;
  76254. //>>excludeEnd("ctx");
  76255. $recv($1)._valueWithTimeout_((10));
  76256. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76257. $ctx1.sendIdx["valueWithTimeout:"]=1;
  76258. //>>excludeEnd("ctx");
  76259. return self;
  76260. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76261. }, function($ctx1) {$ctx1.fill(self,"fakeMultipleTimeoutPassing",{},$globals.SUnitAsyncTest)});
  76262. //>>excludeEnd("ctx");
  76263. },
  76264. //>>excludeStart("ide", pragmas.excludeIdeData);
  76265. args: [],
  76266. source: "fakeMultipleTimeoutPassing\x0a\x09self timeout: 20.\x0a\x09(self async: [\x0a\x09\x09self timeout: 40.\x0a\x09\x09(self async: [ self finished ]) valueWithTimeout: 20\x0a\x09]) valueWithTimeout: 10",
  76267. referencedClasses: [],
  76268. //>>excludeEnd("ide");
  76269. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  76270. }),
  76271. $globals.SUnitAsyncTest);
  76272. $core.addMethod(
  76273. $core.method({
  76274. selector: "fakeTimeout",
  76275. protocol: 'helpers',
  76276. fn: function (){
  76277. var self=this;
  76278. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76279. return $core.withContext(function($ctx1) {
  76280. //>>excludeEnd("ctx");
  76281. self._timeout_((10));
  76282. $recv(self._async_((function(){
  76283. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76284. return $core.withContext(function($ctx2) {
  76285. //>>excludeEnd("ctx");
  76286. return self._finished();
  76287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76288. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76289. //>>excludeEnd("ctx");
  76290. })))._valueWithTimeout_((20));
  76291. return self;
  76292. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76293. }, function($ctx1) {$ctx1.fill(self,"fakeTimeout",{},$globals.SUnitAsyncTest)});
  76294. //>>excludeEnd("ctx");
  76295. },
  76296. //>>excludeStart("ide", pragmas.excludeIdeData);
  76297. args: [],
  76298. source: "fakeTimeout\x0a\x09self timeout: 10.\x0a\x09(self async: [ self finished ]) valueWithTimeout: 20",
  76299. referencedClasses: [],
  76300. //>>excludeEnd("ide");
  76301. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished"]
  76302. }),
  76303. $globals.SUnitAsyncTest);
  76304. $core.addMethod(
  76305. $core.method({
  76306. selector: "selectorSetOf:",
  76307. protocol: 'private',
  76308. fn: function (aCollection){
  76309. var self=this;
  76310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76311. return $core.withContext(function($ctx1) {
  76312. //>>excludeEnd("ctx");
  76313. var $1;
  76314. $1=$recv($recv(aCollection)._collect_((function(each){
  76315. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76316. return $core.withContext(function($ctx2) {
  76317. //>>excludeEnd("ctx");
  76318. return $recv(each)._selector();
  76319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76320. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76321. //>>excludeEnd("ctx");
  76322. })))._asSet();
  76323. return $1;
  76324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76325. }, function($ctx1) {$ctx1.fill(self,"selectorSetOf:",{aCollection:aCollection},$globals.SUnitAsyncTest)});
  76326. //>>excludeEnd("ctx");
  76327. },
  76328. //>>excludeStart("ide", pragmas.excludeIdeData);
  76329. args: ["aCollection"],
  76330. source: "selectorSetOf: aCollection\x0a\x09^ (aCollection collect: [ :each | each selector ]) asSet",
  76331. referencedClasses: [],
  76332. //>>excludeEnd("ide");
  76333. messageSends: ["asSet", "collect:", "selector"]
  76334. }),
  76335. $globals.SUnitAsyncTest);
  76336. $core.addMethod(
  76337. $core.method({
  76338. selector: "setUp",
  76339. protocol: 'running',
  76340. fn: function (){
  76341. var self=this;
  76342. self["@flag"]="ok";
  76343. return self;
  76344. },
  76345. //>>excludeStart("ide", pragmas.excludeIdeData);
  76346. args: [],
  76347. source: "setUp\x0a\x09flag := 'ok'",
  76348. referencedClasses: [],
  76349. //>>excludeEnd("ide");
  76350. messageSends: []
  76351. }),
  76352. $globals.SUnitAsyncTest);
  76353. $core.addMethod(
  76354. $core.method({
  76355. selector: "tearDown",
  76356. protocol: 'running',
  76357. fn: function (){
  76358. var self=this;
  76359. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76360. return $core.withContext(function($ctx1) {
  76361. //>>excludeEnd("ctx");
  76362. self._assert_equals_("ok",self["@flag"]);
  76363. return self;
  76364. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76365. }, function($ctx1) {$ctx1.fill(self,"tearDown",{},$globals.SUnitAsyncTest)});
  76366. //>>excludeEnd("ctx");
  76367. },
  76368. //>>excludeStart("ide", pragmas.excludeIdeData);
  76369. args: [],
  76370. source: "tearDown\x0a\x09self assert: 'ok' equals: flag",
  76371. referencedClasses: [],
  76372. //>>excludeEnd("ide");
  76373. messageSends: ["assert:equals:"]
  76374. }),
  76375. $globals.SUnitAsyncTest);
  76376. $core.addMethod(
  76377. $core.method({
  76378. selector: "testAsyncErrorsAndFailures",
  76379. protocol: 'tests',
  76380. fn: function (){
  76381. var self=this;
  76382. var suite,runner,result,assertBlock;
  76383. function $TestSuiteRunner(){return $globals.TestSuiteRunner||(typeof TestSuiteRunner=="undefined"?nil:TestSuiteRunner)}
  76384. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  76385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76386. return $core.withContext(function($ctx1) {
  76387. //>>excludeEnd("ctx");
  76388. var $1,$2,$3,$4;
  76389. suite=["fakeError", "fakeErrorFailingInTearDown", "fakeFailure", "testPass"]._collect_((function(each){
  76390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76391. return $core.withContext(function($ctx2) {
  76392. //>>excludeEnd("ctx");
  76393. return $recv(self._class())._selector_(each);
  76394. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76395. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76396. //>>excludeEnd("ctx");
  76397. }));
  76398. runner=$recv($TestSuiteRunner())._on_(suite);
  76399. self._timeout_((200));
  76400. result=$recv(runner)._result();
  76401. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76402. $ctx1.sendIdx["result"]=1;
  76403. //>>excludeEnd("ctx");
  76404. assertBlock=self._async_((function(){
  76405. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76406. return $core.withContext(function($ctx2) {
  76407. //>>excludeEnd("ctx");
  76408. $1=self._selectorSetOf_($recv(result)._errors());
  76409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76410. $ctx2.sendIdx["selectorSetOf:"]=1;
  76411. //>>excludeEnd("ctx");
  76412. $2=["fakeError"]._asSet();
  76413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76414. $ctx2.sendIdx["asSet"]=1;
  76415. //>>excludeEnd("ctx");
  76416. self._assert_equals_($1,$2);
  76417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76418. $ctx2.sendIdx["assert:equals:"]=1;
  76419. //>>excludeEnd("ctx");
  76420. self._assert_equals_(self._selectorSetOf_($recv(result)._failures()),["fakeErrorFailingInTearDown", "fakeFailure"]._asSet());
  76421. return self._finished();
  76422. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76423. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  76424. //>>excludeEnd("ctx");
  76425. }));
  76426. $recv($recv(runner)._announcer())._on_do_($ResultAnnouncement(),(function(ann){
  76427. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76428. return $core.withContext(function($ctx2) {
  76429. //>>excludeEnd("ctx");
  76430. $3=$recv($recv(ann)._result()).__eq_eq(result);
  76431. if($core.assert($3)){
  76432. $4=$recv($recv(result)._runs()).__eq($recv(result)._total());
  76433. return $recv($4)._ifTrue_(assertBlock);
  76434. };
  76435. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76436. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)});
  76437. //>>excludeEnd("ctx");
  76438. }));
  76439. $recv(runner)._run();
  76440. return self;
  76441. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76442. }, function($ctx1) {$ctx1.fill(self,"testAsyncErrorsAndFailures",{suite:suite,runner:runner,result:result,assertBlock:assertBlock},$globals.SUnitAsyncTest)});
  76443. //>>excludeEnd("ctx");
  76444. },
  76445. //>>excludeStart("ide", pragmas.excludeIdeData);
  76446. args: [],
  76447. source: "testAsyncErrorsAndFailures\x0a\x09| suite runner result assertBlock |\x0a\x09suite := #('fakeError' 'fakeErrorFailingInTearDown' 'fakeFailure' 'testPass') collect: [ :each | self class selector: each ].\x0a\x09runner := TestSuiteRunner on: suite.\x0a\x09self timeout: 200.\x0a\x09result := runner result.\x0a\x09assertBlock := self async: [\x0a\x09\x09self assert: (self selectorSetOf: result errors) equals: #('fakeError') asSet.\x0a\x09\x09self assert: (self selectorSetOf: result failures) equals: #('fakeErrorFailingInTearDown' 'fakeFailure') asSet.\x0a\x09\x09self finished\x0a\x09].\x0a\x09runner announcer on: ResultAnnouncement do: [ :ann |\x0a\x09\x09ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ] ].\x0a\x09runner run",
  76448. referencedClasses: ["TestSuiteRunner", "ResultAnnouncement"],
  76449. //>>excludeEnd("ide");
  76450. messageSends: ["collect:", "selector:", "class", "on:", "timeout:", "result", "async:", "assert:equals:", "selectorSetOf:", "errors", "asSet", "failures", "finished", "on:do:", "announcer", "ifTrue:", "==", "=", "runs", "total", "run"]
  76451. }),
  76452. $globals.SUnitAsyncTest);
  76453. $core.addMethod(
  76454. $core.method({
  76455. selector: "testAsyncNeedsTimeout",
  76456. protocol: 'tests',
  76457. fn: function (){
  76458. var self=this;
  76459. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  76460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76461. return $core.withContext(function($ctx1) {
  76462. //>>excludeEnd("ctx");
  76463. self._should_raise_((function(){
  76464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76465. return $core.withContext(function($ctx2) {
  76466. //>>excludeEnd("ctx");
  76467. return self._async_((function(){
  76468. }));
  76469. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76470. $ctx2.sendIdx["async:"]=1;
  76471. //>>excludeEnd("ctx");
  76472. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76473. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76474. //>>excludeEnd("ctx");
  76475. }),$Error());
  76476. self._timeout_((0));
  76477. self._shouldnt_raise_((function(){
  76478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76479. return $core.withContext(function($ctx2) {
  76480. //>>excludeEnd("ctx");
  76481. return self._async_((function(){
  76482. }));
  76483. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76484. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  76485. //>>excludeEnd("ctx");
  76486. }),$Error());
  76487. self._finished();
  76488. return self;
  76489. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76490. }, function($ctx1) {$ctx1.fill(self,"testAsyncNeedsTimeout",{},$globals.SUnitAsyncTest)});
  76491. //>>excludeEnd("ctx");
  76492. },
  76493. //>>excludeStart("ide", pragmas.excludeIdeData);
  76494. args: [],
  76495. source: "testAsyncNeedsTimeout\x0a\x09self should: [ self async: [ ] ] raise: Error.\x0a\x09self timeout: 0.\x0a\x09self shouldnt: [ self async: [ ] ] raise: Error.\x0a\x09self finished",
  76496. referencedClasses: ["Error"],
  76497. //>>excludeEnd("ide");
  76498. messageSends: ["should:raise:", "async:", "timeout:", "shouldnt:raise:", "finished"]
  76499. }),
  76500. $globals.SUnitAsyncTest);
  76501. $core.addMethod(
  76502. $core.method({
  76503. selector: "testFinishedNeedsTimeout",
  76504. protocol: 'tests',
  76505. fn: function (){
  76506. var self=this;
  76507. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  76508. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76509. return $core.withContext(function($ctx1) {
  76510. //>>excludeEnd("ctx");
  76511. self._should_raise_((function(){
  76512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76513. return $core.withContext(function($ctx2) {
  76514. //>>excludeEnd("ctx");
  76515. return self._finished();
  76516. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76517. $ctx2.sendIdx["finished"]=1;
  76518. //>>excludeEnd("ctx");
  76519. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76520. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76521. //>>excludeEnd("ctx");
  76522. }),$Error());
  76523. self._timeout_((0));
  76524. self._shouldnt_raise_((function(){
  76525. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76526. return $core.withContext(function($ctx2) {
  76527. //>>excludeEnd("ctx");
  76528. return self._finished();
  76529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76530. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  76531. //>>excludeEnd("ctx");
  76532. }),$Error());
  76533. return self;
  76534. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76535. }, function($ctx1) {$ctx1.fill(self,"testFinishedNeedsTimeout",{},$globals.SUnitAsyncTest)});
  76536. //>>excludeEnd("ctx");
  76537. },
  76538. //>>excludeStart("ide", pragmas.excludeIdeData);
  76539. args: [],
  76540. source: "testFinishedNeedsTimeout\x0a\x09self should: [ self finished ] raise: Error.\x0a\x09self timeout: 0.\x0a\x09self shouldnt: [ self finished ] raise: Error.",
  76541. referencedClasses: ["Error"],
  76542. //>>excludeEnd("ide");
  76543. messageSends: ["should:raise:", "finished", "timeout:", "shouldnt:raise:"]
  76544. }),
  76545. $globals.SUnitAsyncTest);
  76546. $core.addMethod(
  76547. $core.method({
  76548. selector: "testIsAsyncReturnsCorrectValues",
  76549. protocol: 'tests',
  76550. fn: function (){
  76551. var self=this;
  76552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76553. return $core.withContext(function($ctx1) {
  76554. //>>excludeEnd("ctx");
  76555. var $1,$2;
  76556. $1=self._isAsync();
  76557. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76558. $ctx1.sendIdx["isAsync"]=1;
  76559. //>>excludeEnd("ctx");
  76560. self._deny_($1);
  76561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76562. $ctx1.sendIdx["deny:"]=1;
  76563. //>>excludeEnd("ctx");
  76564. self._timeout_((0));
  76565. $2=self._isAsync();
  76566. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76567. $ctx1.sendIdx["isAsync"]=2;
  76568. //>>excludeEnd("ctx");
  76569. self._assert_($2);
  76570. self._finished();
  76571. self._deny_(self._isAsync());
  76572. return self;
  76573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76574. }, function($ctx1) {$ctx1.fill(self,"testIsAsyncReturnsCorrectValues",{},$globals.SUnitAsyncTest)});
  76575. //>>excludeEnd("ctx");
  76576. },
  76577. //>>excludeStart("ide", pragmas.excludeIdeData);
  76578. args: [],
  76579. source: "testIsAsyncReturnsCorrectValues\x0a\x09self deny: self isAsync.\x0a\x09self timeout: 0.\x0a\x09self assert: self isAsync.\x0a\x09self finished.\x0a\x09self deny: self isAsync",
  76580. referencedClasses: [],
  76581. //>>excludeEnd("ide");
  76582. messageSends: ["deny:", "isAsync", "timeout:", "assert:", "finished"]
  76583. }),
  76584. $globals.SUnitAsyncTest);
  76585. $core.addMethod(
  76586. $core.method({
  76587. selector: "testPass",
  76588. protocol: 'tests',
  76589. fn: function (){
  76590. var self=this;
  76591. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76592. return $core.withContext(function($ctx1) {
  76593. //>>excludeEnd("ctx");
  76594. self["@flag"]="bad";
  76595. self._timeout_((10));
  76596. self["@flag"]=$recv(self._async_((function(){
  76597. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76598. return $core.withContext(function($ctx2) {
  76599. //>>excludeEnd("ctx");
  76600. self._assert_(true);
  76601. self._finished();
  76602. self["@flag"]="ok";
  76603. return self["@flag"];
  76604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76605. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76606. //>>excludeEnd("ctx");
  76607. })))._valueWithTimeout_((5));
  76608. return self;
  76609. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76610. }, function($ctx1) {$ctx1.fill(self,"testPass",{},$globals.SUnitAsyncTest)});
  76611. //>>excludeEnd("ctx");
  76612. },
  76613. //>>excludeStart("ide", pragmas.excludeIdeData);
  76614. args: [],
  76615. source: "testPass\x0a\x09flag := 'bad'.\x0a\x09self timeout: 10.\x0a\x09flag := (self async: [ self assert: true. self finished. flag := 'ok' ]) valueWithTimeout: 5",
  76616. referencedClasses: [],
  76617. //>>excludeEnd("ide");
  76618. messageSends: ["timeout:", "valueWithTimeout:", "async:", "assert:", "finished"]
  76619. }),
  76620. $globals.SUnitAsyncTest);
  76621. $core.addMethod(
  76622. $core.method({
  76623. selector: "testTimeouts",
  76624. protocol: 'tests',
  76625. fn: function (){
  76626. var self=this;
  76627. var suite,runner,result,assertBlock;
  76628. function $TestSuiteRunner(){return $globals.TestSuiteRunner||(typeof TestSuiteRunner=="undefined"?nil:TestSuiteRunner)}
  76629. function $Set(){return $globals.Set||(typeof Set=="undefined"?nil:Set)}
  76630. function $ResultAnnouncement(){return $globals.ResultAnnouncement||(typeof ResultAnnouncement=="undefined"?nil:ResultAnnouncement)}
  76631. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76632. return $core.withContext(function($ctx1) {
  76633. //>>excludeEnd("ctx");
  76634. var $1,$2,$3;
  76635. suite=["fakeTimeout", "fakeMultipleTimeoutFailing", "fakeMultipleTimeoutPassing", "testPass"]._collect_((function(each){
  76636. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76637. return $core.withContext(function($ctx2) {
  76638. //>>excludeEnd("ctx");
  76639. return $recv(self._class())._selector_(each);
  76640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76641. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76642. //>>excludeEnd("ctx");
  76643. }));
  76644. runner=$recv($TestSuiteRunner())._on_(suite);
  76645. self._timeout_((200));
  76646. result=$recv(runner)._result();
  76647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76648. $ctx1.sendIdx["result"]=1;
  76649. //>>excludeEnd("ctx");
  76650. assertBlock=self._async_((function(){
  76651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76652. return $core.withContext(function($ctx2) {
  76653. //>>excludeEnd("ctx");
  76654. $1=self._selectorSetOf_($recv(result)._errors());
  76655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76656. $ctx2.sendIdx["selectorSetOf:"]=1;
  76657. //>>excludeEnd("ctx");
  76658. self._assert_equals_($1,$recv($Set())._new());
  76659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76660. $ctx2.sendIdx["assert:equals:"]=1;
  76661. //>>excludeEnd("ctx");
  76662. self._assert_equals_(self._selectorSetOf_($recv(result)._failures()),["fakeMultipleTimeoutFailing", "fakeTimeout"]._asSet());
  76663. return self._finished();
  76664. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76665. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  76666. //>>excludeEnd("ctx");
  76667. }));
  76668. $recv($recv(runner)._announcer())._on_do_($ResultAnnouncement(),(function(ann){
  76669. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76670. return $core.withContext(function($ctx2) {
  76671. //>>excludeEnd("ctx");
  76672. $2=$recv($recv(ann)._result()).__eq_eq(result);
  76673. if($core.assert($2)){
  76674. $3=$recv($recv(result)._runs()).__eq($recv(result)._total());
  76675. return $recv($3)._ifTrue_(assertBlock);
  76676. };
  76677. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76678. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,3)});
  76679. //>>excludeEnd("ctx");
  76680. }));
  76681. $recv(runner)._run();
  76682. return self;
  76683. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76684. }, function($ctx1) {$ctx1.fill(self,"testTimeouts",{suite:suite,runner:runner,result:result,assertBlock:assertBlock},$globals.SUnitAsyncTest)});
  76685. //>>excludeEnd("ctx");
  76686. },
  76687. //>>excludeStart("ide", pragmas.excludeIdeData);
  76688. args: [],
  76689. source: "testTimeouts\x0a\x09| suite runner result assertBlock |\x0a\x09suite := #('fakeTimeout' 'fakeMultipleTimeoutFailing' 'fakeMultipleTimeoutPassing' 'testPass') collect: [ :each | self class selector: each ].\x0a\x09runner := TestSuiteRunner on: suite.\x0a\x09self timeout: 200.\x0a\x09result := runner result.\x0a\x09assertBlock := self async: [\x0a\x09\x09self assert: (self selectorSetOf: result errors) equals: Set new.\x0a\x09\x09self assert: (self selectorSetOf: result failures) equals: #('fakeMultipleTimeoutFailing' 'fakeTimeout') asSet.\x0a\x09\x09self finished\x0a\x09].\x0a\x09runner announcer on: ResultAnnouncement do: [ :ann |\x0a\x09\x09ann result == result ifTrue: [ result runs = result total ifTrue: assertBlock ] ].\x0a\x09runner run",
  76690. referencedClasses: ["TestSuiteRunner", "Set", "ResultAnnouncement"],
  76691. //>>excludeEnd("ide");
  76692. messageSends: ["collect:", "selector:", "class", "on:", "timeout:", "result", "async:", "assert:equals:", "selectorSetOf:", "errors", "new", "failures", "asSet", "finished", "on:do:", "announcer", "ifTrue:", "==", "=", "runs", "total", "run"]
  76693. }),
  76694. $globals.SUnitAsyncTest);
  76695. $core.addMethod(
  76696. $core.method({
  76697. selector: "testTwoAsyncPassesWithFinishedOnlyOneIsRun",
  76698. protocol: 'tests',
  76699. fn: function (){
  76700. var self=this;
  76701. var x;
  76702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76703. return $core.withContext(function($ctx1) {
  76704. //>>excludeEnd("ctx");
  76705. var $1;
  76706. self["@flag"]="bad";
  76707. self._timeout_((10));
  76708. x=(0);
  76709. $1=self._async_((function(){
  76710. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76711. return $core.withContext(function($ctx2) {
  76712. //>>excludeEnd("ctx");
  76713. self._finished();
  76714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76715. $ctx2.sendIdx["finished"]=1;
  76716. //>>excludeEnd("ctx");
  76717. self["@flag"]="ok";
  76718. self["@flag"];
  76719. x=$recv(x).__plus((1));
  76720. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76721. $ctx2.sendIdx["+"]=1;
  76722. //>>excludeEnd("ctx");
  76723. x;
  76724. return self._assert_equals_(x,(1));
  76725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76726. $ctx2.sendIdx["assert:equals:"]=1;
  76727. //>>excludeEnd("ctx");
  76728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76729. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  76730. //>>excludeEnd("ctx");
  76731. }));
  76732. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76733. $ctx1.sendIdx["async:"]=1;
  76734. //>>excludeEnd("ctx");
  76735. self["@flag"]=$recv($1)._valueWithTimeout_((0));
  76736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76737. $ctx1.sendIdx["valueWithTimeout:"]=1;
  76738. //>>excludeEnd("ctx");
  76739. self["@flag"]=$recv(self._async_((function(){
  76740. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76741. return $core.withContext(function($ctx2) {
  76742. //>>excludeEnd("ctx");
  76743. self._finished();
  76744. self["@flag"]="ok";
  76745. self["@flag"];
  76746. x=$recv(x).__plus((1));
  76747. x;
  76748. return self._assert_equals_(x,(1));
  76749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76750. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  76751. //>>excludeEnd("ctx");
  76752. })))._valueWithTimeout_((0));
  76753. return self;
  76754. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76755. }, function($ctx1) {$ctx1.fill(self,"testTwoAsyncPassesWithFinishedOnlyOneIsRun",{x:x},$globals.SUnitAsyncTest)});
  76756. //>>excludeEnd("ctx");
  76757. },
  76758. //>>excludeStart("ide", pragmas.excludeIdeData);
  76759. args: [],
  76760. source: "testTwoAsyncPassesWithFinishedOnlyOneIsRun\x0a\x09| x |\x0a\x09flag := 'bad'.\x0a\x09self timeout: 10.\x0a\x09x := 0.\x0a\x09flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: x equals: 1 ]) valueWithTimeout: 0.\x0a\x09flag := (self async: [ self finished. flag := 'ok'. x := x+1. self assert: x equals: 1 ]) valueWithTimeout: 0.",
  76761. referencedClasses: [],
  76762. //>>excludeEnd("ide");
  76763. messageSends: ["timeout:", "valueWithTimeout:", "async:", "finished", "+", "assert:equals:"]
  76764. }),
  76765. $globals.SUnitAsyncTest);
  76766. });
  76767. define("amber_cli/AmberCli", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  76768. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  76769. var smalltalk=$core,_st=$recv,globals=$globals;
  76770. $core.addPackage('AmberCli');
  76771. $core.packages["AmberCli"].transport = {"type":"amd","amdNamespace":"amber_cli"};
  76772. $core.addClass('AmberCli', $globals.Object, [], 'AmberCli');
  76773. //>>excludeStart("ide", pragmas.excludeIdeData);
  76774. $globals.AmberCli.comment="I am the Amber CLI (CommandLine Interface) tool which runs on Node.js.\x0a\x0aMy responsibility is to start different Amber programs like the FileServer or the Repl.\x0aWhich program to start is determined by the first commandline parameters passed to the AmberCli executable.\x0aUse `help` to get a list of all available options.\x0aAny further commandline parameters are passed to the specific program.\x0a\x0a## Commands\x0a\x0aNew commands can be added by creating a class side method in the `commands` protocol which takes one parameter.\x0aThis parameter is an array of all commandline options + values passed on to the program.\x0aAny `camelCaseCommand` is transformed into a commandline parameter of the form `camel-case-command` and vice versa.";
  76775. //>>excludeEnd("ide");
  76776. $core.addMethod(
  76777. $core.method({
  76778. selector: "commandLineSwitches",
  76779. protocol: 'commandline',
  76780. fn: function (){
  76781. var self=this;
  76782. var switches;
  76783. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76784. return $core.withContext(function($ctx1) {
  76785. //>>excludeEnd("ctx");
  76786. var $1;
  76787. switches=$recv($recv(self._class())._methodsInProtocol_("commands"))._collect_((function(each){
  76788. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76789. return $core.withContext(function($ctx2) {
  76790. //>>excludeEnd("ctx");
  76791. return $recv(each)._selector();
  76792. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76793. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76794. //>>excludeEnd("ctx");
  76795. }));
  76796. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76797. $ctx1.sendIdx["collect:"]=1;
  76798. //>>excludeEnd("ctx");
  76799. switches=$recv(switches)._select_((function(each){
  76800. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76801. return $core.withContext(function($ctx2) {
  76802. //>>excludeEnd("ctx");
  76803. return $recv(each)._match_("^[^:]*:$");
  76804. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76805. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  76806. //>>excludeEnd("ctx");
  76807. }));
  76808. switches=$recv(switches)._collect_((function(each){
  76809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76810. return $core.withContext(function($ctx2) {
  76811. //>>excludeEnd("ctx");
  76812. return $recv($recv($recv(each)._allButLast())._replace_with_("([A-Z])","-$1"))._asLowercase();
  76813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76814. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  76815. //>>excludeEnd("ctx");
  76816. }));
  76817. $1=switches;
  76818. return $1;
  76819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76820. }, function($ctx1) {$ctx1.fill(self,"commandLineSwitches",{switches:switches},$globals.AmberCli.klass)});
  76821. //>>excludeEnd("ctx");
  76822. },
  76823. //>>excludeStart("ide", pragmas.excludeIdeData);
  76824. args: [],
  76825. source: "commandLineSwitches\x0a\x09\x22Collect all methodnames from the 'commands' protocol of the class\x0a\x09 and select the ones with only one parameter.\x0a\x09 Then remove the ':' at the end of the name.\x0a\x09 Additionally all uppercase letters are made lowercase and preceded by a '-'.\x0a\x09 Example: fallbackPage: becomes --fallback-page.\x0a\x09 Return the Array containing the commandline switches.\x22\x0a\x09| switches |\x0a\x09switches := ((self class methodsInProtocol: 'commands') collect: [ :each | each selector]).\x0a\x09switches := switches select: [ :each | each match: '^[^:]*:$'].\x0a\x09switches :=switches collect: [ :each |\x0a\x09\x09(each allButLast replace: '([A-Z])' with: '-$1') asLowercase].\x0a\x09^ switches",
  76826. referencedClasses: [],
  76827. //>>excludeEnd("ide");
  76828. messageSends: ["collect:", "methodsInProtocol:", "class", "selector", "select:", "match:", "asLowercase", "replace:with:", "allButLast"]
  76829. }),
  76830. $globals.AmberCli.klass);
  76831. $core.addMethod(
  76832. $core.method({
  76833. selector: "config:",
  76834. protocol: 'commands',
  76835. fn: function (args){
  76836. var self=this;
  76837. function $Configurator(){return $globals.Configurator||(typeof Configurator=="undefined"?nil:Configurator)}
  76838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76839. return $core.withContext(function($ctx1) {
  76840. //>>excludeEnd("ctx");
  76841. $recv($recv($Configurator())._new())._start();
  76842. return self;
  76843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76844. }, function($ctx1) {$ctx1.fill(self,"config:",{args:args},$globals.AmberCli.klass)});
  76845. //>>excludeEnd("ctx");
  76846. },
  76847. //>>excludeStart("ide", pragmas.excludeIdeData);
  76848. args: ["args"],
  76849. source: "config: args\x0a\x09Configurator new start",
  76850. referencedClasses: ["Configurator"],
  76851. //>>excludeEnd("ide");
  76852. messageSends: ["start", "new"]
  76853. }),
  76854. $globals.AmberCli.klass);
  76855. $core.addMethod(
  76856. $core.method({
  76857. selector: "handleArguments:",
  76858. protocol: 'commandline',
  76859. fn: function (args){
  76860. var self=this;
  76861. var selector;
  76862. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  76863. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76864. return $core.withContext(function($ctx1) {
  76865. //>>excludeEnd("ctx");
  76866. var $1;
  76867. $1=$recv(args)._first();
  76868. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76869. $ctx1.sendIdx["first"]=1;
  76870. //>>excludeEnd("ctx");
  76871. selector=self._selectorForCommandLineSwitch_($1);
  76872. $recv(args)._remove_($recv(args)._first());
  76873. self._perform_withArguments_(selector,$recv($Array())._with_(args));
  76874. return self;
  76875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76876. }, function($ctx1) {$ctx1.fill(self,"handleArguments:",{args:args,selector:selector},$globals.AmberCli.klass)});
  76877. //>>excludeEnd("ctx");
  76878. },
  76879. //>>excludeStart("ide", pragmas.excludeIdeData);
  76880. args: ["args"],
  76881. source: "handleArguments: args\x0a\x09| selector |\x0a\x0a\x09selector := self selectorForCommandLineSwitch: (args first).\x0a\x09args remove: args first.\x0a\x09self perform: selector withArguments: (Array with: args)",
  76882. referencedClasses: ["Array"],
  76883. //>>excludeEnd("ide");
  76884. messageSends: ["selectorForCommandLineSwitch:", "first", "remove:", "perform:withArguments:", "with:"]
  76885. }),
  76886. $globals.AmberCli.klass);
  76887. $core.addMethod(
  76888. $core.method({
  76889. selector: "help:",
  76890. protocol: 'commands',
  76891. fn: function (args){
  76892. var self=this;
  76893. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  76894. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76895. return $core.withContext(function($ctx1) {
  76896. //>>excludeEnd("ctx");
  76897. $recv($Transcript())._show_("Available commands");
  76898. $recv(self._commandLineSwitches())._do_((function(each){
  76899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76900. return $core.withContext(function($ctx2) {
  76901. //>>excludeEnd("ctx");
  76902. return $recv(console)._log_(each);
  76903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76904. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  76905. //>>excludeEnd("ctx");
  76906. }));
  76907. return self;
  76908. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76909. }, function($ctx1) {$ctx1.fill(self,"help:",{args:args},$globals.AmberCli.klass)});
  76910. //>>excludeEnd("ctx");
  76911. },
  76912. //>>excludeStart("ide", pragmas.excludeIdeData);
  76913. args: ["args"],
  76914. source: "help: args\x0a\x09Transcript show: 'Available commands'.\x0a\x09self commandLineSwitches do: [ :each | console log: each ]",
  76915. referencedClasses: ["Transcript"],
  76916. //>>excludeEnd("ide");
  76917. messageSends: ["show:", "do:", "commandLineSwitches", "log:"]
  76918. }),
  76919. $globals.AmberCli.klass);
  76920. $core.addMethod(
  76921. $core.method({
  76922. selector: "init:",
  76923. protocol: 'commands',
  76924. fn: function (args){
  76925. var self=this;
  76926. function $Initer(){return $globals.Initer||(typeof Initer=="undefined"?nil:Initer)}
  76927. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76928. return $core.withContext(function($ctx1) {
  76929. //>>excludeEnd("ctx");
  76930. $recv($recv($Initer())._new())._start();
  76931. return self;
  76932. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76933. }, function($ctx1) {$ctx1.fill(self,"init:",{args:args},$globals.AmberCli.klass)});
  76934. //>>excludeEnd("ctx");
  76935. },
  76936. //>>excludeStart("ide", pragmas.excludeIdeData);
  76937. args: ["args"],
  76938. source: "init: args\x0a\x09Initer new start",
  76939. referencedClasses: ["Initer"],
  76940. //>>excludeEnd("ide");
  76941. messageSends: ["start", "new"]
  76942. }),
  76943. $globals.AmberCli.klass);
  76944. $core.addMethod(
  76945. $core.method({
  76946. selector: "main",
  76947. protocol: 'startup',
  76948. fn: function (){
  76949. var self=this;
  76950. var args,nodeMinorVersion;
  76951. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  76952. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  76953. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76954. return $core.withContext(function($ctx1) {
  76955. //>>excludeEnd("ctx");
  76956. var $5,$4,$3,$2,$1,$8,$7,$6,$9,$10,$11;
  76957. $5=$recv($Smalltalk())._version();
  76958. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76959. $ctx1.sendIdx["version"]=1;
  76960. //>>excludeEnd("ctx");
  76961. $4="Welcome to Amber version ".__comma($5);
  76962. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76963. $ctx1.sendIdx[","]=4;
  76964. //>>excludeEnd("ctx");
  76965. $3=$recv($4).__comma(" (NodeJS ");
  76966. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76967. $ctx1.sendIdx[","]=3;
  76968. //>>excludeEnd("ctx");
  76969. $2=$recv($3).__comma($recv($recv(process)._versions())._node());
  76970. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76971. $ctx1.sendIdx[","]=2;
  76972. //>>excludeEnd("ctx");
  76973. $1=$recv($2).__comma(").");
  76974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76975. $ctx1.sendIdx[","]=1;
  76976. //>>excludeEnd("ctx");
  76977. $recv($Transcript())._show_($1);
  76978. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76979. $ctx1.sendIdx["show:"]=1;
  76980. //>>excludeEnd("ctx");
  76981. $8=$recv(process)._version();
  76982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76983. $ctx1.sendIdx["version"]=2;
  76984. //>>excludeEnd("ctx");
  76985. $7=$recv($8)._tokenize_(".");
  76986. $6=$recv($7)._second();
  76987. nodeMinorVersion=$recv($6)._asNumber();
  76988. $9=$recv(nodeMinorVersion).__lt((8));
  76989. if($core.assert($9)){
  76990. $recv($Transcript())._show_("You are currently using Node.js ".__comma($recv(process)._version()));
  76991. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  76992. $ctx1.sendIdx["show:"]=2;
  76993. //>>excludeEnd("ctx");
  76994. $recv($Transcript())._show_("Required is at least Node.js v0.8.x or greater.");
  76995. return (-1);
  76996. };
  76997. args=$recv(process)._argv();
  76998. $recv(args)._removeFrom_to_((1),(2));
  76999. $10=$recv(args)._isEmpty();
  77000. if($core.assert($10)){
  77001. self._help_(nil);
  77002. } else {
  77003. $11=self._handleArguments_(args);
  77004. return $11;
  77005. };
  77006. return self;
  77007. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77008. }, function($ctx1) {$ctx1.fill(self,"main",{args:args,nodeMinorVersion:nodeMinorVersion},$globals.AmberCli.klass)});
  77009. //>>excludeEnd("ctx");
  77010. },
  77011. //>>excludeStart("ide", pragmas.excludeIdeData);
  77012. args: [],
  77013. source: "main\x0a\x09\x22Main entry point for Amber applications.\x0a\x09Parses commandline arguments and starts the according subprogram.\x22\x0a\x09| args nodeMinorVersion |\x0a\x09\x0a\x09Transcript show: 'Welcome to Amber version ', Smalltalk version, ' (NodeJS ', process versions node, ').'.\x0a\x0a\x09nodeMinorVersion := ((process version) tokenize: '.') second asNumber.\x0a\x09nodeMinorVersion < 8 ifTrue: [\x0a\x09\x09Transcript show: 'You are currently using Node.js ', (process version).\x0a\x09\x09Transcript show: 'Required is at least Node.js v0.8.x or greater.'.\x0a\x09\x09^ -1.\x0a\x09].\x0a\x0a\x09args := process argv.\x0a\x09\x22Remove the first args which contain the path to the node executable and the script file.\x22\x0a\x09args removeFrom: 1 to: 2.\x0a\x09\x0a\x09(args isEmpty)\x0a\x09\x09ifTrue: [self help: nil]\x0a\x09\x09ifFalse: [^self handleArguments: args]",
  77014. referencedClasses: ["Transcript", "Smalltalk"],
  77015. //>>excludeEnd("ide");
  77016. messageSends: ["show:", ",", "version", "node", "versions", "asNumber", "second", "tokenize:", "ifTrue:", "<", "argv", "removeFrom:to:", "ifTrue:ifFalse:", "isEmpty", "help:", "handleArguments:"]
  77017. }),
  77018. $globals.AmberCli.klass);
  77019. $core.addMethod(
  77020. $core.method({
  77021. selector: "repl:",
  77022. protocol: 'commands',
  77023. fn: function (args){
  77024. var self=this;
  77025. function $Repl(){return $globals.Repl||(typeof Repl=="undefined"?nil:Repl)}
  77026. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77027. return $core.withContext(function($ctx1) {
  77028. //>>excludeEnd("ctx");
  77029. var $1;
  77030. $1=$recv($recv($Repl())._new())._createInterface();
  77031. return $1;
  77032. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77033. }, function($ctx1) {$ctx1.fill(self,"repl:",{args:args},$globals.AmberCli.klass)});
  77034. //>>excludeEnd("ctx");
  77035. },
  77036. //>>excludeStart("ide", pragmas.excludeIdeData);
  77037. args: ["args"],
  77038. source: "repl: args\x0a\x09^ Repl new createInterface",
  77039. referencedClasses: ["Repl"],
  77040. //>>excludeEnd("ide");
  77041. messageSends: ["createInterface", "new"]
  77042. }),
  77043. $globals.AmberCli.klass);
  77044. $core.addMethod(
  77045. $core.method({
  77046. selector: "selectorForCommandLineSwitch:",
  77047. protocol: 'commandline',
  77048. fn: function (aSwitch){
  77049. var self=this;
  77050. var command,selector;
  77051. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77052. return $core.withContext(function($ctx1) {
  77053. //>>excludeEnd("ctx");
  77054. var $1,$2;
  77055. $1=$recv(self._commandLineSwitches())._includes_(aSwitch);
  77056. if($core.assert($1)){
  77057. selector=$recv($recv(aSwitch)._replace_with_("-[a-z]",(function(each){
  77058. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77059. return $core.withContext(function($ctx2) {
  77060. //>>excludeEnd("ctx");
  77061. return $recv($recv(each)._second())._asUppercase();
  77062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77063. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  77064. //>>excludeEnd("ctx");
  77065. }))).__comma(":");
  77066. selector;
  77067. } else {
  77068. selector="help:";
  77069. selector;
  77070. };
  77071. $2=selector;
  77072. return $2;
  77073. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77074. }, function($ctx1) {$ctx1.fill(self,"selectorForCommandLineSwitch:",{aSwitch:aSwitch,command:command,selector:selector},$globals.AmberCli.klass)});
  77075. //>>excludeEnd("ctx");
  77076. },
  77077. //>>excludeStart("ide", pragmas.excludeIdeData);
  77078. args: ["aSwitch"],
  77079. source: "selectorForCommandLineSwitch: aSwitch\x0a\x09\x22Add ':' at the end and replace all occurences of a lowercase letter preceded by a '-' with the Uppercase letter.\x0a\x09 Example: fallback-page becomes fallbackPage:.\x0a\x09 If no correct selector is found return 'help:'\x22\x0a\x09 | command selector |\x0a\x0a\x09 (self commandLineSwitches includes: aSwitch)\x0a\x09 ifTrue: [ selector := (aSwitch replace: '-[a-z]' with: [ :each | each second asUppercase ]), ':']\x0a\x09 ifFalse: [ selector := 'help:' ].\x0a\x09^ selector",
  77080. referencedClasses: [],
  77081. //>>excludeEnd("ide");
  77082. messageSends: ["ifTrue:ifFalse:", "includes:", "commandLineSwitches", ",", "replace:with:", "asUppercase", "second"]
  77083. }),
  77084. $globals.AmberCli.klass);
  77085. $core.addMethod(
  77086. $core.method({
  77087. selector: "serve:",
  77088. protocol: 'commands',
  77089. fn: function (args){
  77090. var self=this;
  77091. function $FileServer(){return $globals.FileServer||(typeof FileServer=="undefined"?nil:FileServer)}
  77092. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77093. return $core.withContext(function($ctx1) {
  77094. //>>excludeEnd("ctx");
  77095. var $1;
  77096. $1=$recv($recv($FileServer())._createServerWithArguments_(args))._start();
  77097. return $1;
  77098. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77099. }, function($ctx1) {$ctx1.fill(self,"serve:",{args:args},$globals.AmberCli.klass)});
  77100. //>>excludeEnd("ctx");
  77101. },
  77102. //>>excludeStart("ide", pragmas.excludeIdeData);
  77103. args: ["args"],
  77104. source: "serve: args\x0a\x09^ (FileServer createServerWithArguments: args) start",
  77105. referencedClasses: ["FileServer"],
  77106. //>>excludeEnd("ide");
  77107. messageSends: ["start", "createServerWithArguments:"]
  77108. }),
  77109. $globals.AmberCli.klass);
  77110. $core.addMethod(
  77111. $core.method({
  77112. selector: "version:",
  77113. protocol: 'commands',
  77114. fn: function (arguments_){
  77115. var self=this;
  77116. return self;
  77117. },
  77118. //>>excludeStart("ide", pragmas.excludeIdeData);
  77119. args: ["arguments"],
  77120. source: "version: arguments",
  77121. referencedClasses: [],
  77122. //>>excludeEnd("ide");
  77123. messageSends: []
  77124. }),
  77125. $globals.AmberCli.klass);
  77126. $core.addClass('BaseFileManipulator', $globals.Object, ['path', 'fs'], 'AmberCli');
  77127. $core.addMethod(
  77128. $core.method({
  77129. selector: "dirname",
  77130. protocol: 'private',
  77131. fn: function (){
  77132. var self=this;
  77133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77134. return $core.withContext(function($ctx1) {
  77135. //>>excludeEnd("ctx");
  77136. return __dirname;
  77137. return self;
  77138. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77139. }, function($ctx1) {$ctx1.fill(self,"dirname",{},$globals.BaseFileManipulator)});
  77140. //>>excludeEnd("ctx");
  77141. },
  77142. //>>excludeStart("ide", pragmas.excludeIdeData);
  77143. args: [],
  77144. source: "dirname\x0a\x09<return __dirname>",
  77145. referencedClasses: [],
  77146. //>>excludeEnd("ide");
  77147. messageSends: []
  77148. }),
  77149. $globals.BaseFileManipulator);
  77150. $core.addMethod(
  77151. $core.method({
  77152. selector: "initialize",
  77153. protocol: 'initialization',
  77154. fn: function (){
  77155. var self=this;
  77156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77157. return $core.withContext(function($ctx1) {
  77158. //>>excludeEnd("ctx");
  77159. (
  77160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77161. $ctx1.supercall = true,
  77162. //>>excludeEnd("ctx");
  77163. $globals.BaseFileManipulator.superclass.fn.prototype._initialize.apply($recv(self), []));
  77164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77165. $ctx1.supercall = false;
  77166. //>>excludeEnd("ctx");;
  77167. self["@path"]=$recv(require)._value_("path");
  77168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77169. $ctx1.sendIdx["value:"]=1;
  77170. //>>excludeEnd("ctx");
  77171. self["@fs"]=$recv(require)._value_("fs");
  77172. return self;
  77173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77174. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.BaseFileManipulator)});
  77175. //>>excludeEnd("ctx");
  77176. },
  77177. //>>excludeStart("ide", pragmas.excludeIdeData);
  77178. args: [],
  77179. source: "initialize\x0a\x09super initialize.\x0a\x09path := require value: 'path'.\x0a\x09fs := require value: 'fs'",
  77180. referencedClasses: [],
  77181. //>>excludeEnd("ide");
  77182. messageSends: ["initialize", "value:"]
  77183. }),
  77184. $globals.BaseFileManipulator);
  77185. $core.addMethod(
  77186. $core.method({
  77187. selector: "rootDirname",
  77188. protocol: 'private',
  77189. fn: function (){
  77190. var self=this;
  77191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77192. return $core.withContext(function($ctx1) {
  77193. //>>excludeEnd("ctx");
  77194. var $1;
  77195. $1=$recv(self["@path"])._join_with_(self._dirname(),"..");
  77196. return $1;
  77197. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77198. }, function($ctx1) {$ctx1.fill(self,"rootDirname",{},$globals.BaseFileManipulator)});
  77199. //>>excludeEnd("ctx");
  77200. },
  77201. //>>excludeStart("ide", pragmas.excludeIdeData);
  77202. args: [],
  77203. source: "rootDirname\x0a\x09^ path join: self dirname with: '..'",
  77204. referencedClasses: [],
  77205. //>>excludeEnd("ide");
  77206. messageSends: ["join:with:", "dirname"]
  77207. }),
  77208. $globals.BaseFileManipulator);
  77209. $core.addClass('Configurator', $globals.BaseFileManipulator, [], 'AmberCli');
  77210. $core.addMethod(
  77211. $core.method({
  77212. selector: "initialize",
  77213. protocol: 'initialization',
  77214. fn: function (){
  77215. var self=this;
  77216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77217. return $core.withContext(function($ctx1) {
  77218. //>>excludeEnd("ctx");
  77219. (
  77220. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77221. $ctx1.supercall = true,
  77222. //>>excludeEnd("ctx");
  77223. $globals.Configurator.superclass.fn.prototype._initialize.apply($recv(self), []));
  77224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77225. $ctx1.supercall = false;
  77226. //>>excludeEnd("ctx");;
  77227. return self;
  77228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77229. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Configurator)});
  77230. //>>excludeEnd("ctx");
  77231. },
  77232. //>>excludeStart("ide", pragmas.excludeIdeData);
  77233. args: [],
  77234. source: "initialize\x0a\x09super initialize",
  77235. referencedClasses: [],
  77236. //>>excludeEnd("ide");
  77237. messageSends: ["initialize"]
  77238. }),
  77239. $globals.Configurator);
  77240. $core.addMethod(
  77241. $core.method({
  77242. selector: "start",
  77243. protocol: 'action',
  77244. fn: function (){
  77245. var self=this;
  77246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77247. return $core.withContext(function($ctx1) {
  77248. //>>excludeEnd("ctx");
  77249. var $receiver;
  77250. self._writeConfigThenDo_((function(err){
  77251. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77252. return $core.withContext(function($ctx2) {
  77253. //>>excludeEnd("ctx");
  77254. if(($receiver = err) == null || $receiver.isNil){
  77255. return $recv(process)._exit();
  77256. } else {
  77257. return $recv(process)._exit_((111));
  77258. };
  77259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77260. }, function($ctx2) {$ctx2.fillBlock({err:err},$ctx1,1)});
  77261. //>>excludeEnd("ctx");
  77262. }));
  77263. return self;
  77264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77265. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.Configurator)});
  77266. //>>excludeEnd("ctx");
  77267. },
  77268. //>>excludeStart("ide", pragmas.excludeIdeData);
  77269. args: [],
  77270. source: "start\x0a\x09self writeConfigThenDo: [ :err | err\x0a\x09\x09ifNotNil: [ process exit: 111 ]\x0a\x09\x09ifNil: [ process exit ]]",
  77271. referencedClasses: [],
  77272. //>>excludeEnd("ide");
  77273. messageSends: ["writeConfigThenDo:", "ifNotNil:ifNil:", "exit:", "exit"]
  77274. }),
  77275. $globals.Configurator);
  77276. $core.addMethod(
  77277. $core.method({
  77278. selector: "writeConfigThenDo:",
  77279. protocol: 'action',
  77280. fn: function (aBlock){
  77281. var self=this;
  77282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77283. return $core.withContext(function($ctx1) {
  77284. //>>excludeEnd("ctx");
  77285. $recv($recv(require)._value_("amber-dev/lib/config"))._writeConfig_toFile_thenDo_($recv(process)._cwd(),"config.js",aBlock);
  77286. return self;
  77287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77288. }, function($ctx1) {$ctx1.fill(self,"writeConfigThenDo:",{aBlock:aBlock},$globals.Configurator)});
  77289. //>>excludeEnd("ctx");
  77290. },
  77291. //>>excludeStart("ide", pragmas.excludeIdeData);
  77292. args: ["aBlock"],
  77293. source: "writeConfigThenDo: aBlock\x0a\x09(require value: 'amber-dev/lib/config')\x0a\x09\x09writeConfig: process cwd\x0a\x09\x09toFile: 'config.js'\x0a\x09\x09thenDo: aBlock",
  77294. referencedClasses: [],
  77295. //>>excludeEnd("ide");
  77296. messageSends: ["writeConfig:toFile:thenDo:", "value:", "cwd"]
  77297. }),
  77298. $globals.Configurator);
  77299. $core.addClass('FileServer', $globals.BaseFileManipulator, ['http', 'url', 'host', 'port', 'basePath', 'util', 'username', 'password', 'fallbackPage'], 'AmberCli');
  77300. //>>excludeStart("ide", pragmas.excludeIdeData);
  77301. $globals.FileServer.comment="I am the Amber Smalltalk FileServer.\x0aMy runtime requirement is a functional Node.js executable.\x0a\x0aTo start a FileServer instance on port `4000` use the following code:\x0a\x0a FileServer new start\x0a\x0aA parameterized instance can be created with the following code:\x0a\x0a FileServer createServerWithArguments: options\x0a\x0aHere, `options` is an array of commandline style strings each followed by a value e.g. `#('--port', '6000', '--host', '0.0.0.0')`.\x0aA list of all available parameters can be printed to the commandline by passing `--help` as parameter.\x0aSee the `Options` section for further details on how options are mapped to instance methods.\x0a\x0aAfter startup FileServer checks if the directory layout required by Amber is present and logs a warning on absence.\x0a\x0a\x0a## Options\x0a\x0aEach option is of the form `--some-option-string` which is transformed into a selector of the format `someOptionString:`.\x0aThe trailing `--` gets removed, each `-[a-z]` gets transformed into the according uppercase letter, and a `:` is appended to create a selector which takes a single argument.\x0aAfterwards, the selector gets executed on the `FileServer` instance with the value following in the options array as parameter.\x0a\x0a## Adding new commandline parameters\x0a\x0aAdding new commandline parameters to `FileServer` is as easy as adding a new single parameter method to the `accessing` protocol.";
  77302. //>>excludeEnd("ide");
  77303. $core.addMethod(
  77304. $core.method({
  77305. selector: "base64Decode:",
  77306. protocol: 'private',
  77307. fn: function (aString){
  77308. var self=this;
  77309. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77310. return $core.withContext(function($ctx1) {
  77311. //>>excludeEnd("ctx");
  77312. return (new Buffer(aString, 'base64').toString());
  77313. return self;
  77314. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77315. }, function($ctx1) {$ctx1.fill(self,"base64Decode:",{aString:aString},$globals.FileServer)});
  77316. //>>excludeEnd("ctx");
  77317. },
  77318. //>>excludeStart("ide", pragmas.excludeIdeData);
  77319. args: ["aString"],
  77320. source: "base64Decode: aString\x0a\x09<return (new Buffer(aString, 'base64').toString())>",
  77321. referencedClasses: [],
  77322. //>>excludeEnd("ide");
  77323. messageSends: []
  77324. }),
  77325. $globals.FileServer);
  77326. $core.addMethod(
  77327. $core.method({
  77328. selector: "basePath",
  77329. protocol: 'accessing',
  77330. fn: function (){
  77331. var self=this;
  77332. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77333. return $core.withContext(function($ctx1) {
  77334. //>>excludeEnd("ctx");
  77335. var $2,$1,$receiver;
  77336. $2=self["@basePath"];
  77337. if(($receiver = $2) == null || $receiver.isNil){
  77338. $1=$recv(self._class())._defaultBasePath();
  77339. } else {
  77340. $1=$2;
  77341. };
  77342. return $1;
  77343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77344. }, function($ctx1) {$ctx1.fill(self,"basePath",{},$globals.FileServer)});
  77345. //>>excludeEnd("ctx");
  77346. },
  77347. //>>excludeStart("ide", pragmas.excludeIdeData);
  77348. args: [],
  77349. source: "basePath\x0a\x09^ basePath ifNil: [self class defaultBasePath]",
  77350. referencedClasses: [],
  77351. //>>excludeEnd("ide");
  77352. messageSends: ["ifNil:", "defaultBasePath", "class"]
  77353. }),
  77354. $globals.FileServer);
  77355. $core.addMethod(
  77356. $core.method({
  77357. selector: "basePath:",
  77358. protocol: 'accessing',
  77359. fn: function (aString){
  77360. var self=this;
  77361. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77362. return $core.withContext(function($ctx1) {
  77363. //>>excludeEnd("ctx");
  77364. self["@basePath"]=aString;
  77365. self._validateBasePath();
  77366. return self;
  77367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77368. }, function($ctx1) {$ctx1.fill(self,"basePath:",{aString:aString},$globals.FileServer)});
  77369. //>>excludeEnd("ctx");
  77370. },
  77371. //>>excludeStart("ide", pragmas.excludeIdeData);
  77372. args: ["aString"],
  77373. source: "basePath: aString\x0a\x09basePath := aString.\x0a\x09self validateBasePath.",
  77374. referencedClasses: [],
  77375. //>>excludeEnd("ide");
  77376. messageSends: ["validateBasePath"]
  77377. }),
  77378. $globals.FileServer);
  77379. $core.addMethod(
  77380. $core.method({
  77381. selector: "checkDirectoryLayout",
  77382. protocol: 'initialization',
  77383. fn: function (){
  77384. var self=this;
  77385. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77386. return $core.withContext(function($ctx1) {
  77387. //>>excludeEnd("ctx");
  77388. var $1;
  77389. $1=$recv(self["@fs"])._existsSync_(self._withBasePath_("index.html"));
  77390. if(!$core.assert($1)){
  77391. $recv(console)._warn_("Warning: project directory does not contain index.html.");
  77392. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77393. $ctx1.sendIdx["warn:"]=1;
  77394. //>>excludeEnd("ctx");
  77395. $recv(console)._warn_(" You can specify the directory containing index.html with --base-path.");
  77396. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77397. $ctx1.sendIdx["warn:"]=2;
  77398. //>>excludeEnd("ctx");
  77399. $recv(console)._warn_(" You can also specify a page to be served by default,");
  77400. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77401. $ctx1.sendIdx["warn:"]=3;
  77402. //>>excludeEnd("ctx");
  77403. $recv(console)._warn_(" for all paths that do not map to a file, with --fallback-page.");
  77404. };
  77405. return self;
  77406. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77407. }, function($ctx1) {$ctx1.fill(self,"checkDirectoryLayout",{},$globals.FileServer)});
  77408. //>>excludeEnd("ctx");
  77409. },
  77410. //>>excludeStart("ide", pragmas.excludeIdeData);
  77411. args: [],
  77412. source: "checkDirectoryLayout\x0a\x09(fs existsSync:\x09(self withBasePath: 'index.html')) ifFalse: [\x0a\x09\x09console warn: 'Warning: project directory does not contain index.html.'.\x0a\x09\x09console warn: ' You can specify the directory containing index.html with --base-path.'.\x0a\x09\x09console warn: ' You can also specify a page to be served by default,'.\x0a\x09\x09console warn: ' for all paths that do not map to a file, with --fallback-page.'].",
  77413. referencedClasses: [],
  77414. //>>excludeEnd("ide");
  77415. messageSends: ["ifFalse:", "existsSync:", "withBasePath:", "warn:"]
  77416. }),
  77417. $globals.FileServer);
  77418. $core.addMethod(
  77419. $core.method({
  77420. selector: "fallbackPage",
  77421. protocol: 'accessing',
  77422. fn: function (){
  77423. var self=this;
  77424. var $1;
  77425. $1=self["@fallbackPage"];
  77426. return $1;
  77427. },
  77428. //>>excludeStart("ide", pragmas.excludeIdeData);
  77429. args: [],
  77430. source: "fallbackPage\x0a\x09^ fallbackPage",
  77431. referencedClasses: [],
  77432. //>>excludeEnd("ide");
  77433. messageSends: []
  77434. }),
  77435. $globals.FileServer);
  77436. $core.addMethod(
  77437. $core.method({
  77438. selector: "fallbackPage:",
  77439. protocol: 'accessing',
  77440. fn: function (aString){
  77441. var self=this;
  77442. self["@fallbackPage"]=aString;
  77443. return self;
  77444. },
  77445. //>>excludeStart("ide", pragmas.excludeIdeData);
  77446. args: ["aString"],
  77447. source: "fallbackPage: aString\x0a\x09fallbackPage := aString",
  77448. referencedClasses: [],
  77449. //>>excludeEnd("ide");
  77450. messageSends: []
  77451. }),
  77452. $globals.FileServer);
  77453. $core.addMethod(
  77454. $core.method({
  77455. selector: "handleGETRequest:respondTo:",
  77456. protocol: 'request handling',
  77457. fn: function (aRequest,aResponse){
  77458. var self=this;
  77459. var uri,filename;
  77460. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77461. return $core.withContext(function($ctx1) {
  77462. //>>excludeEnd("ctx");
  77463. var $1;
  77464. uri=$recv(self["@url"])._parse_($recv(aRequest)._url());
  77465. filename=$recv(self["@path"])._join_with_(self._basePath(),$recv(uri)._pathname());
  77466. $recv(self["@fs"])._exists_do_(filename,(function(aBoolean){
  77467. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77468. return $core.withContext(function($ctx2) {
  77469. //>>excludeEnd("ctx");
  77470. if($core.assert(aBoolean)){
  77471. $1=$recv($recv(self["@fs"])._statSync_(filename))._isDirectory();
  77472. if($core.assert($1)){
  77473. return self._respondDirectoryNamed_from_to_(filename,uri,aResponse);
  77474. } else {
  77475. return self._respondFileNamed_to_(filename,aResponse);
  77476. };
  77477. } else {
  77478. return self._respondNotFoundTo_(aResponse);
  77479. };
  77480. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77481. }, function($ctx2) {$ctx2.fillBlock({aBoolean:aBoolean},$ctx1,1)});
  77482. //>>excludeEnd("ctx");
  77483. }));
  77484. return self;
  77485. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77486. }, function($ctx1) {$ctx1.fill(self,"handleGETRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse,uri:uri,filename:filename},$globals.FileServer)});
  77487. //>>excludeEnd("ctx");
  77488. },
  77489. //>>excludeStart("ide", pragmas.excludeIdeData);
  77490. args: ["aRequest", "aResponse"],
  77491. source: "handleGETRequest: aRequest respondTo: aResponse\x0a\x09| uri filename |\x0a\x09uri := url parse: aRequest url.\x0a\x09filename := path join: self basePath with: uri pathname.\x0a\x09fs exists: filename do: [:aBoolean |\x0a\x09\x09aBoolean\x0a\x09\x09\x09ifFalse: [self respondNotFoundTo: aResponse]\x0a\x09\x09\x09ifTrue: [(fs statSync: filename) isDirectory\x0a\x09\x09\x09\x09ifTrue: [self respondDirectoryNamed: filename from: uri to: aResponse]\x0a\x09\x09\x09\x09ifFalse: [self respondFileNamed: filename to: aResponse]]]",
  77492. referencedClasses: [],
  77493. //>>excludeEnd("ide");
  77494. messageSends: ["parse:", "url", "join:with:", "basePath", "pathname", "exists:do:", "ifFalse:ifTrue:", "respondNotFoundTo:", "ifTrue:ifFalse:", "isDirectory", "statSync:", "respondDirectoryNamed:from:to:", "respondFileNamed:to:"]
  77495. }),
  77496. $globals.FileServer);
  77497. $core.addMethod(
  77498. $core.method({
  77499. selector: "handleOPTIONSRequest:respondTo:",
  77500. protocol: 'request handling',
  77501. fn: function (aRequest,aResponse){
  77502. var self=this;
  77503. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77504. return $core.withContext(function($ctx1) {
  77505. //>>excludeEnd("ctx");
  77506. $recv(aResponse)._writeHead_options_((200),$globals.HashedCollection._newFromPairs_(["Access-Control-Allow-Origin","*","Access-Control-Allow-Methods","GET, PUT, POST, DELETE, OPTIONS","Access-Control-Allow-Headers","Content-Type, Accept","Content-Length",(0),"Access-Control-Max-Age",(10)]));
  77507. $recv(aResponse)._end();
  77508. return self;
  77509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77510. }, function($ctx1) {$ctx1.fill(self,"handleOPTIONSRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse},$globals.FileServer)});
  77511. //>>excludeEnd("ctx");
  77512. },
  77513. //>>excludeStart("ide", pragmas.excludeIdeData);
  77514. args: ["aRequest", "aResponse"],
  77515. source: "handleOPTIONSRequest: aRequest respondTo: aResponse\x0a\x09aResponse writeHead: 200 options: #{'Access-Control-Allow-Origin' -> '*'.\x0a\x09\x09\x09\x09\x09'Access-Control-Allow-Methods' -> 'GET, PUT, POST, DELETE, OPTIONS'.\x0a\x09\x09\x09\x09\x09'Access-Control-Allow-Headers' -> 'Content-Type, Accept'.\x0a\x09\x09\x09\x09\x09'Content-Length' -> 0.\x0a\x09\x09\x09\x09\x09'Access-Control-Max-Age' -> 10}.\x0a\x09aResponse end",
  77516. referencedClasses: [],
  77517. //>>excludeEnd("ide");
  77518. messageSends: ["writeHead:options:", "end"]
  77519. }),
  77520. $globals.FileServer);
  77521. $core.addMethod(
  77522. $core.method({
  77523. selector: "handlePUTRequest:respondTo:",
  77524. protocol: 'request handling',
  77525. fn: function (aRequest,aResponse){
  77526. var self=this;
  77527. var file,stream;
  77528. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77529. return $core.withContext(function($ctx1) {
  77530. //>>excludeEnd("ctx");
  77531. var $1,$2,$3,$4;
  77532. $1=self._isAuthenticated_(aRequest);
  77533. if(!$core.assert($1)){
  77534. self._respondAuthenticationRequiredTo_(aResponse);
  77535. return nil;
  77536. };
  77537. file=".".__comma($recv(aRequest)._url());
  77538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77539. $ctx1.sendIdx[","]=1;
  77540. //>>excludeEnd("ctx");
  77541. stream=$recv(self["@fs"])._createWriteStream_(file);
  77542. $recv(stream)._on_do_("error",(function(error){
  77543. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77544. return $core.withContext(function($ctx2) {
  77545. //>>excludeEnd("ctx");
  77546. $2=console;
  77547. $3="Error creating WriteStream for file ".__comma(file);
  77548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77549. $ctx2.sendIdx[","]=2;
  77550. //>>excludeEnd("ctx");
  77551. $recv($2)._warn_($3);
  77552. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77553. $ctx2.sendIdx["warn:"]=1;
  77554. //>>excludeEnd("ctx");
  77555. $recv(console)._warn_(" Did you forget to create the necessary directory in your project (often /src)?");
  77556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77557. $ctx2.sendIdx["warn:"]=2;
  77558. //>>excludeEnd("ctx");
  77559. $recv(console)._warn_(" The exact error is: ".__comma(error));
  77560. return self._respondNotCreatedTo_(aResponse);
  77561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77562. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  77563. //>>excludeEnd("ctx");
  77564. }));
  77565. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77566. $ctx1.sendIdx["on:do:"]=1;
  77567. //>>excludeEnd("ctx");
  77568. $recv(stream)._on_do_("close",(function(){
  77569. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77570. return $core.withContext(function($ctx2) {
  77571. //>>excludeEnd("ctx");
  77572. return self._respondCreatedTo_(aResponse);
  77573. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77574. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  77575. //>>excludeEnd("ctx");
  77576. }));
  77577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77578. $ctx1.sendIdx["on:do:"]=2;
  77579. //>>excludeEnd("ctx");
  77580. $recv(aRequest)._setEncoding_("utf8");
  77581. $recv(aRequest)._on_do_("data",(function(data){
  77582. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77583. return $core.withContext(function($ctx2) {
  77584. //>>excludeEnd("ctx");
  77585. return $recv(stream)._write_(data);
  77586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77587. }, function($ctx2) {$ctx2.fillBlock({data:data},$ctx1,4)});
  77588. //>>excludeEnd("ctx");
  77589. }));
  77590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77591. $ctx1.sendIdx["on:do:"]=3;
  77592. //>>excludeEnd("ctx");
  77593. $recv(aRequest)._on_do_("end",(function(){
  77594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77595. return $core.withContext(function($ctx2) {
  77596. //>>excludeEnd("ctx");
  77597. $4=$recv(stream)._writable();
  77598. if($core.assert($4)){
  77599. return $recv(stream)._end();
  77600. };
  77601. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77602. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  77603. //>>excludeEnd("ctx");
  77604. }));
  77605. return self;
  77606. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77607. }, function($ctx1) {$ctx1.fill(self,"handlePUTRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse,file:file,stream:stream},$globals.FileServer)});
  77608. //>>excludeEnd("ctx");
  77609. },
  77610. //>>excludeStart("ide", pragmas.excludeIdeData);
  77611. args: ["aRequest", "aResponse"],
  77612. source: "handlePUTRequest: aRequest respondTo: aResponse\x0a\x09| file stream |\x0a\x09(self isAuthenticated: aRequest)\x0a\x09\x09ifFalse: [self respondAuthenticationRequiredTo: aResponse. ^ nil].\x0a\x0a\x09file := '.', aRequest url.\x0a\x09stream := fs createWriteStream: file.\x0a\x0a\x09stream on: 'error' do: [:error |\x0a\x09\x09console warn: 'Error creating WriteStream for file ', file.\x0a\x09\x09console warn: ' Did you forget to create the necessary directory in your project (often /src)?'.\x0a\x09\x09console warn: ' The exact error is: ', error.\x0a\x09\x09self respondNotCreatedTo: aResponse].\x0a\x0a\x09stream on: 'close' do: [\x0a\x09\x09self respondCreatedTo: aResponse].\x0a\x0a\x09aRequest setEncoding: 'utf8'.\x0a\x09aRequest on: 'data' do: [:data |\x0a\x09\x09stream write: data].\x0a\x0a\x09aRequest on: 'end' do: [\x0a\x09\x09stream writable ifTrue: [stream end]]",
  77613. referencedClasses: [],
  77614. //>>excludeEnd("ide");
  77615. messageSends: ["ifFalse:", "isAuthenticated:", "respondAuthenticationRequiredTo:", ",", "url", "createWriteStream:", "on:do:", "warn:", "respondNotCreatedTo:", "respondCreatedTo:", "setEncoding:", "write:", "ifTrue:", "writable", "end"]
  77616. }),
  77617. $globals.FileServer);
  77618. $core.addMethod(
  77619. $core.method({
  77620. selector: "handleRequest:respondTo:",
  77621. protocol: 'request handling',
  77622. fn: function (aRequest,aResponse){
  77623. var self=this;
  77624. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77625. return $core.withContext(function($ctx1) {
  77626. //>>excludeEnd("ctx");
  77627. var $2,$1,$4,$3,$5;
  77628. $2=$recv(aRequest)._method();
  77629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77630. $ctx1.sendIdx["method"]=1;
  77631. //>>excludeEnd("ctx");
  77632. $1=$recv($2).__eq("PUT");
  77633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77634. $ctx1.sendIdx["="]=1;
  77635. //>>excludeEnd("ctx");
  77636. if($core.assert($1)){
  77637. self._handlePUTRequest_respondTo_(aRequest,aResponse);
  77638. };
  77639. $4=$recv(aRequest)._method();
  77640. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77641. $ctx1.sendIdx["method"]=2;
  77642. //>>excludeEnd("ctx");
  77643. $3=$recv($4).__eq("GET");
  77644. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77645. $ctx1.sendIdx["="]=2;
  77646. //>>excludeEnd("ctx");
  77647. if($core.assert($3)){
  77648. self._handleGETRequest_respondTo_(aRequest,aResponse);
  77649. };
  77650. $5=$recv($recv(aRequest)._method()).__eq("OPTIONS");
  77651. if($core.assert($5)){
  77652. self._handleOPTIONSRequest_respondTo_(aRequest,aResponse);
  77653. };
  77654. return self;
  77655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77656. }, function($ctx1) {$ctx1.fill(self,"handleRequest:respondTo:",{aRequest:aRequest,aResponse:aResponse},$globals.FileServer)});
  77657. //>>excludeEnd("ctx");
  77658. },
  77659. //>>excludeStart("ide", pragmas.excludeIdeData);
  77660. args: ["aRequest", "aResponse"],
  77661. source: "handleRequest: aRequest respondTo: aResponse\x0a\x09aRequest method = 'PUT'\x0a\x09\x09ifTrue: [self handlePUTRequest: aRequest respondTo: aResponse].\x0a\x09aRequest method = 'GET'\x0a\x09\x09ifTrue:[self handleGETRequest: aRequest respondTo: aResponse].\x0a\x09aRequest method = 'OPTIONS'\x0a\x09\x09ifTrue:[self handleOPTIONSRequest: aRequest respondTo: aResponse]",
  77662. referencedClasses: [],
  77663. //>>excludeEnd("ide");
  77664. messageSends: ["ifTrue:", "=", "method", "handlePUTRequest:respondTo:", "handleGETRequest:respondTo:", "handleOPTIONSRequest:respondTo:"]
  77665. }),
  77666. $globals.FileServer);
  77667. $core.addMethod(
  77668. $core.method({
  77669. selector: "host",
  77670. protocol: 'accessing',
  77671. fn: function (){
  77672. var self=this;
  77673. var $1;
  77674. $1=self["@host"];
  77675. return $1;
  77676. },
  77677. //>>excludeStart("ide", pragmas.excludeIdeData);
  77678. args: [],
  77679. source: "host\x0a\x09^ host",
  77680. referencedClasses: [],
  77681. //>>excludeEnd("ide");
  77682. messageSends: []
  77683. }),
  77684. $globals.FileServer);
  77685. $core.addMethod(
  77686. $core.method({
  77687. selector: "host:",
  77688. protocol: 'accessing',
  77689. fn: function (hostname){
  77690. var self=this;
  77691. self["@host"]=hostname;
  77692. return self;
  77693. },
  77694. //>>excludeStart("ide", pragmas.excludeIdeData);
  77695. args: ["hostname"],
  77696. source: "host: hostname\x0a\x09host := hostname",
  77697. referencedClasses: [],
  77698. //>>excludeEnd("ide");
  77699. messageSends: []
  77700. }),
  77701. $globals.FileServer);
  77702. $core.addMethod(
  77703. $core.method({
  77704. selector: "initialize",
  77705. protocol: 'initialization',
  77706. fn: function (){
  77707. var self=this;
  77708. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77709. return $core.withContext(function($ctx1) {
  77710. //>>excludeEnd("ctx");
  77711. var $1;
  77712. (
  77713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77714. $ctx1.supercall = true,
  77715. //>>excludeEnd("ctx");
  77716. $globals.FileServer.superclass.fn.prototype._initialize.apply($recv(self), []));
  77717. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77718. $ctx1.supercall = false;
  77719. //>>excludeEnd("ctx");;
  77720. self["@http"]=self._require_("http");
  77721. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77722. $ctx1.sendIdx["require:"]=1;
  77723. //>>excludeEnd("ctx");
  77724. self["@util"]=self._require_("util");
  77725. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77726. $ctx1.sendIdx["require:"]=2;
  77727. //>>excludeEnd("ctx");
  77728. self["@url"]=self._require_("url");
  77729. $1=self._class();
  77730. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77731. $ctx1.sendIdx["class"]=1;
  77732. //>>excludeEnd("ctx");
  77733. self["@host"]=$recv($1)._defaultHost();
  77734. self["@port"]=$recv(self._class())._defaultPort();
  77735. self["@username"]=nil;
  77736. self["@password"]=nil;
  77737. self["@fallbackPage"]=nil;
  77738. return self;
  77739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77740. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.FileServer)});
  77741. //>>excludeEnd("ctx");
  77742. },
  77743. //>>excludeStart("ide", pragmas.excludeIdeData);
  77744. args: [],
  77745. source: "initialize\x0a\x09super initialize.\x0a\x09http := self require: 'http'.\x0a\x09util := self require: 'util'.\x0a\x09url := self require: 'url'.\x0a\x09host := self class defaultHost.\x0a\x09port := self class defaultPort.\x0a\x09username := nil.\x0a\x09password := nil.\x0a\x09fallbackPage := nil.",
  77746. referencedClasses: [],
  77747. //>>excludeEnd("ide");
  77748. messageSends: ["initialize", "require:", "defaultHost", "class", "defaultPort"]
  77749. }),
  77750. $globals.FileServer);
  77751. $core.addMethod(
  77752. $core.method({
  77753. selector: "isAuthenticated:",
  77754. protocol: 'private',
  77755. fn: function (aRequest){
  77756. var self=this;
  77757. var header,token,auth,parts;
  77758. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77759. return $core.withContext(function($ctx1) {
  77760. //>>excludeEnd("ctx");
  77761. var $2,$1,$3,$4,$5,$6,$9,$10,$8,$7,$receiver;
  77762. $2=$recv(self["@username"])._isNil();
  77763. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77764. $ctx1.sendIdx["isNil"]=1;
  77765. //>>excludeEnd("ctx");
  77766. $1=$recv($2)._and_((function(){
  77767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77768. return $core.withContext(function($ctx2) {
  77769. //>>excludeEnd("ctx");
  77770. return $recv(self["@password"])._isNil();
  77771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77772. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  77773. //>>excludeEnd("ctx");
  77774. }));
  77775. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77776. $ctx1.sendIdx["and:"]=1;
  77777. //>>excludeEnd("ctx");
  77778. if($core.assert($1)){
  77779. return true;
  77780. };
  77781. $3=$recv($recv(aRequest)._headers())._at_("authorization");
  77782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77783. $ctx1.sendIdx["at:"]=1;
  77784. //>>excludeEnd("ctx");
  77785. if(($receiver = $3) == null || $receiver.isNil){
  77786. header="";
  77787. } else {
  77788. header=$3;
  77789. };
  77790. $4=$recv(header)._isEmpty();
  77791. if($core.assert($4)){
  77792. return false;
  77793. } else {
  77794. $5=$recv(header)._tokenize_(" ");
  77795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77796. $ctx1.sendIdx["tokenize:"]=1;
  77797. //>>excludeEnd("ctx");
  77798. if(($receiver = $5) == null || $receiver.isNil){
  77799. token="";
  77800. } else {
  77801. token=$5;
  77802. };
  77803. token;
  77804. $6=$recv(token)._at_((2));
  77805. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77806. $ctx1.sendIdx["at:"]=2;
  77807. //>>excludeEnd("ctx");
  77808. auth=self._base64Decode_($6);
  77809. auth;
  77810. parts=$recv(auth)._tokenize_(":");
  77811. parts;
  77812. $9=self["@username"];
  77813. $10=$recv(parts)._at_((1));
  77814. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77815. $ctx1.sendIdx["at:"]=3;
  77816. //>>excludeEnd("ctx");
  77817. $8=$recv($9).__eq($10);
  77818. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77819. $ctx1.sendIdx["="]=1;
  77820. //>>excludeEnd("ctx");
  77821. $7=$recv($8)._and_((function(){
  77822. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77823. return $core.withContext(function($ctx2) {
  77824. //>>excludeEnd("ctx");
  77825. return $recv(self["@password"]).__eq($recv(parts)._at_((2)));
  77826. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77827. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,7)});
  77828. //>>excludeEnd("ctx");
  77829. }));
  77830. if($core.assert($7)){
  77831. return true;
  77832. } else {
  77833. return false;
  77834. };
  77835. };
  77836. return self;
  77837. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77838. }, function($ctx1) {$ctx1.fill(self,"isAuthenticated:",{aRequest:aRequest,header:header,token:token,auth:auth,parts:parts},$globals.FileServer)});
  77839. //>>excludeEnd("ctx");
  77840. },
  77841. //>>excludeStart("ide", pragmas.excludeIdeData);
  77842. args: ["aRequest"],
  77843. source: "isAuthenticated: aRequest\x0a\x09\x22Basic HTTP Auth: http://stackoverflow.com/a/5957629/293175\x0a\x09 and https://gist.github.com/1686663\x22\x0a\x09| header token auth parts|\x0a\x0a\x09(username isNil and: [password isNil]) ifTrue: [^ true].\x0a\x0a\x09\x22get authentication header\x22\x0a\x09header := (aRequest headers at: 'authorization') ifNil:[''].\x0a\x09(header isEmpty)\x0a\x09ifTrue: [^ false]\x0a\x09ifFalse: [\x0a\x09\x09\x22get authentication token\x22\x0a\x09\x09token := (header tokenize: ' ') ifNil:[''].\x0a\x09\x09\x22convert back from base64\x22\x0a\x09\x09auth := self base64Decode: (token at: 2).\x0a\x09\x09\x22split token at colon\x22\x0a\x09\x09parts := auth tokenize: ':'.\x0a\x0a\x09\x09((username = (parts at: 1)) and: [password = (parts at: 2)])\x0a\x09\x09\x09ifTrue: [^ true]\x0a\x09\x09\x09ifFalse: [^ false]\x0a\x09].",
  77844. referencedClasses: [],
  77845. //>>excludeEnd("ide");
  77846. messageSends: ["ifTrue:", "and:", "isNil", "ifNil:", "at:", "headers", "ifTrue:ifFalse:", "isEmpty", "tokenize:", "base64Decode:", "="]
  77847. }),
  77848. $globals.FileServer);
  77849. $core.addMethod(
  77850. $core.method({
  77851. selector: "password:",
  77852. protocol: 'accessing',
  77853. fn: function (aPassword){
  77854. var self=this;
  77855. self["@password"]=aPassword;
  77856. return self;
  77857. },
  77858. //>>excludeStart("ide", pragmas.excludeIdeData);
  77859. args: ["aPassword"],
  77860. source: "password: aPassword\x0a\x09password := aPassword.",
  77861. referencedClasses: [],
  77862. //>>excludeEnd("ide");
  77863. messageSends: []
  77864. }),
  77865. $globals.FileServer);
  77866. $core.addMethod(
  77867. $core.method({
  77868. selector: "port",
  77869. protocol: 'accessing',
  77870. fn: function (){
  77871. var self=this;
  77872. var $1;
  77873. $1=self["@port"];
  77874. return $1;
  77875. },
  77876. //>>excludeStart("ide", pragmas.excludeIdeData);
  77877. args: [],
  77878. source: "port\x0a\x09^ port",
  77879. referencedClasses: [],
  77880. //>>excludeEnd("ide");
  77881. messageSends: []
  77882. }),
  77883. $globals.FileServer);
  77884. $core.addMethod(
  77885. $core.method({
  77886. selector: "port:",
  77887. protocol: 'accessing',
  77888. fn: function (aNumber){
  77889. var self=this;
  77890. self["@port"]=aNumber;
  77891. return self;
  77892. },
  77893. //>>excludeStart("ide", pragmas.excludeIdeData);
  77894. args: ["aNumber"],
  77895. source: "port: aNumber\x0a\x09port := aNumber",
  77896. referencedClasses: [],
  77897. //>>excludeEnd("ide");
  77898. messageSends: []
  77899. }),
  77900. $globals.FileServer);
  77901. $core.addMethod(
  77902. $core.method({
  77903. selector: "require:",
  77904. protocol: 'private',
  77905. fn: function (aModuleString){
  77906. var self=this;
  77907. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77908. return $core.withContext(function($ctx1) {
  77909. //>>excludeEnd("ctx");
  77910. var $1;
  77911. $1=$recv(require)._value_(aModuleString);
  77912. return $1;
  77913. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77914. }, function($ctx1) {$ctx1.fill(self,"require:",{aModuleString:aModuleString},$globals.FileServer)});
  77915. //>>excludeEnd("ctx");
  77916. },
  77917. //>>excludeStart("ide", pragmas.excludeIdeData);
  77918. args: ["aModuleString"],
  77919. source: "require: aModuleString\x0a\x09\x22call to the require function\x22\x0a\x09^require value: aModuleString",
  77920. referencedClasses: [],
  77921. //>>excludeEnd("ide");
  77922. messageSends: ["value:"]
  77923. }),
  77924. $globals.FileServer);
  77925. $core.addMethod(
  77926. $core.method({
  77927. selector: "respondAuthenticationRequiredTo:",
  77928. protocol: 'request handling',
  77929. fn: function (aResponse){
  77930. var self=this;
  77931. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77932. return $core.withContext(function($ctx1) {
  77933. //>>excludeEnd("ctx");
  77934. var $1;
  77935. $recv(aResponse)._writeHead_options_((401),$globals.HashedCollection._newFromPairs_(["WWW-Authenticate","Basic realm=\x22Secured Developer Area\x22"]));
  77936. $recv(aResponse)._write_("<html><body>Authentication needed</body></html>");
  77937. $1=$recv(aResponse)._end();
  77938. return self;
  77939. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77940. }, function($ctx1) {$ctx1.fill(self,"respondAuthenticationRequiredTo:",{aResponse:aResponse},$globals.FileServer)});
  77941. //>>excludeEnd("ctx");
  77942. },
  77943. //>>excludeStart("ide", pragmas.excludeIdeData);
  77944. args: ["aResponse"],
  77945. source: "respondAuthenticationRequiredTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 401 options: #{'WWW-Authenticate' -> 'Basic realm=\x22Secured Developer Area\x22'};\x0a\x09\x09write: '<html><body>Authentication needed</body></html>';\x0a\x09\x09end.",
  77946. referencedClasses: [],
  77947. //>>excludeEnd("ide");
  77948. messageSends: ["writeHead:options:", "write:", "end"]
  77949. }),
  77950. $globals.FileServer);
  77951. $core.addMethod(
  77952. $core.method({
  77953. selector: "respondCreatedTo:",
  77954. protocol: 'request handling',
  77955. fn: function (aResponse){
  77956. var self=this;
  77957. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77958. return $core.withContext(function($ctx1) {
  77959. //>>excludeEnd("ctx");
  77960. var $1;
  77961. $recv(aResponse)._writeHead_options_((201),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain","Access-Control-Allow-Origin","*"]));
  77962. $1=$recv(aResponse)._end();
  77963. return self;
  77964. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77965. }, function($ctx1) {$ctx1.fill(self,"respondCreatedTo:",{aResponse:aResponse},$globals.FileServer)});
  77966. //>>excludeEnd("ctx");
  77967. },
  77968. //>>excludeStart("ide", pragmas.excludeIdeData);
  77969. args: ["aResponse"],
  77970. source: "respondCreatedTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 201 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};\x0a\x09\x09end.",
  77971. referencedClasses: [],
  77972. //>>excludeEnd("ide");
  77973. messageSends: ["writeHead:options:", "end"]
  77974. }),
  77975. $globals.FileServer);
  77976. $core.addMethod(
  77977. $core.method({
  77978. selector: "respondDirectoryNamed:from:to:",
  77979. protocol: 'request handling',
  77980. fn: function (aDirname,aUrl,aResponse){
  77981. var self=this;
  77982. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77983. return $core.withContext(function($ctx1) {
  77984. //>>excludeEnd("ctx");
  77985. var $2,$1,$3,$5,$7,$6,$4,$receiver;
  77986. $2=$recv(aUrl)._pathname();
  77987. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77988. $ctx1.sendIdx["pathname"]=1;
  77989. //>>excludeEnd("ctx");
  77990. $1=$recv($2)._endsWith_("/");
  77991. if($core.assert($1)){
  77992. $3=$recv(aDirname).__comma("index.html");
  77993. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  77994. $ctx1.sendIdx[","]=1;
  77995. //>>excludeEnd("ctx");
  77996. self._respondFileNamed_to_($3,aResponse);
  77997. } else {
  77998. $5=$recv($recv(aUrl)._pathname()).__comma("/");
  77999. $7=$recv(aUrl)._search();
  78000. if(($receiver = $7) == null || $receiver.isNil){
  78001. $6="";
  78002. } else {
  78003. $6=$7;
  78004. };
  78005. $4=$recv($5).__comma($6);
  78006. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78007. $ctx1.sendIdx[","]=2;
  78008. //>>excludeEnd("ctx");
  78009. self._respondRedirect_to_($4,aResponse);
  78010. };
  78011. return self;
  78012. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78013. }, function($ctx1) {$ctx1.fill(self,"respondDirectoryNamed:from:to:",{aDirname:aDirname,aUrl:aUrl,aResponse:aResponse},$globals.FileServer)});
  78014. //>>excludeEnd("ctx");
  78015. },
  78016. //>>excludeStart("ide", pragmas.excludeIdeData);
  78017. args: ["aDirname", "aUrl", "aResponse"],
  78018. source: "respondDirectoryNamed: aDirname from: aUrl to: aResponse\x0a\x09(aUrl pathname endsWith: '/')\x0a\x09\x09ifTrue: [self respondFileNamed: aDirname, 'index.html' to: aResponse]\x0a\x09\x09ifFalse: [self respondRedirect: aUrl pathname, '/', (aUrl search ifNil: ['']) to: aResponse]",
  78019. referencedClasses: [],
  78020. //>>excludeEnd("ide");
  78021. messageSends: ["ifTrue:ifFalse:", "endsWith:", "pathname", "respondFileNamed:to:", ",", "respondRedirect:to:", "ifNil:", "search"]
  78022. }),
  78023. $globals.FileServer);
  78024. $core.addMethod(
  78025. $core.method({
  78026. selector: "respondFileNamed:to:",
  78027. protocol: 'request handling',
  78028. fn: function (aFilename,aResponse){
  78029. var self=this;
  78030. var type,filename;
  78031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78032. return $core.withContext(function($ctx1) {
  78033. //>>excludeEnd("ctx");
  78034. var $1,$2,$3,$4,$5;
  78035. filename=aFilename;
  78036. $recv(self["@fs"])._readFile_do_(filename,(function(ex,file){
  78037. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78038. return $core.withContext(function($ctx2) {
  78039. //>>excludeEnd("ctx");
  78040. $1=$recv(ex)._notNil();
  78041. if($core.assert($1)){
  78042. $2=console;
  78043. $3=$recv(filename).__comma(" does not exist");
  78044. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78045. $ctx2.sendIdx[","]=1;
  78046. //>>excludeEnd("ctx");
  78047. $recv($2)._log_($3);
  78048. return self._respondNotFoundTo_(aResponse);
  78049. } else {
  78050. type=$recv(self._class())._mimeTypeFor_(filename);
  78051. type;
  78052. $4=$recv(type).__eq("application/javascript");
  78053. if($core.assert($4)){
  78054. type=$recv(type).__comma(";charset=utf-8");
  78055. type;
  78056. };
  78057. $recv(aResponse)._writeHead_options_((200),$globals.HashedCollection._newFromPairs_(["Content-Type",type]));
  78058. $recv(aResponse)._write_encoding_(file,"binary");
  78059. $5=$recv(aResponse)._end();
  78060. return $5;
  78061. };
  78062. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78063. }, function($ctx2) {$ctx2.fillBlock({ex:ex,file:file},$ctx1,1)});
  78064. //>>excludeEnd("ctx");
  78065. }));
  78066. return self;
  78067. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78068. }, function($ctx1) {$ctx1.fill(self,"respondFileNamed:to:",{aFilename:aFilename,aResponse:aResponse,type:type,filename:filename},$globals.FileServer)});
  78069. //>>excludeEnd("ctx");
  78070. },
  78071. //>>excludeStart("ide", pragmas.excludeIdeData);
  78072. args: ["aFilename", "aResponse"],
  78073. source: "respondFileNamed: aFilename to: aResponse\x0a\x09| type filename |\x0a\x0a\x09filename := aFilename.\x0a\x0a\x09fs readFile: filename do: [:ex :file |\x0a\x09\x09ex notNil \x0a\x09\x09\x09ifTrue: [\x0a\x09\x09\x09\x09console log: filename, ' does not exist'.\x0a\x09\x09\x09\x09self respondNotFoundTo: aResponse]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09type := self class mimeTypeFor: filename.\x0a\x09\x09\x09\x09type = 'application/javascript'\x0a\x09\x09\x09\x09\x09ifTrue: [ type:=type,';charset=utf-8' ].\x0a\x09\x09\x09\x09aResponse \x0a\x09\x09\x09\x09\x09writeHead: 200 options: #{'Content-Type' -> type};\x0a\x09\x09\x09\x09\x09write: file encoding: 'binary';\x0a\x09\x09\x09\x09\x09end]]",
  78074. referencedClasses: [],
  78075. //>>excludeEnd("ide");
  78076. messageSends: ["readFile:do:", "ifTrue:ifFalse:", "notNil", "log:", ",", "respondNotFoundTo:", "mimeTypeFor:", "class", "ifTrue:", "=", "writeHead:options:", "write:encoding:", "end"]
  78077. }),
  78078. $globals.FileServer);
  78079. $core.addMethod(
  78080. $core.method({
  78081. selector: "respondInternalErrorTo:",
  78082. protocol: 'request handling',
  78083. fn: function (aResponse){
  78084. var self=this;
  78085. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78086. return $core.withContext(function($ctx1) {
  78087. //>>excludeEnd("ctx");
  78088. var $1;
  78089. $recv(aResponse)._writeHead_options_((500),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain"]));
  78090. $recv(aResponse)._write_("500 Internal server error");
  78091. $1=$recv(aResponse)._end();
  78092. return self;
  78093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78094. }, function($ctx1) {$ctx1.fill(self,"respondInternalErrorTo:",{aResponse:aResponse},$globals.FileServer)});
  78095. //>>excludeEnd("ctx");
  78096. },
  78097. //>>excludeStart("ide", pragmas.excludeIdeData);
  78098. args: ["aResponse"],
  78099. source: "respondInternalErrorTo: aResponse\x0a\x09aResponse \x0a\x09\x09writeHead: 500 options: #{'Content-Type' -> 'text/plain'};\x0a\x09\x09write: '500 Internal server error';\x0a\x09\x09end",
  78100. referencedClasses: [],
  78101. //>>excludeEnd("ide");
  78102. messageSends: ["writeHead:options:", "write:", "end"]
  78103. }),
  78104. $globals.FileServer);
  78105. $core.addMethod(
  78106. $core.method({
  78107. selector: "respondNotCreatedTo:",
  78108. protocol: 'request handling',
  78109. fn: function (aResponse){
  78110. var self=this;
  78111. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78112. return $core.withContext(function($ctx1) {
  78113. //>>excludeEnd("ctx");
  78114. var $1;
  78115. $recv(aResponse)._writeHead_options_((400),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain"]));
  78116. $recv(aResponse)._write_("File could not be created. Did you forget to create the src directory on the server?");
  78117. $1=$recv(aResponse)._end();
  78118. return self;
  78119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78120. }, function($ctx1) {$ctx1.fill(self,"respondNotCreatedTo:",{aResponse:aResponse},$globals.FileServer)});
  78121. //>>excludeEnd("ctx");
  78122. },
  78123. //>>excludeStart("ide", pragmas.excludeIdeData);
  78124. args: ["aResponse"],
  78125. source: "respondNotCreatedTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 400 options: #{'Content-Type' -> 'text/plain'};\x0a\x09\x09write: 'File could not be created. Did you forget to create the src directory on the server?';\x0a\x09\x09end.",
  78126. referencedClasses: [],
  78127. //>>excludeEnd("ide");
  78128. messageSends: ["writeHead:options:", "write:", "end"]
  78129. }),
  78130. $globals.FileServer);
  78131. $core.addMethod(
  78132. $core.method({
  78133. selector: "respondNotFoundTo:",
  78134. protocol: 'request handling',
  78135. fn: function (aResponse){
  78136. var self=this;
  78137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78138. return $core.withContext(function($ctx1) {
  78139. //>>excludeEnd("ctx");
  78140. var $2,$1,$3,$4;
  78141. $2=self._fallbackPage();
  78142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78143. $ctx1.sendIdx["fallbackPage"]=1;
  78144. //>>excludeEnd("ctx");
  78145. $1=$recv($2)._isNil();
  78146. if(!$core.assert($1)){
  78147. $3=self._respondFileNamed_to_(self._fallbackPage(),aResponse);
  78148. return $3;
  78149. };
  78150. $recv(aResponse)._writeHead_options_((404),$globals.HashedCollection._newFromPairs_(["Content-Type","text/html"]));
  78151. $recv(aResponse)._write_("<html><body><p>404 Not found</p>");
  78152. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78153. $ctx1.sendIdx["write:"]=1;
  78154. //>>excludeEnd("ctx");
  78155. $recv(aResponse)._write_("<p>Did you forget to put an index.html file into the directory which is served by \x22bin/amber serve\x22? To solve this you can:<ul>");
  78156. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78157. $ctx1.sendIdx["write:"]=2;
  78158. //>>excludeEnd("ctx");
  78159. $recv(aResponse)._write_("<li>create an index.html in the served directory.</li>");
  78160. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78161. $ctx1.sendIdx["write:"]=3;
  78162. //>>excludeEnd("ctx");
  78163. $recv(aResponse)._write_("<li>can also specify the location of a page to be served whenever path does not resolve to a file with the \x22--fallback-page\x22 option.</li>");
  78164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78165. $ctx1.sendIdx["write:"]=4;
  78166. //>>excludeEnd("ctx");
  78167. $recv(aResponse)._write_("<li>change the directory to be served with the \x22--base-path\x22 option.</li>");
  78168. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78169. $ctx1.sendIdx["write:"]=5;
  78170. //>>excludeEnd("ctx");
  78171. $recv(aResponse)._write_("</ul></p></body></html>");
  78172. $4=$recv(aResponse)._end();
  78173. return self;
  78174. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78175. }, function($ctx1) {$ctx1.fill(self,"respondNotFoundTo:",{aResponse:aResponse},$globals.FileServer)});
  78176. //>>excludeEnd("ctx");
  78177. },
  78178. //>>excludeStart("ide", pragmas.excludeIdeData);
  78179. args: ["aResponse"],
  78180. source: "respondNotFoundTo: aResponse\x0a\x09self fallbackPage isNil ifFalse: [^self respondFileNamed: self fallbackPage to: aResponse].\x0a\x09aResponse \x0a\x09\x09writeHead: 404 options: #{'Content-Type' -> 'text/html'};\x0a\x09\x09write: '<html><body><p>404 Not found</p>';\x0a\x09\x09write: '<p>Did you forget to put an index.html file into the directory which is served by \x22bin/amber serve\x22? To solve this you can:<ul>';\x0a\x09\x09write: '<li>create an index.html in the served directory.</li>';\x0a\x09\x09write: '<li>can also specify the location of a page to be served whenever path does not resolve to a file with the \x22--fallback-page\x22 option.</li>';\x0a\x09\x09write: '<li>change the directory to be served with the \x22--base-path\x22 option.</li>';\x0a\x09\x09write: '</ul></p></body></html>';\x0a\x09\x09end",
  78181. referencedClasses: [],
  78182. //>>excludeEnd("ide");
  78183. messageSends: ["ifFalse:", "isNil", "fallbackPage", "respondFileNamed:to:", "writeHead:options:", "write:", "end"]
  78184. }),
  78185. $globals.FileServer);
  78186. $core.addMethod(
  78187. $core.method({
  78188. selector: "respondOKTo:",
  78189. protocol: 'request handling',
  78190. fn: function (aResponse){
  78191. var self=this;
  78192. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78193. return $core.withContext(function($ctx1) {
  78194. //>>excludeEnd("ctx");
  78195. var $1;
  78196. $recv(aResponse)._writeHead_options_((200),$globals.HashedCollection._newFromPairs_(["Content-Type","text/plain","Access-Control-Allow-Origin","*"]));
  78197. $1=$recv(aResponse)._end();
  78198. return self;
  78199. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78200. }, function($ctx1) {$ctx1.fill(self,"respondOKTo:",{aResponse:aResponse},$globals.FileServer)});
  78201. //>>excludeEnd("ctx");
  78202. },
  78203. //>>excludeStart("ide", pragmas.excludeIdeData);
  78204. args: ["aResponse"],
  78205. source: "respondOKTo: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 200 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'};\x0a\x09\x09end.",
  78206. referencedClasses: [],
  78207. //>>excludeEnd("ide");
  78208. messageSends: ["writeHead:options:", "end"]
  78209. }),
  78210. $globals.FileServer);
  78211. $core.addMethod(
  78212. $core.method({
  78213. selector: "respondRedirect:to:",
  78214. protocol: 'request handling',
  78215. fn: function (aString,aResponse){
  78216. var self=this;
  78217. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78218. return $core.withContext(function($ctx1) {
  78219. //>>excludeEnd("ctx");
  78220. var $1;
  78221. $recv(aResponse)._writeHead_options_((303),$globals.HashedCollection._newFromPairs_(["Location",aString]));
  78222. $1=$recv(aResponse)._end();
  78223. return self;
  78224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78225. }, function($ctx1) {$ctx1.fill(self,"respondRedirect:to:",{aString:aString,aResponse:aResponse},$globals.FileServer)});
  78226. //>>excludeEnd("ctx");
  78227. },
  78228. //>>excludeStart("ide", pragmas.excludeIdeData);
  78229. args: ["aString", "aResponse"],
  78230. source: "respondRedirect: aString to: aResponse\x0a\x09aResponse\x0a\x09\x09writeHead: 303 options: #{'Location' -> aString};\x0a\x09\x09end.",
  78231. referencedClasses: [],
  78232. //>>excludeEnd("ide");
  78233. messageSends: ["writeHead:options:", "end"]
  78234. }),
  78235. $globals.FileServer);
  78236. $core.addMethod(
  78237. $core.method({
  78238. selector: "start",
  78239. protocol: 'starting',
  78240. fn: function (){
  78241. var self=this;
  78242. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78243. return $core.withContext(function($ctx1) {
  78244. //>>excludeEnd("ctx");
  78245. var $1,$2,$3,$4,$8,$7,$6,$10,$9,$5,$11;
  78246. self._checkDirectoryLayout();
  78247. $1=$recv(self["@http"])._createServer_((function(request,response){
  78248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78249. return $core.withContext(function($ctx2) {
  78250. //>>excludeEnd("ctx");
  78251. return self._handleRequest_respondTo_(request,response);
  78252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78253. }, function($ctx2) {$ctx2.fillBlock({request:request,response:response},$ctx1,1)});
  78254. //>>excludeEnd("ctx");
  78255. }));
  78256. $recv($1)._on_do_("error",(function(error){
  78257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78258. return $core.withContext(function($ctx2) {
  78259. //>>excludeEnd("ctx");
  78260. $2=console;
  78261. $3="Error starting server: ".__comma(error);
  78262. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78263. $ctx2.sendIdx[","]=1;
  78264. //>>excludeEnd("ctx");
  78265. return $recv($2)._log_($3);
  78266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78267. $ctx2.sendIdx["log:"]=1;
  78268. //>>excludeEnd("ctx");
  78269. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78270. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,2)});
  78271. //>>excludeEnd("ctx");
  78272. }));
  78273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78274. $ctx1.sendIdx["on:do:"]=1;
  78275. //>>excludeEnd("ctx");
  78276. $recv($1)._on_do_("listening",(function(){
  78277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78278. return $core.withContext(function($ctx2) {
  78279. //>>excludeEnd("ctx");
  78280. $4=console;
  78281. $8=self._host();
  78282. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78283. $ctx2.sendIdx["host"]=1;
  78284. //>>excludeEnd("ctx");
  78285. $7="Starting file server on http://".__comma($8);
  78286. $6=$recv($7).__comma(":");
  78287. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78288. $ctx2.sendIdx[","]=3;
  78289. //>>excludeEnd("ctx");
  78290. $10=self._port();
  78291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78292. $ctx2.sendIdx["port"]=1;
  78293. //>>excludeEnd("ctx");
  78294. $9=$recv($10)._asString();
  78295. $5=$recv($6).__comma($9);
  78296. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78297. $ctx2.sendIdx[","]=2;
  78298. //>>excludeEnd("ctx");
  78299. return $recv($4)._log_($5);
  78300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78301. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  78302. //>>excludeEnd("ctx");
  78303. }));
  78304. $11=$recv($1)._listen_host_(self._port(),self._host());
  78305. return self;
  78306. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78307. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.FileServer)});
  78308. //>>excludeEnd("ctx");
  78309. },
  78310. //>>excludeStart("ide", pragmas.excludeIdeData);
  78311. args: [],
  78312. source: "start\x0a\x09\x22Checks if required directory layout is present (issue warning if not).\x0a\x09 Afterwards start the server.\x22\x0a\x09self checkDirectoryLayout.\x0a\x09(http createServer: [:request :response |\x0a\x09 self handleRequest: request respondTo: response])\x0a\x09 on: 'error' do: [:error | console log: 'Error starting server: ', error];\x0a\x09 on: 'listening' do: [console log: 'Starting file server on http://', self host, ':', self port asString];\x0a\x09 listen: self port host: self host.",
  78313. referencedClasses: [],
  78314. //>>excludeEnd("ide");
  78315. messageSends: ["checkDirectoryLayout", "on:do:", "createServer:", "handleRequest:respondTo:", "log:", ",", "host", "asString", "port", "listen:host:"]
  78316. }),
  78317. $globals.FileServer);
  78318. $core.addMethod(
  78319. $core.method({
  78320. selector: "startOn:",
  78321. protocol: 'starting',
  78322. fn: function (aPort){
  78323. var self=this;
  78324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78325. return $core.withContext(function($ctx1) {
  78326. //>>excludeEnd("ctx");
  78327. self._port_(aPort);
  78328. self._start();
  78329. return self;
  78330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78331. }, function($ctx1) {$ctx1.fill(self,"startOn:",{aPort:aPort},$globals.FileServer)});
  78332. //>>excludeEnd("ctx");
  78333. },
  78334. //>>excludeStart("ide", pragmas.excludeIdeData);
  78335. args: ["aPort"],
  78336. source: "startOn: aPort\x0a\x09self port: aPort.\x0a\x09self start",
  78337. referencedClasses: [],
  78338. //>>excludeEnd("ide");
  78339. messageSends: ["port:", "start"]
  78340. }),
  78341. $globals.FileServer);
  78342. $core.addMethod(
  78343. $core.method({
  78344. selector: "username:",
  78345. protocol: 'accessing',
  78346. fn: function (aUsername){
  78347. var self=this;
  78348. self["@username"]=aUsername;
  78349. return self;
  78350. },
  78351. //>>excludeStart("ide", pragmas.excludeIdeData);
  78352. args: ["aUsername"],
  78353. source: "username: aUsername\x0a\x09username := aUsername.",
  78354. referencedClasses: [],
  78355. //>>excludeEnd("ide");
  78356. messageSends: []
  78357. }),
  78358. $globals.FileServer);
  78359. $core.addMethod(
  78360. $core.method({
  78361. selector: "validateBasePath",
  78362. protocol: 'private',
  78363. fn: function (){
  78364. var self=this;
  78365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78366. return $core.withContext(function($ctx1) {
  78367. //>>excludeEnd("ctx");
  78368. var $1,$2,$3,$4,$7,$6,$5,$8,$9,$receiver;
  78369. $1=self["@fs"];
  78370. $2=self._basePath();
  78371. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78372. $ctx1.sendIdx["basePath"]=1;
  78373. //>>excludeEnd("ctx");
  78374. $recv($1)._stat_then_($2,(function(err,stat){
  78375. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78376. return $core.withContext(function($ctx2) {
  78377. //>>excludeEnd("ctx");
  78378. if(($receiver = err) == null || $receiver.isNil){
  78379. $3=$recv(stat)._isDirectory();
  78380. if(!$core.assert($3)){
  78381. $4=console;
  78382. $7=self._basePath();
  78383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78384. $ctx2.sendIdx["basePath"]=2;
  78385. //>>excludeEnd("ctx");
  78386. $6="Warning: --base-path parameter ".__comma($7);
  78387. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78388. $ctx2.sendIdx[","]=2;
  78389. //>>excludeEnd("ctx");
  78390. $5=$recv($6).__comma(" is not a directory.");
  78391. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78392. $ctx2.sendIdx[","]=1;
  78393. //>>excludeEnd("ctx");
  78394. return $recv($4)._warn_($5);
  78395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78396. $ctx2.sendIdx["warn:"]=1;
  78397. //>>excludeEnd("ctx");
  78398. };
  78399. } else {
  78400. $8=console;
  78401. $9=$recv("Warning: path at --base-path parameter ".__comma(self._basePath())).__comma(" does not exist.");
  78402. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78403. $ctx2.sendIdx[","]=3;
  78404. //>>excludeEnd("ctx");
  78405. return $recv($8)._warn_($9);
  78406. };
  78407. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78408. }, function($ctx2) {$ctx2.fillBlock({err:err,stat:stat},$ctx1,1)});
  78409. //>>excludeEnd("ctx");
  78410. }));
  78411. return self;
  78412. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78413. }, function($ctx1) {$ctx1.fill(self,"validateBasePath",{},$globals.FileServer)});
  78414. //>>excludeEnd("ctx");
  78415. },
  78416. //>>excludeStart("ide", pragmas.excludeIdeData);
  78417. args: [],
  78418. source: "validateBasePath\x0a\x09\x22The basePath must be an existing directory. \x22\x0a\x09fs stat: self basePath then: [ :err :stat | err\x0a\x09\x09ifNil: [ stat isDirectory ifFalse: [ console warn: 'Warning: --base-path parameter ' , self basePath , ' is not a directory.' ]]\x0a\x09\x09ifNotNil: [ console warn: 'Warning: path at --base-path parameter ' , self basePath , ' does not exist.' ]].",
  78419. referencedClasses: [],
  78420. //>>excludeEnd("ide");
  78421. messageSends: ["stat:then:", "basePath", "ifNil:ifNotNil:", "ifFalse:", "isDirectory", "warn:", ","]
  78422. }),
  78423. $globals.FileServer);
  78424. $core.addMethod(
  78425. $core.method({
  78426. selector: "withBasePath:",
  78427. protocol: 'private',
  78428. fn: function (aBaseRelativePath){
  78429. var self=this;
  78430. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78431. return $core.withContext(function($ctx1) {
  78432. //>>excludeEnd("ctx");
  78433. var $1;
  78434. $1=$recv(self["@path"])._join_with_(self._basePath(),aBaseRelativePath);
  78435. return $1;
  78436. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78437. }, function($ctx1) {$ctx1.fill(self,"withBasePath:",{aBaseRelativePath:aBaseRelativePath},$globals.FileServer)});
  78438. //>>excludeEnd("ctx");
  78439. },
  78440. //>>excludeStart("ide", pragmas.excludeIdeData);
  78441. args: ["aBaseRelativePath"],
  78442. source: "withBasePath: aBaseRelativePath\x0a\x09\x22return a file path which is relative to the basePath.\x22\x0a\x09^ path join: self basePath with: aBaseRelativePath",
  78443. referencedClasses: [],
  78444. //>>excludeEnd("ide");
  78445. messageSends: ["join:with:", "basePath"]
  78446. }),
  78447. $globals.FileServer);
  78448. $core.addMethod(
  78449. $core.method({
  78450. selector: "writeData:toFileNamed:",
  78451. protocol: 'private',
  78452. fn: function (data,aFilename){
  78453. var self=this;
  78454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78455. return $core.withContext(function($ctx1) {
  78456. //>>excludeEnd("ctx");
  78457. $recv(console)._log_(aFilename);
  78458. return self;
  78459. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78460. }, function($ctx1) {$ctx1.fill(self,"writeData:toFileNamed:",{data:data,aFilename:aFilename},$globals.FileServer)});
  78461. //>>excludeEnd("ctx");
  78462. },
  78463. //>>excludeStart("ide", pragmas.excludeIdeData);
  78464. args: ["data", "aFilename"],
  78465. source: "writeData: data toFileNamed: aFilename\x0a\x09console log: aFilename",
  78466. referencedClasses: [],
  78467. //>>excludeEnd("ide");
  78468. messageSends: ["log:"]
  78469. }),
  78470. $globals.FileServer);
  78471. $globals.FileServer.klass.iVarNames = ['mimeTypes'];
  78472. $core.addMethod(
  78473. $core.method({
  78474. selector: "commandLineSwitches",
  78475. protocol: 'accessing',
  78476. fn: function (){
  78477. var self=this;
  78478. var switches;
  78479. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78480. return $core.withContext(function($ctx1) {
  78481. //>>excludeEnd("ctx");
  78482. var $1;
  78483. switches=$recv(self._methodsInProtocol_("accessing"))._collect_((function(each){
  78484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78485. return $core.withContext(function($ctx2) {
  78486. //>>excludeEnd("ctx");
  78487. return $recv(each)._selector();
  78488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78489. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78490. //>>excludeEnd("ctx");
  78491. }));
  78492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78493. $ctx1.sendIdx["collect:"]=1;
  78494. //>>excludeEnd("ctx");
  78495. switches=$recv(switches)._select_((function(each){
  78496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78497. return $core.withContext(function($ctx2) {
  78498. //>>excludeEnd("ctx");
  78499. return $recv(each)._match_("^[^:]*:$");
  78500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78501. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,2)});
  78502. //>>excludeEnd("ctx");
  78503. }));
  78504. switches=$recv(switches)._collect_((function(each){
  78505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78506. return $core.withContext(function($ctx2) {
  78507. //>>excludeEnd("ctx");
  78508. return $recv($recv($recv($recv(each)._allButLast())._replace_with_("([A-Z])","-$1"))._asLowercase())._replace_with_("^([a-z])","--$1");
  78509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78510. $ctx2.sendIdx["replace:with:"]=1;
  78511. //>>excludeEnd("ctx");
  78512. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78513. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,3)});
  78514. //>>excludeEnd("ctx");
  78515. }));
  78516. $1=switches;
  78517. return $1;
  78518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78519. }, function($ctx1) {$ctx1.fill(self,"commandLineSwitches",{switches:switches},$globals.FileServer.klass)});
  78520. //>>excludeEnd("ctx");
  78521. },
  78522. //>>excludeStart("ide", pragmas.excludeIdeData);
  78523. args: [],
  78524. source: "commandLineSwitches\x0a\x09\x22Collect all methodnames from the 'accessing' protocol\x0a\x09 and select the ones with only one parameter.\x0a\x09 Then remove the ':' at the end of the name\x0a\x09 and add a '--' at the beginning.\x0a\x09 Additionally all uppercase letters are made lowercase and preceded by a '-'.\x0a\x09 Example: fallbackPage: becomes --fallback-page.\x0a\x09 Return the Array containing the commandline switches.\x22\x0a\x09| switches |\x0a\x09switches := ((self methodsInProtocol: 'accessing') collect: [ :each | each selector]).\x0a\x09switches := switches select: [ :each | each match: '^[^:]*:$'].\x0a\x09switches :=switches collect: [ :each |\x0a\x09\x09(each allButLast replace: '([A-Z])' with: '-$1') asLowercase replace: '^([a-z])' with: '--$1' ].\x0a\x09^ switches",
  78525. referencedClasses: [],
  78526. //>>excludeEnd("ide");
  78527. messageSends: ["collect:", "methodsInProtocol:", "selector", "select:", "match:", "replace:with:", "asLowercase", "allButLast"]
  78528. }),
  78529. $globals.FileServer.klass);
  78530. $core.addMethod(
  78531. $core.method({
  78532. selector: "createServerWithArguments:",
  78533. protocol: 'initialization',
  78534. fn: function (options){
  78535. var self=this;
  78536. var server,popFront,front,optionName,optionValue,switches;
  78537. function $Array(){return $globals.Array||(typeof Array=="undefined"?nil:Array)}
  78538. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78539. return $core.withContext(function($ctx1) {
  78540. //>>excludeEnd("ctx");
  78541. var $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11;
  78542. var $early={};
  78543. try {
  78544. switches=self._commandLineSwitches();
  78545. server=self._new();
  78546. $recv(options)._ifEmpty_((function(){
  78547. $1=server;
  78548. throw $early=[$1];
  78549. }));
  78550. $2=$recv($recv(options)._size())._even();
  78551. if(!$core.assert($2)){
  78552. $recv(console)._log_("Using default parameters.");
  78553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78554. $ctx1.sendIdx["log:"]=1;
  78555. //>>excludeEnd("ctx");
  78556. $3=console;
  78557. $4="Wrong commandline options or not enough arguments for: ".__comma(options);
  78558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78559. $ctx1.sendIdx[","]=1;
  78560. //>>excludeEnd("ctx");
  78561. $recv($3)._log_($4);
  78562. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78563. $ctx1.sendIdx["log:"]=2;
  78564. //>>excludeEnd("ctx");
  78565. $5=console;
  78566. $6="Use any of the following ones: ".__comma(switches);
  78567. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78568. $ctx1.sendIdx[","]=2;
  78569. //>>excludeEnd("ctx");
  78570. $recv($5)._log_($6);
  78571. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78572. $ctx1.sendIdx["log:"]=3;
  78573. //>>excludeEnd("ctx");
  78574. $7=server;
  78575. return $7;
  78576. };
  78577. popFront=(function(args){
  78578. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78579. return $core.withContext(function($ctx2) {
  78580. //>>excludeEnd("ctx");
  78581. front=$recv(args)._first();
  78582. front;
  78583. $recv(args)._remove_(front);
  78584. return front;
  78585. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78586. }, function($ctx2) {$ctx2.fillBlock({args:args},$ctx1,3)});
  78587. //>>excludeEnd("ctx");
  78588. });
  78589. $recv((function(){
  78590. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78591. return $core.withContext(function($ctx2) {
  78592. //>>excludeEnd("ctx");
  78593. return $recv(options)._notEmpty();
  78594. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78595. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,4)});
  78596. //>>excludeEnd("ctx");
  78597. }))._whileTrue_((function(){
  78598. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78599. return $core.withContext(function($ctx2) {
  78600. //>>excludeEnd("ctx");
  78601. optionName=$recv(popFront)._value_(options);
  78602. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78603. $ctx2.sendIdx["value:"]=1;
  78604. //>>excludeEnd("ctx");
  78605. optionName;
  78606. optionValue=$recv(popFront)._value_(options);
  78607. optionValue;
  78608. $8=$recv(switches)._includes_(optionName);
  78609. if($core.assert($8)){
  78610. optionName=self._selectorForCommandLineSwitch_(optionName);
  78611. optionName;
  78612. return $recv(server)._perform_withArguments_(optionName,$recv($Array())._with_(optionValue));
  78613. } else {
  78614. $9=console;
  78615. $10=$recv(optionName).__comma(" is not a valid commandline option");
  78616. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78617. $ctx2.sendIdx[","]=3;
  78618. //>>excludeEnd("ctx");
  78619. $recv($9)._log_($10);
  78620. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78621. $ctx2.sendIdx["log:"]=4;
  78622. //>>excludeEnd("ctx");
  78623. return $recv(console)._log_("Use any of the following ones: ".__comma(switches));
  78624. };
  78625. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78626. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,5)});
  78627. //>>excludeEnd("ctx");
  78628. }));
  78629. $11=server;
  78630. return $11;
  78631. }
  78632. catch(e) {if(e===$early)return e[0]; throw e}
  78633. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78634. }, function($ctx1) {$ctx1.fill(self,"createServerWithArguments:",{options:options,server:server,popFront:popFront,front:front,optionName:optionName,optionValue:optionValue,switches:switches},$globals.FileServer.klass)});
  78635. //>>excludeEnd("ctx");
  78636. },
  78637. //>>excludeStart("ide", pragmas.excludeIdeData);
  78638. args: ["options"],
  78639. source: "createServerWithArguments: options\x0a\x09\x22If options are empty return a default FileServer instance.\x0a\x09 If options are given loop through them and set the passed in values\x0a\x09 on the FileServer instance.\x0a\x09 \x0a\x09 Commanline options map directly to methods in the 'accessing' protocol\x0a\x09 taking one parameter.\x0a\x09 Adding a method to this protocol makes it directly settable through\x0a\x09 command line options.\x0a\x09 \x22\x0a\x09| server popFront front optionName optionValue switches |\x0a\x0a\x09switches := self commandLineSwitches.\x0a\x0a\x09server := self new.\x0a\x0a\x09options ifEmpty: [^server].\x0a\x0a\x09(options size even) ifFalse: [\x0a\x09\x09console log: 'Using default parameters.'.\x0a\x09\x09console log: 'Wrong commandline options or not enough arguments for: ' , options.\x0a\x09\x09console log: 'Use any of the following ones: ', switches.\x0a\x09\x09^server].\x0a\x0a\x09popFront := [:args |\x0a\x09\x09front := args first.\x0a\x09\x09args remove: front.\x0a\x09\x09front].\x0a\x0a\x09[options notEmpty] whileTrue: [\x0a\x09\x09optionName := popFront value: options.\x0a\x09\x09optionValue := popFront value: options.\x0a\x0a\x09\x09(switches includes: optionName) ifTrue: [\x0a\x09\x09\x09optionName := self selectorForCommandLineSwitch: optionName.\x0a\x09\x09\x09server perform: optionName withArguments: (Array with: optionValue)]\x0a\x09\x09\x09ifFalse: [\x0a\x09\x09\x09\x09console log: optionName, ' is not a valid commandline option'.\x0a\x09\x09\x09\x09console log: 'Use any of the following ones: ', switches ]].\x0a\x09^ server.",
  78640. referencedClasses: ["Array"],
  78641. //>>excludeEnd("ide");
  78642. messageSends: ["commandLineSwitches", "new", "ifEmpty:", "ifFalse:", "even", "size", "log:", ",", "first", "remove:", "whileTrue:", "notEmpty", "value:", "ifTrue:ifFalse:", "includes:", "selectorForCommandLineSwitch:", "perform:withArguments:", "with:"]
  78643. }),
  78644. $globals.FileServer.klass);
  78645. $core.addMethod(
  78646. $core.method({
  78647. selector: "defaultBasePath",
  78648. protocol: 'accessing',
  78649. fn: function (){
  78650. var self=this;
  78651. return "./";
  78652. },
  78653. //>>excludeStart("ide", pragmas.excludeIdeData);
  78654. args: [],
  78655. source: "defaultBasePath\x0a\x09^ './'",
  78656. referencedClasses: [],
  78657. //>>excludeEnd("ide");
  78658. messageSends: []
  78659. }),
  78660. $globals.FileServer.klass);
  78661. $core.addMethod(
  78662. $core.method({
  78663. selector: "defaultHost",
  78664. protocol: 'accessing',
  78665. fn: function (){
  78666. var self=this;
  78667. return "127.0.0.1";
  78668. },
  78669. //>>excludeStart("ide", pragmas.excludeIdeData);
  78670. args: [],
  78671. source: "defaultHost\x0a\x09^ '127.0.0.1'",
  78672. referencedClasses: [],
  78673. //>>excludeEnd("ide");
  78674. messageSends: []
  78675. }),
  78676. $globals.FileServer.klass);
  78677. $core.addMethod(
  78678. $core.method({
  78679. selector: "defaultMimeTypes",
  78680. protocol: 'accessing',
  78681. fn: function (){
  78682. var self=this;
  78683. var $1;
  78684. $1=$globals.HashedCollection._newFromPairs_(["%","application/x-trash","323","text/h323","abw","application/x-abiword","ai","application/postscript","aif","audio/x-aiff","aifc","audio/x-aiff","aiff","audio/x-aiff","alc","chemical/x-alchemy","art","image/x-jg","asc","text/plain","asf","video/x-ms-asf","asn","chemical/x-ncbi-asn1-spec","aso","chemical/x-ncbi-asn1-binary","asx","video/x-ms-asf","au","audio/basic","avi","video/x-msvideo","b","chemical/x-molconn-Z","bak","application/x-trash","bat","application/x-msdos-program","bcpio","application/x-bcpio","bib","text/x-bibtex","bin","application/octet-stream","bmp","image/x-ms-bmp","book","application/x-maker","bsd","chemical/x-crossfire","c","text/x-csrc","c++","text/x-c++src","c3d","chemical/x-chem3d","cac","chemical/x-cache","cache","chemical/x-cache","cascii","chemical/x-cactvs-binary","cat","application/vnd.ms-pki.seccat","cbin","chemical/x-cactvs-binary","cc","text/x-c++src","cdf","application/x-cdf","cdr","image/x-coreldraw","cdt","image/x-coreldrawtemplate","cdx","chemical/x-cdx","cdy","application/vnd.cinderella","cef","chemical/x-cxf","cer","chemical/x-cerius","chm","chemical/x-chemdraw","chrt","application/x-kchart","cif","chemical/x-cif","class","application/java-vm","cls","text/x-tex","cmdf","chemical/x-cmdf","cml","chemical/x-cml","cod","application/vnd.rim.cod","com","application/x-msdos-program","cpa","chemical/x-compass","cpio","application/x-cpio","cpp","text/x-c++src","cpt","image/x-corelphotopaint","crl","application/x-pkcs7-crl","crt","application/x-x509-ca-cert","csf","chemical/x-cache-csf","csh","text/x-csh","csm","chemical/x-csml","csml","chemical/x-csml","css","text/css","csv","text/comma-separated-values","ctab","chemical/x-cactvs-binary","ctx","chemical/x-ctx","cu","application/cu-seeme","cub","chemical/x-gaussian-cube","cxf","chemical/x-cxf","cxx","text/x-c++src","dat","chemical/x-mopac-input","dcr","application/x-director","deb","application/x-debian-package","dif","video/dv","diff","text/plain","dir","application/x-director","djv","image/vnd.djvu","djvu","image/vnd.djvu","dl","video/dl","dll","application/x-msdos-program","dmg","application/x-apple-diskimage","dms","application/x-dms","doc","application/msword","dot","application/msword","dv","video/dv","dvi","application/x-dvi","dx","chemical/x-jcamp-dx","dxr","application/x-director","emb","chemical/x-embl-dl-nucleotide","embl","chemical/x-embl-dl-nucleotide","ent","chemical/x-pdb","eps","application/postscript","etx","text/x-setext","exe","application/x-msdos-program","ez","application/andrew-inset","fb","application/x-maker","fbdoc","application/x-maker","fch","chemical/x-gaussian-checkpoint","fchk","chemical/x-gaussian-checkpoint","fig","application/x-xfig","flac","application/x-flac","fli","video/fli","fm","application/x-maker","frame","application/x-maker","frm","application/x-maker","gal","chemical/x-gaussian-log","gam","chemical/x-gamess-input","gamin","chemical/x-gamess-input","gau","chemical/x-gaussian-input","gcd","text/x-pcs-gcd","gcf","application/x-graphing-calculator","gcg","chemical/x-gcg8-sequence","gen","chemical/x-genbank","gf","application/x-tex-gf","gif","image/gif","gjc","chemical/x-gaussian-input","gjf","chemical/x-gaussian-input","gl","video/gl","gnumeric","application/x-gnumeric","gpt","chemical/x-mopac-graph","gsf","application/x-font","gsm","audio/x-gsm","gtar","application/x-gtar","h","text/x-chdr","h++","text/x-c++hdr","hdf","application/x-hdf","hh","text/x-c++hdr","hin","chemical/x-hin","hpp","text/x-c++hdr","hqx","application/mac-binhex40","hs","text/x-haskell","hta","application/hta","htc","text/x-component","htm","text/html","html","text/html","hxx","text/x-c++hdr","ica","application/x-ica","ice","x-conference/x-cooltalk","ico","image/x-icon","ics","text/calendar","icz","text/calendar","ief","image/ief","iges","model/iges","igs","model/iges","iii","application/x-iphone","inp","chemical/x-gamess-input","ins","application/x-internet-signup","iso","application/x-iso9660-image","isp","application/x-internet-signup","ist","chemical/x-isostar","istr","chemical/x-isostar","jad","text/vnd.sun.j2me.app-descriptor","jar","application/java-archive","java","text/x-java","jdx","chemical/x-jcamp-dx","jmz","application/x-jmol","jng","image/x-jng","jnlp","application/x-java-jnlp-file","jpe","image/jpeg","jpeg","image/jpeg","jpg","image/jpeg","js","application/javascript","kar","audio/midi","key","application/pgp-keys","kil","application/x-killustrator","kin","chemical/x-kinemage","kpr","application/x-kpresenter","kpt","application/x-kpresenter","ksp","application/x-kspread","kwd","application/x-kword","kwt","application/x-kword","latex","application/x-latex","lha","application/x-lha","lhs","text/x-literate-haskell","lsf","video/x-la-asf","lsx","video/x-la-asf","ltx","text/x-tex","lzh","application/x-lzh","lzx","application/x-lzx","m3u","audio/x-mpegurl","m4a","audio/mpeg","maker","application/x-maker","man","application/x-troff-man","mcif","chemical/x-mmcif","mcm","chemical/x-macmolecule","mdb","application/msaccess","me","application/x-troff-me","mesh","model/mesh","mid","audio/midi","midi","audio/midi","mif","application/x-mif","mm","application/x-freemind","mmd","chemical/x-macromodel-input","mmf","application/vnd.smaf","mml","text/mathml","mmod","chemical/x-macromodel-input","mng","video/x-mng","moc","text/x-moc","mol","chemical/x-mdl-molfile","mol2","chemical/x-mol2","moo","chemical/x-mopac-out","mop","chemical/x-mopac-input","mopcrt","chemical/x-mopac-input","mov","video/quicktime","movie","video/x-sgi-movie","mp2","audio/mpeg","mp3","audio/mpeg","mp4","video/mp4","mpc","chemical/x-mopac-input","mpe","video/mpeg","mpeg","video/mpeg","mpega","audio/mpeg","mpg","video/mpeg","mpga","audio/mpeg","ms","application/x-troff-ms","msh","model/mesh","msi","application/x-msi","mvb","chemical/x-mopac-vib","mxu","video/vnd.mpegurl","nb","application/mathematica","nc","application/x-netcdf","nwc","application/x-nwc","o","application/x-object","oda","application/oda","odb","application/vnd.oasis.opendocument.database","odc","application/vnd.oasis.opendocument.chart","odf","application/vnd.oasis.opendocument.formula","odg","application/vnd.oasis.opendocument.graphics","odi","application/vnd.oasis.opendocument.image","odm","application/vnd.oasis.opendocument.text-master","odp","application/vnd.oasis.opendocument.presentation","ods","application/vnd.oasis.opendocument.spreadsheet","odt","application/vnd.oasis.opendocument.text","ogg","application/ogg","old","application/x-trash","oth","application/vnd.oasis.opendocument.text-web","oza","application/x-oz-application","p","text/x-pascal","p7r","application/x-pkcs7-certreqresp","pac","application/x-ns-proxy-autoconfig","pas","text/x-pascal","pat","image/x-coreldrawpattern","pbm","image/x-portable-bitmap","pcf","application/x-font","pcf.Z","application/x-font","pcx","image/pcx","pdb","chemical/x-pdb","pdf","application/pdf","pfa","application/x-font","pfb","application/x-font","pgm","image/x-portable-graymap","pgn","application/x-chess-pgn","pgp","application/pgp-signature","pk","application/x-tex-pk","pl","text/x-perl","pls","audio/x-scpls","pm","text/x-perl","png","image/png","pnm","image/x-portable-anymap","pot","text/plain","ppm","image/x-portable-pixmap","pps","application/vnd.ms-powerpoint","ppt","application/vnd.ms-powerpoint","prf","application/pics-rules","prt","chemical/x-ncbi-asn1-ascii","ps","application/postscript","psd","image/x-photoshop","psp","text/x-psp","py","text/x-python","pyc","application/x-python-code","pyo","application/x-python-code","qt","video/quicktime","qtl","application/x-quicktimeplayer","ra","audio/x-realaudio","ram","audio/x-pn-realaudio","rar","application/rar","ras","image/x-cmu-raster","rd","chemical/x-mdl-rdfile","rdf","application/rdf+xml","rgb","image/x-rgb","rm","audio/x-pn-realaudio","roff","application/x-troff","ros","chemical/x-rosdal","rpm","application/x-redhat-package-manager","rss","application/rss+xml","rtf","text/rtf","rtx","text/richtext","rxn","chemical/x-mdl-rxnfile","sct","text/scriptlet","sd","chemical/x-mdl-sdfile","sd2","audio/x-sd2","sda","application/vnd.stardivision.draw","sdc","application/vnd.stardivision.calc","sdd","application/vnd.stardivision.impress","sdf","chemical/x-mdl-sdfile","sdp","application/vnd.stardivision.impress","sdw","application/vnd.stardivision.writer","ser","application/java-serialized-object","sgf","application/x-go-sgf","sgl","application/vnd.stardivision.writer-global","sh","text/x-sh","shar","application/x-shar","shtml","text/html","sid","audio/prs.sid","sik","application/x-trash","silo","model/mesh","sis","application/vnd.symbian.install","sit","application/x-stuffit","skd","application/x-koan","skm","application/x-koan","skp","application/x-koan","skt","application/x-koan","smf","application/vnd.stardivision.math","smi","application/smil","smil","application/smil","snd","audio/basic","spc","chemical/x-galactic-spc","spl","application/x-futuresplash","src","application/x-wais-source","stc","application/vnd.sun.xml.calc.template","std","application/vnd.sun.xml.draw.template","sti","application/vnd.sun.xml.impress.template","stl","application/vnd.ms-pki.stl","stw","application/vnd.sun.xml.writer.template","sty","text/x-tex","sv4cpio","application/x-sv4cpio","sv4crc","application/x-sv4crc","svg","image/svg+xml","svgz","image/svg+xml","sw","chemical/x-swissprot","swf","application/x-shockwave-flash","swfl","application/x-shockwave-flash","sxc","application/vnd.sun.xml.calc","sxd","application/vnd.sun.xml.draw","sxg","application/vnd.sun.xml.writer.global","sxi","application/vnd.sun.xml.impress","sxm","application/vnd.sun.xml.math","sxw","application/vnd.sun.xml.writer","t","application/x-troff","tar","application/x-tar","taz","application/x-gtar","tcl","text/x-tcl","tex","text/x-tex","texi","application/x-texinfo","texinfo","application/x-texinfo","text","text/plain","tgf","chemical/x-mdl-tgf","tgz","application/x-gtar","tif","image/tiff","tiff","image/tiff","tk","text/x-tcl","tm","text/texmacs","torrent","application/x-bittorrent","tr","application/x-troff","ts","text/texmacs","tsp","application/dsptype","tsv","text/tab-separated-values","txt","text/plain","udeb","application/x-debian-package","uls","text/iuls","ustar","application/x-ustar","val","chemical/x-ncbi-asn1-binary","vcd","application/x-cdlink","vcf","text/x-vcard","vcs","text/x-vcalendar","vmd","chemical/x-vmd","vms","chemical/x-vamas-iso14976","vor","application/vnd.stardivision.writer","vrm","x-world/x-vrml","vrml","x-world/x-vrml","vsd","application/vnd.visio","wad","application/x-doom","wav","audio/x-wav","wax","audio/x-ms-wax","wbmp","image/vnd.wap.wbmp","wbxml","application/vnd.wap.wbxml","wk","application/x-123","wm","video/x-ms-wm","wma","audio/x-ms-wma","wmd","application/x-ms-wmd","wml","text/vnd.wap.wml","wmlc","application/vnd.wap.wmlc","wmls","text/vnd.wap.wmlscript","wmlsc","application/vnd.wap.wmlscriptc","wmv","video/x-ms-wmv","wmx","video/x-ms-wmx","wmz","application/x-ms-wmz","wp5","application/wordperfect5.1","wpd","application/wordperfect","wrl","x-world/x-vrml","wsc","text/scriptlet","wvx","video/x-ms-wvx","wz","application/x-wingz","xbm","image/x-xbitmap","xcf","application/x-xcf","xht","application/xhtml+xml","xhtml","application/xhtml+xml","xlb","application/vnd.ms-excel","xls","application/vnd.ms-excel","xlt","application/vnd.ms-excel","xml","application/xml","xpi","application/x-xpinstall","xpm","image/x-xpixmap","xsl","application/xml","xtel","chemical/x-xtel","xul","application/vnd.mozilla.xul+xml","xwd","image/x-xwindowdump","xyz","chemical/x-xyz","zip","application/zip","zmt","chemical/x-mopac-input","~","application/x-trash"]);
  78685. return $1;
  78686. },
  78687. //>>excludeStart("ide", pragmas.excludeIdeData);
  78688. args: [],
  78689. source: "defaultMimeTypes\x0a\x09^ #{\x0a\x09\x09'%' -> 'application/x-trash'.\x0a\x09\x09'323' -> 'text/h323'.\x0a\x09\x09'abw' -> 'application/x-abiword'.\x0a\x09\x09'ai' -> 'application/postscript'.\x0a\x09\x09'aif' -> 'audio/x-aiff'.\x0a\x09\x09'aifc' -> 'audio/x-aiff'.\x0a\x09\x09'aiff' -> 'audio/x-aiff'.\x0a\x09\x09'alc' -> 'chemical/x-alchemy'.\x0a\x09\x09'art' -> 'image/x-jg'.\x0a\x09\x09'asc' -> 'text/plain'.\x0a\x09\x09'asf' -> 'video/x-ms-asf'.\x0a\x09\x09'asn' -> 'chemical/x-ncbi-asn1-spec'.\x0a\x09\x09'aso' -> 'chemical/x-ncbi-asn1-binary'.\x0a\x09\x09'asx' -> 'video/x-ms-asf'.\x0a\x09\x09'au' -> 'audio/basic'.\x0a\x09\x09'avi' -> 'video/x-msvideo'.\x0a\x09\x09'b' -> 'chemical/x-molconn-Z'.\x0a\x09\x09'bak' -> 'application/x-trash'.\x0a\x09\x09'bat' -> 'application/x-msdos-program'.\x0a\x09\x09'bcpio' -> 'application/x-bcpio'.\x0a\x09\x09'bib' -> 'text/x-bibtex'.\x0a\x09\x09'bin' -> 'application/octet-stream'.\x0a\x09\x09'bmp' -> 'image/x-ms-bmp'.\x0a\x09\x09'book' -> 'application/x-maker'.\x0a\x09\x09'bsd' -> 'chemical/x-crossfire'.\x0a\x09\x09'c' -> 'text/x-csrc'.\x0a\x09\x09'c++' -> 'text/x-c++src'.\x0a\x09\x09'c3d' -> 'chemical/x-chem3d'.\x0a\x09\x09'cac' -> 'chemical/x-cache'.\x0a\x09\x09'cache' -> 'chemical/x-cache'.\x0a\x09\x09'cascii' -> 'chemical/x-cactvs-binary'.\x0a\x09\x09'cat' -> 'application/vnd.ms-pki.seccat'.\x0a\x09\x09'cbin' -> 'chemical/x-cactvs-binary'.\x0a\x09\x09'cc' -> 'text/x-c++src'.\x0a\x09\x09'cdf' -> 'application/x-cdf'.\x0a\x09\x09'cdr' -> 'image/x-coreldraw'.\x0a\x09\x09'cdt' -> 'image/x-coreldrawtemplate'.\x0a\x09\x09'cdx' -> 'chemical/x-cdx'.\x0a\x09\x09'cdy' -> 'application/vnd.cinderella'.\x0a\x09\x09'cef' -> 'chemical/x-cxf'.\x0a\x09\x09'cer' -> 'chemical/x-cerius'.\x0a\x09\x09'chm' -> 'chemical/x-chemdraw'.\x0a\x09\x09'chrt' -> 'application/x-kchart'.\x0a\x09\x09'cif' -> 'chemical/x-cif'.\x0a\x09\x09'class' -> 'application/java-vm'.\x0a\x09\x09'cls' -> 'text/x-tex'.\x0a\x09\x09'cmdf' -> 'chemical/x-cmdf'.\x0a\x09\x09'cml' -> 'chemical/x-cml'.\x0a\x09\x09'cod' -> 'application/vnd.rim.cod'.\x0a\x09\x09'com' -> 'application/x-msdos-program'.\x0a\x09\x09'cpa' -> 'chemical/x-compass'.\x0a\x09\x09'cpio' -> 'application/x-cpio'.\x0a\x09\x09'cpp' -> 'text/x-c++src'.\x0a\x09\x09'cpt' -> 'image/x-corelphotopaint'.\x0a\x09\x09'crl' -> 'application/x-pkcs7-crl'.\x0a\x09\x09'crt' -> 'application/x-x509-ca-cert'.\x0a\x09\x09'csf' -> 'chemical/x-cache-csf'.\x0a\x09\x09'csh' -> 'text/x-csh'.\x0a\x09\x09'csm' -> 'chemical/x-csml'.\x0a\x09\x09'csml' -> 'chemical/x-csml'.\x0a\x09\x09'css' -> 'text/css'.\x0a\x09\x09'csv' -> 'text/comma-separated-values'.\x0a\x09\x09'ctab' -> 'chemical/x-cactvs-binary'.\x0a\x09\x09'ctx' -> 'chemical/x-ctx'.\x0a\x09\x09'cu' -> 'application/cu-seeme'.\x0a\x09\x09'cub' -> 'chemical/x-gaussian-cube'.\x0a\x09\x09'cxf' -> 'chemical/x-cxf'.\x0a\x09\x09'cxx' -> 'text/x-c++src'.\x0a\x09\x09'dat' -> 'chemical/x-mopac-input'.\x0a\x09\x09'dcr' -> 'application/x-director'.\x0a\x09\x09'deb' -> 'application/x-debian-package'.\x0a\x09\x09'dif' -> 'video/dv'.\x0a\x09\x09'diff' -> 'text/plain'.\x0a\x09\x09'dir' -> 'application/x-director'.\x0a\x09\x09'djv' -> 'image/vnd.djvu'.\x0a\x09\x09'djvu' -> 'image/vnd.djvu'.\x0a\x09\x09'dl' -> 'video/dl'.\x0a\x09\x09'dll' -> 'application/x-msdos-program'.\x0a\x09\x09'dmg' -> 'application/x-apple-diskimage'.\x0a\x09\x09'dms' -> 'application/x-dms'.\x0a\x09\x09'doc' -> 'application/msword'.\x0a\x09\x09'dot' -> 'application/msword'.\x0a\x09\x09'dv' -> 'video/dv'.\x0a\x09\x09'dvi' -> 'application/x-dvi'.\x0a\x09\x09'dx' -> 'chemical/x-jcamp-dx'.\x0a\x09\x09'dxr' -> 'application/x-director'.\x0a\x09\x09'emb' -> 'chemical/x-embl-dl-nucleotide'.\x0a\x09\x09'embl' -> 'chemical/x-embl-dl-nucleotide'.\x0a\x09\x09'ent' -> 'chemical/x-pdb'.\x0a\x09\x09'eps' -> 'application/postscript'.\x0a\x09\x09'etx' -> 'text/x-setext'.\x0a\x09\x09'exe' -> 'application/x-msdos-program'.\x0a\x09\x09'ez' -> 'application/andrew-inset'.\x0a\x09\x09'fb' -> 'application/x-maker'.\x0a\x09\x09'fbdoc' -> 'application/x-maker'.\x0a\x09\x09'fch' -> 'chemical/x-gaussian-checkpoint'.\x0a\x09\x09'fchk' -> 'chemical/x-gaussian-checkpoint'.\x0a\x09\x09'fig' -> 'application/x-xfig'.\x0a\x09\x09'flac' -> 'application/x-flac'.\x0a\x09\x09'fli' -> 'video/fli'.\x0a\x09\x09'fm' -> 'application/x-maker'.\x0a\x09\x09'frame' -> 'application/x-maker'.\x0a\x09\x09'frm' -> 'application/x-maker'.\x0a\x09\x09'gal' -> 'chemical/x-gaussian-log'.\x0a\x09\x09'gam' -> 'chemical/x-gamess-input'.\x0a\x09\x09'gamin' -> 'chemical/x-gamess-input'.\x0a\x09\x09'gau' -> 'chemical/x-gaussian-input'.\x0a\x09\x09'gcd' -> 'text/x-pcs-gcd'.\x0a\x09\x09'gcf' -> 'application/x-graphing-calculator'.\x0a\x09\x09'gcg' -> 'chemical/x-gcg8-sequence'.\x0a\x09\x09'gen' -> 'chemical/x-genbank'.\x0a\x09\x09'gf' -> 'application/x-tex-gf'.\x0a\x09\x09'gif' -> 'image/gif'.\x0a\x09\x09'gjc' -> 'chemical/x-gaussian-input'.\x0a\x09\x09'gjf' -> 'chemical/x-gaussian-input'.\x0a\x09\x09'gl' -> 'video/gl'.\x0a\x09\x09'gnumeric' -> 'application/x-gnumeric'.\x0a\x09\x09'gpt' -> 'chemical/x-mopac-graph'.\x0a\x09\x09'gsf' -> 'application/x-font'.\x0a\x09\x09'gsm' -> 'audio/x-gsm'.\x0a\x09\x09'gtar' -> 'application/x-gtar'.\x0a\x09\x09'h' -> 'text/x-chdr'.\x0a\x09\x09'h++' -> 'text/x-c++hdr'.\x0a\x09\x09'hdf' -> 'application/x-hdf'.\x0a\x09\x09'hh' -> 'text/x-c++hdr'.\x0a\x09\x09'hin' -> 'chemical/x-hin'.\x0a\x09\x09'hpp' -> 'text/x-c++hdr'.\x0a\x09\x09'hqx' -> 'application/mac-binhex40'.\x0a\x09\x09'hs' -> 'text/x-haskell'.\x0a\x09\x09'hta' -> 'application/hta'.\x0a\x09\x09'htc' -> 'text/x-component'.\x0a\x09\x09'htm' -> 'text/html'.\x0a\x09\x09'html' -> 'text/html'.\x0a\x09\x09'hxx' -> 'text/x-c++hdr'.\x0a\x09\x09'ica' -> 'application/x-ica'.\x0a\x09\x09'ice' -> 'x-conference/x-cooltalk'.\x0a\x09\x09'ico' -> 'image/x-icon'.\x0a\x09\x09'ics' -> 'text/calendar'.\x0a\x09\x09'icz' -> 'text/calendar'.\x0a\x09\x09'ief' -> 'image/ief'.\x0a\x09\x09'iges' -> 'model/iges'.\x0a\x09\x09'igs' -> 'model/iges'.\x0a\x09\x09'iii' -> 'application/x-iphone'.\x0a\x09\x09'inp' -> 'chemical/x-gamess-input'.\x0a\x09\x09'ins' -> 'application/x-internet-signup'.\x0a\x09\x09'iso' -> 'application/x-iso9660-image'.\x0a\x09\x09'isp' -> 'application/x-internet-signup'.\x0a\x09\x09'ist' -> 'chemical/x-isostar'.\x0a\x09\x09'istr' -> 'chemical/x-isostar'.\x0a\x09\x09'jad' -> 'text/vnd.sun.j2me.app-descriptor'.\x0a\x09\x09'jar' -> 'application/java-archive'.\x0a\x09\x09'java' -> 'text/x-java'.\x0a\x09\x09'jdx' -> 'chemical/x-jcamp-dx'.\x0a\x09\x09'jmz' -> 'application/x-jmol'.\x0a\x09\x09'jng' -> 'image/x-jng'.\x0a\x09\x09'jnlp' -> 'application/x-java-jnlp-file'.\x0a\x09\x09'jpe' -> 'image/jpeg'.\x0a\x09\x09'jpeg' -> 'image/jpeg'.\x0a\x09\x09'jpg' -> 'image/jpeg'.\x0a\x09\x09'js' -> 'application/javascript'.\x0a\x09\x09'kar' -> 'audio/midi'.\x0a\x09\x09'key' -> 'application/pgp-keys'.\x0a\x09\x09'kil' -> 'application/x-killustrator'.\x0a\x09\x09'kin' -> 'chemical/x-kinemage'.\x0a\x09\x09'kpr' -> 'application/x-kpresenter'.\x0a\x09\x09'kpt' -> 'application/x-kpresenter'.\x0a\x09\x09'ksp' -> 'application/x-kspread'.\x0a\x09\x09'kwd' -> 'application/x-kword'.\x0a\x09\x09'kwt' -> 'application/x-kword'.\x0a\x09\x09'latex' -> 'application/x-latex'.\x0a\x09\x09'lha' -> 'application/x-lha'.\x0a\x09\x09'lhs' -> 'text/x-literate-haskell'.\x0a\x09\x09'lsf' -> 'video/x-la-asf'.\x0a\x09\x09'lsx' -> 'video/x-la-asf'.\x0a\x09\x09'ltx' -> 'text/x-tex'.\x0a\x09\x09'lzh' -> 'application/x-lzh'.\x0a\x09\x09'lzx' -> 'application/x-lzx'.\x0a\x09\x09'm3u' -> 'audio/x-mpegurl'.\x0a\x09\x09'm4a' -> 'audio/mpeg'.\x0a\x09\x09'maker' -> 'application/x-maker'.\x0a\x09\x09'man' -> 'application/x-troff-man'.\x0a\x09\x09'mcif' -> 'chemical/x-mmcif'.\x0a\x09\x09'mcm' -> 'chemical/x-macmolecule'.\x0a\x09\x09'mdb' -> 'application/msaccess'.\x0a\x09\x09'me' -> 'application/x-troff-me'.\x0a\x09\x09'mesh' -> 'model/mesh'.\x0a\x09\x09'mid' -> 'audio/midi'.\x0a\x09\x09'midi' -> 'audio/midi'.\x0a\x09\x09'mif' -> 'application/x-mif'.\x0a\x09\x09'mm' -> 'application/x-freemind'.\x0a\x09\x09'mmd' -> 'chemical/x-macromodel-input'.\x0a\x09\x09'mmf' -> 'application/vnd.smaf'.\x0a\x09\x09'mml' -> 'text/mathml'.\x0a\x09\x09'mmod' -> 'chemical/x-macromodel-input'.\x0a\x09\x09'mng' -> 'video/x-mng'.\x0a\x09\x09'moc' -> 'text/x-moc'.\x0a\x09\x09'mol' -> 'chemical/x-mdl-molfile'.\x0a\x09\x09'mol2' -> 'chemical/x-mol2'.\x0a\x09\x09'moo' -> 'chemical/x-mopac-out'.\x0a\x09\x09'mop' -> 'chemical/x-mopac-input'.\x0a\x09\x09'mopcrt' -> 'chemical/x-mopac-input'.\x0a\x09\x09'mov' -> 'video/quicktime'.\x0a\x09\x09'movie' -> 'video/x-sgi-movie'.\x0a\x09\x09'mp2' -> 'audio/mpeg'.\x0a\x09\x09'mp3' -> 'audio/mpeg'.\x0a\x09\x09'mp4' -> 'video/mp4'.\x0a\x09\x09'mpc' -> 'chemical/x-mopac-input'.\x0a\x09\x09'mpe' -> 'video/mpeg'.\x0a\x09\x09'mpeg' -> 'video/mpeg'.\x0a\x09\x09'mpega' -> 'audio/mpeg'.\x0a\x09\x09'mpg' -> 'video/mpeg'.\x0a\x09\x09'mpga' -> 'audio/mpeg'.\x0a\x09\x09'ms' -> 'application/x-troff-ms'.\x0a\x09\x09'msh' -> 'model/mesh'.\x0a\x09\x09'msi' -> 'application/x-msi'.\x0a\x09\x09'mvb' -> 'chemical/x-mopac-vib'.\x0a\x09\x09'mxu' -> 'video/vnd.mpegurl'.\x0a\x09\x09'nb' -> 'application/mathematica'.\x0a\x09\x09'nc' -> 'application/x-netcdf'.\x0a\x09\x09'nwc' -> 'application/x-nwc'.\x0a\x09\x09'o' -> 'application/x-object'.\x0a\x09\x09'oda' -> 'application/oda'.\x0a\x09\x09'odb' -> 'application/vnd.oasis.opendocument.database'.\x0a\x09\x09'odc' -> 'application/vnd.oasis.opendocument.chart'.\x0a\x09\x09'odf' -> 'application/vnd.oasis.opendocument.formula'.\x0a\x09\x09'odg' -> 'application/vnd.oasis.opendocument.graphics'.\x0a\x09\x09'odi' -> 'application/vnd.oasis.opendocument.image'.\x0a\x09\x09'odm' -> 'application/vnd.oasis.opendocument.text-master'.\x0a\x09\x09'odp' -> 'application/vnd.oasis.opendocument.presentation'.\x0a\x09\x09'ods' -> 'application/vnd.oasis.opendocument.spreadsheet'.\x0a\x09\x09'odt' -> 'application/vnd.oasis.opendocument.text'.\x0a\x09\x09'ogg' -> 'application/ogg'.\x0a\x09\x09'old' -> 'application/x-trash'.\x0a\x09\x09'oth' -> 'application/vnd.oasis.opendocument.text-web'.\x0a\x09\x09'oza' -> 'application/x-oz-application'.\x0a\x09\x09'p' -> 'text/x-pascal'.\x0a\x09\x09'p7r' -> 'application/x-pkcs7-certreqresp'.\x0a\x09\x09'pac' -> 'application/x-ns-proxy-autoconfig'.\x0a\x09\x09'pas' -> 'text/x-pascal'.\x0a\x09\x09'pat' -> 'image/x-coreldrawpattern'.\x0a\x09\x09'pbm' -> 'image/x-portable-bitmap'.\x0a\x09\x09'pcf' -> 'application/x-font'.\x0a\x09\x09'pcf.Z' -> 'application/x-font'.\x0a\x09\x09'pcx' -> 'image/pcx'.\x0a\x09\x09'pdb' -> 'chemical/x-pdb'.\x0a\x09\x09'pdf' -> 'application/pdf'.\x0a\x09\x09'pfa' -> 'application/x-font'.\x0a\x09\x09'pfb' -> 'application/x-font'.\x0a\x09\x09'pgm' -> 'image/x-portable-graymap'.\x0a\x09\x09'pgn' -> 'application/x-chess-pgn'.\x0a\x09\x09'pgp' -> 'application/pgp-signature'.\x0a\x09\x09'pk' -> 'application/x-tex-pk'.\x0a\x09\x09'pl' -> 'text/x-perl'.\x0a\x09\x09'pls' -> 'audio/x-scpls'.\x0a\x09\x09'pm' -> 'text/x-perl'.\x0a\x09\x09'png' -> 'image/png'.\x0a\x09\x09'pnm' -> 'image/x-portable-anymap'.\x0a\x09\x09'pot' -> 'text/plain'.\x0a\x09\x09'ppm' -> 'image/x-portable-pixmap'.\x0a\x09\x09'pps' -> 'application/vnd.ms-powerpoint'.\x0a\x09\x09'ppt' -> 'application/vnd.ms-powerpoint'.\x0a\x09\x09'prf' -> 'application/pics-rules'.\x0a\x09\x09'prt' -> 'chemical/x-ncbi-asn1-ascii'.\x0a\x09\x09'ps' -> 'application/postscript'.\x0a\x09\x09'psd' -> 'image/x-photoshop'.\x0a\x09\x09'psp' -> 'text/x-psp'.\x0a\x09\x09'py' -> 'text/x-python'.\x0a\x09\x09'pyc' -> 'application/x-python-code'.\x0a\x09\x09'pyo' -> 'application/x-python-code'.\x0a\x09\x09'qt' -> 'video/quicktime'.\x0a\x09\x09'qtl' -> 'application/x-quicktimeplayer'.\x0a\x09\x09'ra' -> 'audio/x-realaudio'.\x0a\x09\x09'ram' -> 'audio/x-pn-realaudio'.\x0a\x09\x09'rar' -> 'application/rar'.\x0a\x09\x09'ras' -> 'image/x-cmu-raster'.\x0a\x09\x09'rd' -> 'chemical/x-mdl-rdfile'.\x0a\x09\x09'rdf' -> 'application/rdf+xml'.\x0a\x09\x09'rgb' -> 'image/x-rgb'.\x0a\x09\x09'rm' -> 'audio/x-pn-realaudio'.\x0a\x09\x09'roff' -> 'application/x-troff'.\x0a\x09\x09'ros' -> 'chemical/x-rosdal'.\x0a\x09\x09'rpm' -> 'application/x-redhat-package-manager'.\x0a\x09\x09'rss' -> 'application/rss+xml'.\x0a\x09\x09'rtf' -> 'text/rtf'.\x0a\x09\x09'rtx' -> 'text/richtext'.\x0a\x09\x09'rxn' -> 'chemical/x-mdl-rxnfile'.\x0a\x09\x09'sct' -> 'text/scriptlet'.\x0a\x09\x09'sd' -> 'chemical/x-mdl-sdfile'.\x0a\x09\x09'sd2' -> 'audio/x-sd2'.\x0a\x09\x09'sda' -> 'application/vnd.stardivision.draw'.\x0a\x09\x09'sdc' -> 'application/vnd.stardivision.calc'.\x0a\x09\x09'sdd' -> 'application/vnd.stardivision.impress'.\x0a\x09\x09'sdf' -> 'chemical/x-mdl-sdfile'.\x0a\x09\x09'sdp' -> 'application/vnd.stardivision.impress'.\x0a\x09\x09'sdw' -> 'application/vnd.stardivision.writer'.\x0a\x09\x09'ser' -> 'application/java-serialized-object'.\x0a\x09\x09'sgf' -> 'application/x-go-sgf'.\x0a\x09\x09'sgl' -> 'application/vnd.stardivision.writer-global'.\x0a\x09\x09'sh' -> 'text/x-sh'.\x0a\x09\x09'shar' -> 'application/x-shar'.\x0a\x09\x09'shtml' -> 'text/html'.\x0a\x09\x09'sid' -> 'audio/prs.sid'.\x0a\x09\x09'sik' -> 'application/x-trash'.\x0a\x09\x09'silo' -> 'model/mesh'.\x0a\x09\x09'sis' -> 'application/vnd.symbian.install'.\x0a\x09\x09'sit' -> 'application/x-stuffit'.\x0a\x09\x09'skd' -> 'application/x-koan'.\x0a\x09\x09'skm' -> 'application/x-koan'.\x0a\x09\x09'skp' -> 'application/x-koan'.\x0a\x09\x09'skt' -> 'application/x-koan'.\x0a\x09\x09'smf' -> 'application/vnd.stardivision.math'.\x0a\x09\x09'smi' -> 'application/smil'.\x0a\x09\x09'smil' -> 'application/smil'.\x0a\x09\x09'snd' -> 'audio/basic'.\x0a\x09\x09'spc' -> 'chemical/x-galactic-spc'.\x0a\x09\x09'spl' -> 'application/x-futuresplash'.\x0a\x09\x09'src' -> 'application/x-wais-source'.\x0a\x09\x09'stc' -> 'application/vnd.sun.xml.calc.template'.\x0a\x09\x09'std' -> 'application/vnd.sun.xml.draw.template'.\x0a\x09\x09'sti' -> 'application/vnd.sun.xml.impress.template'.\x0a\x09\x09'stl' -> 'application/vnd.ms-pki.stl'.\x0a\x09\x09'stw' -> 'application/vnd.sun.xml.writer.template'.\x0a\x09\x09'sty' -> 'text/x-tex'.\x0a\x09\x09'sv4cpio' -> 'application/x-sv4cpio'.\x0a\x09\x09'sv4crc' -> 'application/x-sv4crc'.\x0a\x09\x09'svg' -> 'image/svg+xml'.\x0a\x09\x09'svgz' -> 'image/svg+xml'.\x0a\x09\x09'sw' -> 'chemical/x-swissprot'.\x0a\x09\x09'swf' -> 'application/x-shockwave-flash'.\x0a\x09\x09'swfl' -> 'application/x-shockwave-flash'.\x0a\x09\x09'sxc' -> 'application/vnd.sun.xml.calc'.\x0a\x09\x09'sxd' -> 'application/vnd.sun.xml.draw'.\x0a\x09\x09'sxg' -> 'application/vnd.sun.xml.writer.global'.\x0a\x09\x09'sxi' -> 'application/vnd.sun.xml.impress'.\x0a\x09\x09'sxm' -> 'application/vnd.sun.xml.math'.\x0a\x09\x09'sxw' -> 'application/vnd.sun.xml.writer'.\x0a\x09\x09't' -> 'application/x-troff'.\x0a\x09\x09'tar' -> 'application/x-tar'.\x0a\x09\x09'taz' -> 'application/x-gtar'.\x0a\x09\x09'tcl' -> 'text/x-tcl'.\x0a\x09\x09'tex' -> 'text/x-tex'.\x0a\x09\x09'texi' -> 'application/x-texinfo'.\x0a\x09\x09'texinfo' -> 'application/x-texinfo'.\x0a\x09\x09'text' -> 'text/plain'.\x0a\x09\x09'tgf' -> 'chemical/x-mdl-tgf'.\x0a\x09\x09'tgz' -> 'application/x-gtar'.\x0a\x09\x09'tif' -> 'image/tiff'.\x0a\x09\x09'tiff' -> 'image/tiff'.\x0a\x09\x09'tk' -> 'text/x-tcl'.\x0a\x09\x09'tm' -> 'text/texmacs'.\x0a\x09\x09'torrent' -> 'application/x-bittorrent'.\x0a\x09\x09'tr' -> 'application/x-troff'.\x0a\x09\x09'ts' -> 'text/texmacs'.\x0a\x09\x09'tsp' -> 'application/dsptype'.\x0a\x09\x09'tsv' -> 'text/tab-separated-values'.\x0a\x09\x09'txt' -> 'text/plain'.\x0a\x09\x09'udeb' -> 'application/x-debian-package'.\x0a\x09\x09'uls' -> 'text/iuls'.\x0a\x09\x09'ustar' -> 'application/x-ustar'.\x0a\x09\x09'val' -> 'chemical/x-ncbi-asn1-binary'.\x0a\x09\x09'vcd' -> 'application/x-cdlink'.\x0a\x09\x09'vcf' -> 'text/x-vcard'.\x0a\x09\x09'vcs' -> 'text/x-vcalendar'.\x0a\x09\x09'vmd' -> 'chemical/x-vmd'.\x0a\x09\x09'vms' -> 'chemical/x-vamas-iso14976'.\x0a\x09\x09'vor' -> 'application/vnd.stardivision.writer'.\x0a\x09\x09'vrm' -> 'x-world/x-vrml'.\x0a\x09\x09'vrml' -> 'x-world/x-vrml'.\x0a\x09\x09'vsd' -> 'application/vnd.visio'.\x0a\x09\x09'wad' -> 'application/x-doom'.\x0a\x09\x09'wav' -> 'audio/x-wav'.\x0a\x09\x09'wax' -> 'audio/x-ms-wax'.\x0a\x09\x09'wbmp' -> 'image/vnd.wap.wbmp'.\x0a\x09\x09'wbxml' -> 'application/vnd.wap.wbxml'.\x0a\x09\x09'wk' -> 'application/x-123'.\x0a\x09\x09'wm' -> 'video/x-ms-wm'.\x0a\x09\x09'wma' -> 'audio/x-ms-wma'.\x0a\x09\x09'wmd' -> 'application/x-ms-wmd'.\x0a\x09\x09'wml' -> 'text/vnd.wap.wml'.\x0a\x09\x09'wmlc' -> 'application/vnd.wap.wmlc'.\x0a\x09\x09'wmls' -> 'text/vnd.wap.wmlscript'.\x0a\x09\x09'wmlsc' -> 'application/vnd.wap.wmlscriptc'.\x0a\x09\x09'wmv' -> 'video/x-ms-wmv'.\x0a\x09\x09'wmx' -> 'video/x-ms-wmx'.\x0a\x09\x09'wmz' -> 'application/x-ms-wmz'.\x0a\x09\x09'wp5' -> 'application/wordperfect5.1'.\x0a\x09\x09'wpd' -> 'application/wordperfect'.\x0a\x09\x09'wrl' -> 'x-world/x-vrml'.\x0a\x09\x09'wsc' -> 'text/scriptlet'.\x0a\x09\x09'wvx' -> 'video/x-ms-wvx'.\x0a\x09\x09'wz' -> 'application/x-wingz'.\x0a\x09\x09'xbm' -> 'image/x-xbitmap'.\x0a\x09\x09'xcf' -> 'application/x-xcf'.\x0a\x09\x09'xht' -> 'application/xhtml+xml'.\x0a\x09\x09'xhtml' -> 'application/xhtml+xml'.\x0a\x09\x09'xlb' -> 'application/vnd.ms-excel'.\x0a\x09\x09'xls' -> 'application/vnd.ms-excel'.\x0a\x09\x09'xlt' -> 'application/vnd.ms-excel'.\x0a\x09\x09'xml' -> 'application/xml'.\x0a\x09\x09'xpi' -> 'application/x-xpinstall'.\x0a\x09\x09'xpm' -> 'image/x-xpixmap'.\x0a\x09\x09'xsl' -> 'application/xml'.\x0a\x09\x09'xtel' -> 'chemical/x-xtel'.\x0a\x09\x09'xul' -> 'application/vnd.mozilla.xul+xml'.\x0a\x09\x09'xwd' -> 'image/x-xwindowdump'.\x0a\x09\x09'xyz' -> 'chemical/x-xyz'.\x0a\x09\x09'zip' -> 'application/zip'.\x0a\x09\x09'zmt' -> 'chemical/x-mopac-input'.\x0a\x09\x09'~' -> 'application/x-trash'\x0a\x09}",
  78690. referencedClasses: [],
  78691. //>>excludeEnd("ide");
  78692. messageSends: []
  78693. }),
  78694. $globals.FileServer.klass);
  78695. $core.addMethod(
  78696. $core.method({
  78697. selector: "defaultPort",
  78698. protocol: 'accessing',
  78699. fn: function (){
  78700. var self=this;
  78701. return (4000);
  78702. },
  78703. //>>excludeStart("ide", pragmas.excludeIdeData);
  78704. args: [],
  78705. source: "defaultPort\x0a\x09^ 4000",
  78706. referencedClasses: [],
  78707. //>>excludeEnd("ide");
  78708. messageSends: []
  78709. }),
  78710. $globals.FileServer.klass);
  78711. $core.addMethod(
  78712. $core.method({
  78713. selector: "main",
  78714. protocol: 'initialization',
  78715. fn: function (){
  78716. var self=this;
  78717. var fileServer,args;
  78718. function $FileServer(){return $globals.FileServer||(typeof FileServer=="undefined"?nil:FileServer)}
  78719. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78720. return $core.withContext(function($ctx1) {
  78721. //>>excludeEnd("ctx");
  78722. var $1,$2;
  78723. var $early={};
  78724. try {
  78725. args=$recv(process)._argv();
  78726. $recv(args)._removeFrom_to_((1),(3));
  78727. $recv(args)._detect_ifNone_((function(each){
  78728. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78729. return $core.withContext(function($ctx2) {
  78730. //>>excludeEnd("ctx");
  78731. $1=$recv(each).__eq("--help");
  78732. if($core.assert($1)){
  78733. return $recv($FileServer())._printHelp();
  78734. };
  78735. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78736. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78737. //>>excludeEnd("ctx");
  78738. }),(function(){
  78739. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78740. return $core.withContext(function($ctx2) {
  78741. //>>excludeEnd("ctx");
  78742. fileServer=$recv($FileServer())._createServerWithArguments_(args);
  78743. fileServer;
  78744. $2=$recv(fileServer)._start();
  78745. throw $early=[$2];
  78746. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78747. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,3)});
  78748. //>>excludeEnd("ctx");
  78749. }));
  78750. return self;
  78751. }
  78752. catch(e) {if(e===$early)return e[0]; throw e}
  78753. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78754. }, function($ctx1) {$ctx1.fill(self,"main",{fileServer:fileServer,args:args},$globals.FileServer.klass)});
  78755. //>>excludeEnd("ctx");
  78756. },
  78757. //>>excludeStart("ide", pragmas.excludeIdeData);
  78758. args: [],
  78759. source: "main\x0a\x09\x22Main entry point for Amber applications.\x0a\x09 Creates and starts a FileServer instance.\x22\x0a\x09| fileServer args |\x0a\x09args := process argv.\x0a\x09\x22Remove the first args which contain the path to the node executable and the script file.\x22\x0a\x09args removeFrom: 1 to: 3.\x0a\x0a\x09args detect: [ :each |\x0a\x09\x09(each = '--help') ifTrue: [FileServer printHelp]]\x0a\x09ifNone: [\x0a\x09\x09fileServer := FileServer createServerWithArguments: args.\x0a\x09\x09^ fileServer start]",
  78760. referencedClasses: ["FileServer"],
  78761. //>>excludeEnd("ide");
  78762. messageSends: ["argv", "removeFrom:to:", "detect:ifNone:", "ifTrue:", "=", "printHelp", "createServerWithArguments:", "start"]
  78763. }),
  78764. $globals.FileServer.klass);
  78765. $core.addMethod(
  78766. $core.method({
  78767. selector: "mimeTypeFor:",
  78768. protocol: 'accessing',
  78769. fn: function (aString){
  78770. var self=this;
  78771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78772. return $core.withContext(function($ctx1) {
  78773. //>>excludeEnd("ctx");
  78774. var $1;
  78775. $1=$recv(self._mimeTypes())._at_ifAbsent_($recv(aString)._replace_with_(".*[\x5c.]",""),(function(){
  78776. return "text/plain";
  78777. }));
  78778. return $1;
  78779. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78780. }, function($ctx1) {$ctx1.fill(self,"mimeTypeFor:",{aString:aString},$globals.FileServer.klass)});
  78781. //>>excludeEnd("ctx");
  78782. },
  78783. //>>excludeStart("ide", pragmas.excludeIdeData);
  78784. args: ["aString"],
  78785. source: "mimeTypeFor: aString\x0a\x09^ self mimeTypes at: (aString replace: '.*[\x5c.]' with: '') ifAbsent: ['text/plain']",
  78786. referencedClasses: [],
  78787. //>>excludeEnd("ide");
  78788. messageSends: ["at:ifAbsent:", "mimeTypes", "replace:with:"]
  78789. }),
  78790. $globals.FileServer.klass);
  78791. $core.addMethod(
  78792. $core.method({
  78793. selector: "mimeTypes",
  78794. protocol: 'accessing',
  78795. fn: function (){
  78796. var self=this;
  78797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78798. return $core.withContext(function($ctx1) {
  78799. //>>excludeEnd("ctx");
  78800. var $2,$1,$receiver;
  78801. $2=self["@mimeTypes"];
  78802. if(($receiver = $2) == null || $receiver.isNil){
  78803. self["@mimeTypes"]=self._defaultMimeTypes();
  78804. $1=self["@mimeTypes"];
  78805. } else {
  78806. $1=$2;
  78807. };
  78808. return $1;
  78809. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78810. }, function($ctx1) {$ctx1.fill(self,"mimeTypes",{},$globals.FileServer.klass)});
  78811. //>>excludeEnd("ctx");
  78812. },
  78813. //>>excludeStart("ide", pragmas.excludeIdeData);
  78814. args: [],
  78815. source: "mimeTypes\x0a\x09^ mimeTypes ifNil: [mimeTypes := self defaultMimeTypes]",
  78816. referencedClasses: [],
  78817. //>>excludeEnd("ide");
  78818. messageSends: ["ifNil:", "defaultMimeTypes"]
  78819. }),
  78820. $globals.FileServer.klass);
  78821. $core.addMethod(
  78822. $core.method({
  78823. selector: "printHelp",
  78824. protocol: 'accessing',
  78825. fn: function (){
  78826. var self=this;
  78827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78828. return $core.withContext(function($ctx1) {
  78829. //>>excludeEnd("ctx");
  78830. $recv(console)._log_("Available commandline options are:");
  78831. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78832. $ctx1.sendIdx["log:"]=1;
  78833. //>>excludeEnd("ctx");
  78834. $recv(console)._log_("--help");
  78835. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78836. $ctx1.sendIdx["log:"]=2;
  78837. //>>excludeEnd("ctx");
  78838. $recv(self._commandLineSwitches())._do_((function(each){
  78839. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78840. return $core.withContext(function($ctx2) {
  78841. //>>excludeEnd("ctx");
  78842. return $recv(console)._log_($recv(each).__comma(" <parameter>"));
  78843. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78844. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78845. //>>excludeEnd("ctx");
  78846. }));
  78847. return self;
  78848. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78849. }, function($ctx1) {$ctx1.fill(self,"printHelp",{},$globals.FileServer.klass)});
  78850. //>>excludeEnd("ctx");
  78851. },
  78852. //>>excludeStart("ide", pragmas.excludeIdeData);
  78853. args: [],
  78854. source: "printHelp\x0a\x09console log: 'Available commandline options are:'.\x0a\x09console log: '--help'.\x0a\x09self commandLineSwitches do: [ :each |\x0a\x09\x09console log: each, ' <parameter>']",
  78855. referencedClasses: [],
  78856. //>>excludeEnd("ide");
  78857. messageSends: ["log:", "do:", "commandLineSwitches", ","]
  78858. }),
  78859. $globals.FileServer.klass);
  78860. $core.addMethod(
  78861. $core.method({
  78862. selector: "selectorForCommandLineSwitch:",
  78863. protocol: 'accessing',
  78864. fn: function (aSwitch){
  78865. var self=this;
  78866. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78867. return $core.withContext(function($ctx1) {
  78868. //>>excludeEnd("ctx");
  78869. var $2,$1;
  78870. $2=$recv($recv(aSwitch)._replace_with_("^--",""))._replace_with_("-[a-z]",(function(each){
  78871. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78872. return $core.withContext(function($ctx2) {
  78873. //>>excludeEnd("ctx");
  78874. return $recv($recv(each)._second())._asUppercase();
  78875. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78876. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  78877. //>>excludeEnd("ctx");
  78878. }));
  78879. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78880. $ctx1.sendIdx["replace:with:"]=1;
  78881. //>>excludeEnd("ctx");
  78882. $1=$recv($2).__comma(":");
  78883. return $1;
  78884. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78885. }, function($ctx1) {$ctx1.fill(self,"selectorForCommandLineSwitch:",{aSwitch:aSwitch},$globals.FileServer.klass)});
  78886. //>>excludeEnd("ctx");
  78887. },
  78888. //>>excludeStart("ide", pragmas.excludeIdeData);
  78889. args: ["aSwitch"],
  78890. source: "selectorForCommandLineSwitch: aSwitch\x0a\x09\x22Remove the trailing '--', add ':' at the end\x0a\x09 and replace all occurences of a lowercase letter preceded by a '-' with\x0a\x09 the Uppercase letter.\x0a\x09 Example: --fallback-page becomes fallbackPage:\x22\x0a\x09^ ((aSwitch replace: '^--' with: '')\x0a\x09\x09replace: '-[a-z]' with: [ :each | each second asUppercase ]), ':'",
  78891. referencedClasses: [],
  78892. //>>excludeEnd("ide");
  78893. messageSends: [",", "replace:with:", "asUppercase", "second"]
  78894. }),
  78895. $globals.FileServer.klass);
  78896. $core.addClass('Initer', $globals.BaseFileManipulator, ['childProcess', 'nmPath'], 'AmberCli');
  78897. $core.addMethod(
  78898. $core.method({
  78899. selector: "bowerInstallThenDo:",
  78900. protocol: 'action',
  78901. fn: function (aBlock){
  78902. var self=this;
  78903. var child;
  78904. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78905. return $core.withContext(function($ctx1) {
  78906. //>>excludeEnd("ctx");
  78907. var $1,$4,$3,$2;
  78908. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("bower","bower"),["install"]);
  78909. $1=child;
  78910. $recv($1)._on_do_("error",aBlock);
  78911. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78912. $ctx1.sendIdx["on:do:"]=1;
  78913. //>>excludeEnd("ctx");
  78914. $2=$recv($1)._on_do_("close",(function(code){
  78915. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78916. return $core.withContext(function($ctx2) {
  78917. //>>excludeEnd("ctx");
  78918. $4=$recv(code).__eq((0));
  78919. if($core.assert($4)){
  78920. $3=nil;
  78921. } else {
  78922. $3=code;
  78923. };
  78924. return $recv(aBlock)._value_($3);
  78925. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78926. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  78927. //>>excludeEnd("ctx");
  78928. }));
  78929. return self;
  78930. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78931. }, function($ctx1) {$ctx1.fill(self,"bowerInstallThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  78932. //>>excludeEnd("ctx");
  78933. },
  78934. //>>excludeStart("ide", pragmas.excludeIdeData);
  78935. args: ["aBlock"],
  78936. source: "bowerInstallThenDo: aBlock\x0a\x09| child |\x0a\x09child := childProcess\x0a\x09\x09fork: (self npmScriptForModule: 'bower' named: 'bower')\x0a\x09\x09args: #('install').\x0a\x09child\x0a\x09\x09on: 'error' do: aBlock;\x0a\x09\x09on: 'close' do: [ :code |\x0a\x09\x09\x09aBlock value: (code = 0 ifTrue: [ nil ] ifFalse: [ code ]) ]",
  78937. referencedClasses: [],
  78938. //>>excludeEnd("ide");
  78939. messageSends: ["fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  78940. }),
  78941. $globals.Initer);
  78942. $core.addMethod(
  78943. $core.method({
  78944. selector: "finishMessage",
  78945. protocol: 'action',
  78946. fn: function (){
  78947. var self=this;
  78948. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  78949. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78950. return $core.withContext(function($ctx1) {
  78951. //>>excludeEnd("ctx");
  78952. $recv(console)._log_([" ", "The project should now be set up.", " ", " ", "To manage project from cli (run tests, recompile),", "the `grunt` command-line tool needs to be installed.", "If not present, it can be installed with:", " (sudo) npm install -g grunt-cli", " ", "To manage project dependencies,", "the `bower` command-line tool needs to be installed.", "If not present, it can be installed with:", " (sudo) npm install -g bower", " "]._join_($recv($String())._lf()));
  78953. $recv((function(){
  78954. }))._valueWithTimeout_((600));
  78955. return self;
  78956. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78957. }, function($ctx1) {$ctx1.fill(self,"finishMessage",{},$globals.Initer)});
  78958. //>>excludeEnd("ctx");
  78959. },
  78960. //>>excludeStart("ide", pragmas.excludeIdeData);
  78961. args: [],
  78962. source: "finishMessage\x0a\x09console log: (#(\x0a\x09\x09' '\x0a\x09\x09'The project should now be set up.'\x0a\x09\x09' '\x0a\x09\x09' '\x0a\x09\x09'To manage project from cli (run tests, recompile),'\x0a\x09\x09'the `grunt` command-line tool needs to be installed.'\x0a\x09\x09'If not present, it can be installed with:'\x0a\x09\x09' (sudo) npm install -g grunt-cli'\x0a\x09\x09' '\x0a\x09\x09'To manage project dependencies,'\x0a\x09\x09'the `bower` command-line tool needs to be installed.'\x0a\x09\x09'If not present, it can be installed with:'\x0a\x09\x09' (sudo) npm install -g bower'\x0a\x09\x09' '\x0a\x09) join: String lf).\x0a\x09[] valueWithTimeout: 600",
  78963. referencedClasses: ["String"],
  78964. //>>excludeEnd("ide");
  78965. messageSends: ["log:", "join:", "lf", "valueWithTimeout:"]
  78966. }),
  78967. $globals.Initer);
  78968. $core.addMethod(
  78969. $core.method({
  78970. selector: "gruntInitThenDo:",
  78971. protocol: 'action',
  78972. fn: function (aBlock){
  78973. var self=this;
  78974. var child,sanitizedTemplatePath;
  78975. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78976. return $core.withContext(function($ctx1) {
  78977. //>>excludeEnd("ctx");
  78978. var $1,$4,$3,$2;
  78979. sanitizedTemplatePath=$recv($recv($recv(self["@path"])._join_with_(self["@nmPath"],"grunt-init-amber"))._replace_with_("\x5c\x5c","\x5c\x5c"))._replace_with_(":","\x5c:");
  78980. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78981. $ctx1.sendIdx["replace:with:"]=1;
  78982. //>>excludeEnd("ctx");
  78983. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("grunt-init","grunt-init"),[sanitizedTemplatePath]);
  78984. $1=child;
  78985. $recv($1)._on_do_("error",aBlock);
  78986. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78987. $ctx1.sendIdx["on:do:"]=1;
  78988. //>>excludeEnd("ctx");
  78989. $2=$recv($1)._on_do_("close",(function(code){
  78990. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78991. return $core.withContext(function($ctx2) {
  78992. //>>excludeEnd("ctx");
  78993. $4=$recv(code).__eq((0));
  78994. if($core.assert($4)){
  78995. $3=nil;
  78996. } else {
  78997. $3=code;
  78998. };
  78999. return $recv(aBlock)._value_($3);
  79000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79001. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  79002. //>>excludeEnd("ctx");
  79003. }));
  79004. return self;
  79005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79006. }, function($ctx1) {$ctx1.fill(self,"gruntInitThenDo:",{aBlock:aBlock,child:child,sanitizedTemplatePath:sanitizedTemplatePath},$globals.Initer)});
  79007. //>>excludeEnd("ctx");
  79008. },
  79009. //>>excludeStart("ide", pragmas.excludeIdeData);
  79010. args: ["aBlock"],
  79011. source: "gruntInitThenDo: aBlock\x0a\x09| child sanitizedTemplatePath |\x0a\x09sanitizedTemplatePath := ((path join: nmPath with: 'grunt-init-amber')\x0a\x09\x09replace: '\x5c\x5c' with: '\x5c\x5c') replace: ':' with: '\x5c:'.\x0a\x09child := childProcess\x0a\x09\x09fork: (self npmScriptForModule: 'grunt-init' named: 'grunt-init')\x0a\x09\x09args: {sanitizedTemplatePath}.\x0a\x09child\x0a\x09\x09on: 'error' do: aBlock;\x0a\x09\x09on: 'close' do: [ :code |\x0a\x09\x09\x09aBlock value: (code = 0 ifTrue: [ nil ] ifFalse: [ code ]) ]",
  79012. referencedClasses: [],
  79013. //>>excludeEnd("ide");
  79014. messageSends: ["replace:with:", "join:with:", "fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  79015. }),
  79016. $globals.Initer);
  79017. $core.addMethod(
  79018. $core.method({
  79019. selector: "gruntThenDo:",
  79020. protocol: 'action',
  79021. fn: function (aBlock){
  79022. var self=this;
  79023. var child;
  79024. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79025. return $core.withContext(function($ctx1) {
  79026. //>>excludeEnd("ctx");
  79027. var $1,$4,$3,$2;
  79028. child=$recv(self["@childProcess"])._fork_args_(self._npmScriptForModule_named_("grunt-cli","grunt"),["default", "devel"]);
  79029. $1=child;
  79030. $recv($1)._on_do_("error",aBlock);
  79031. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79032. $ctx1.sendIdx["on:do:"]=1;
  79033. //>>excludeEnd("ctx");
  79034. $2=$recv($1)._on_do_("close",(function(code){
  79035. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79036. return $core.withContext(function($ctx2) {
  79037. //>>excludeEnd("ctx");
  79038. $4=$recv(code).__eq((0));
  79039. if($core.assert($4)){
  79040. $3=nil;
  79041. } else {
  79042. $3=code;
  79043. };
  79044. return $recv(aBlock)._value_($3);
  79045. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79046. }, function($ctx2) {$ctx2.fillBlock({code:code},$ctx1,1)});
  79047. //>>excludeEnd("ctx");
  79048. }));
  79049. return self;
  79050. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79051. }, function($ctx1) {$ctx1.fill(self,"gruntThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  79052. //>>excludeEnd("ctx");
  79053. },
  79054. //>>excludeStart("ide", pragmas.excludeIdeData);
  79055. args: ["aBlock"],
  79056. source: "gruntThenDo: aBlock\x0a\x09| child |\x0a\x09child := childProcess\x0a\x09\x09fork: (self npmScriptForModule: 'grunt-cli' named: 'grunt')\x0a\x09\x09args: #('default' 'devel').\x0a\x09child\x0a\x09\x09on: 'error' do: aBlock;\x0a\x09\x09on: 'close' do: [ :code |\x0a\x09\x09\x09aBlock value: (code = 0 ifTrue: [ nil ] ifFalse: [ code ]) ]",
  79057. referencedClasses: [],
  79058. //>>excludeEnd("ide");
  79059. messageSends: ["fork:args:", "npmScriptForModule:named:", "on:do:", "value:", "ifTrue:ifFalse:", "="]
  79060. }),
  79061. $globals.Initer);
  79062. $core.addMethod(
  79063. $core.method({
  79064. selector: "initialize",
  79065. protocol: 'initialization',
  79066. fn: function (){
  79067. var self=this;
  79068. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79069. return $core.withContext(function($ctx1) {
  79070. //>>excludeEnd("ctx");
  79071. (
  79072. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79073. $ctx1.supercall = true,
  79074. //>>excludeEnd("ctx");
  79075. $globals.Initer.superclass.fn.prototype._initialize.apply($recv(self), []));
  79076. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79077. $ctx1.supercall = false;
  79078. //>>excludeEnd("ctx");;
  79079. self["@childProcess"]=$recv(require)._value_("child_process");
  79080. self["@nmPath"]=$recv(self["@path"])._join_with_(self._rootDirname(),"node_modules");
  79081. return self;
  79082. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79083. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Initer)});
  79084. //>>excludeEnd("ctx");
  79085. },
  79086. //>>excludeStart("ide", pragmas.excludeIdeData);
  79087. args: [],
  79088. source: "initialize\x0a\x09super initialize.\x0a\x09childProcess := require value: 'child_process'.\x0a\x09nmPath := path join: self rootDirname with: 'node_modules'",
  79089. referencedClasses: [],
  79090. //>>excludeEnd("ide");
  79091. messageSends: ["initialize", "value:", "join:with:", "rootDirname"]
  79092. }),
  79093. $globals.Initer);
  79094. $core.addMethod(
  79095. $core.method({
  79096. selector: "npmInstallThenDo:",
  79097. protocol: 'action',
  79098. fn: function (aBlock){
  79099. var self=this;
  79100. var child;
  79101. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79102. return $core.withContext(function($ctx1) {
  79103. //>>excludeEnd("ctx");
  79104. var $1;
  79105. child=$recv(self["@childProcess"])._exec_thenDo_("npm install",aBlock);
  79106. $1=$recv(child)._stdout();
  79107. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79108. $ctx1.sendIdx["stdout"]=1;
  79109. //>>excludeEnd("ctx");
  79110. $recv($1)._pipe_options_($recv(process)._stdout(),$globals.HashedCollection._newFromPairs_(["end",false]));
  79111. return self;
  79112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79113. }, function($ctx1) {$ctx1.fill(self,"npmInstallThenDo:",{aBlock:aBlock,child:child},$globals.Initer)});
  79114. //>>excludeEnd("ctx");
  79115. },
  79116. //>>excludeStart("ide", pragmas.excludeIdeData);
  79117. args: ["aBlock"],
  79118. source: "npmInstallThenDo: aBlock\x0a\x09| child |\x0a\x09child := childProcess\x0a\x09\x09exec: 'npm install'\x0a\x09\x09thenDo: aBlock.\x0a\x09child stdout pipe: process stdout options: #{ 'end' -> false }",
  79119. referencedClasses: [],
  79120. //>>excludeEnd("ide");
  79121. messageSends: ["exec:thenDo:", "pipe:options:", "stdout"]
  79122. }),
  79123. $globals.Initer);
  79124. $core.addMethod(
  79125. $core.method({
  79126. selector: "npmScriptForModule:named:",
  79127. protocol: 'npm',
  79128. fn: function (aString,anotherString){
  79129. var self=this;
  79130. var modulePath,packageJson,binSection,scriptPath;
  79131. function $JSObjectProxy(){return $globals.JSObjectProxy||(typeof JSObjectProxy=="undefined"?nil:JSObjectProxy)}
  79132. function $Smalltalk(){return $globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  79133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79134. return $core.withContext(function($ctx1) {
  79135. //>>excludeEnd("ctx");
  79136. var $1,$3,$4,$2,$5,$6;
  79137. $1=self["@path"];
  79138. $3=$recv($JSObjectProxy())._on_(require);
  79139. $4=$recv(aString).__comma("/package.json");
  79140. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79141. $ctx1.sendIdx[","]=1;
  79142. //>>excludeEnd("ctx");
  79143. $2=$recv($3)._resolve_($4);
  79144. modulePath=$recv($1)._dirname_($2);
  79145. packageJson=$recv($Smalltalk())._readJSObject_($recv(require)._value_($recv(aString).__comma("/package.json")));
  79146. binSection=$recv(packageJson)._at_("bin");
  79147. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79148. $ctx1.sendIdx["at:"]=1;
  79149. //>>excludeEnd("ctx");
  79150. $5=$recv(binSection)._isString();
  79151. if($core.assert($5)){
  79152. scriptPath=binSection;
  79153. } else {
  79154. scriptPath=$recv(binSection)._at_(anotherString);
  79155. };
  79156. $6=$recv(self["@path"])._join_with_(modulePath,scriptPath);
  79157. return $6;
  79158. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79159. }, function($ctx1) {$ctx1.fill(self,"npmScriptForModule:named:",{aString:aString,anotherString:anotherString,modulePath:modulePath,packageJson:packageJson,binSection:binSection,scriptPath:scriptPath},$globals.Initer)});
  79160. //>>excludeEnd("ctx");
  79161. },
  79162. //>>excludeStart("ide", pragmas.excludeIdeData);
  79163. args: ["aString", "anotherString"],
  79164. source: "npmScriptForModule: aString named: anotherString\x0a\x09| modulePath packageJson binSection scriptPath |\x0a\x09modulePath := path dirname: (\x0a\x09\x09(JSObjectProxy on: require)\x0a\x09\x09\x09resolve: aString, '/package.json').\x0a\x09packageJson := Smalltalk readJSObject: (\x0a\x09\x09require value: aString, '/package.json').\x0a\x09binSection := packageJson at: 'bin'.\x0a\x09scriptPath := binSection isString\x0a\x09\x09ifTrue: [ binSection ]\x0a\x09\x09ifFalse: [ binSection at: anotherString ].\x0a\x09^ path join: modulePath with: scriptPath",
  79165. referencedClasses: ["JSObjectProxy", "Smalltalk"],
  79166. //>>excludeEnd("ide");
  79167. messageSends: ["dirname:", "resolve:", "on:", ",", "readJSObject:", "value:", "at:", "ifTrue:ifFalse:", "isString", "join:with:"]
  79168. }),
  79169. $globals.Initer);
  79170. $core.addMethod(
  79171. $core.method({
  79172. selector: "start",
  79173. protocol: 'action',
  79174. fn: function (){
  79175. var self=this;
  79176. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79177. return $core.withContext(function($ctx1) {
  79178. //>>excludeEnd("ctx");
  79179. var $1,$2,$3,$4,$5,$6,$7,$8,$receiver;
  79180. self._gruntInitThenDo_((function(error){
  79181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79182. return $core.withContext(function($ctx2) {
  79183. //>>excludeEnd("ctx");
  79184. if(($receiver = error) == null || $receiver.isNil){
  79185. return self._bowerInstallThenDo_((function(error2){
  79186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79187. return $core.withContext(function($ctx3) {
  79188. //>>excludeEnd("ctx");
  79189. if(($receiver = error2) == null || $receiver.isNil){
  79190. return self._npmInstallThenDo_((function(error3){
  79191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79192. return $core.withContext(function($ctx4) {
  79193. //>>excludeEnd("ctx");
  79194. if(($receiver = error3) == null || $receiver.isNil){
  79195. return self._gruntThenDo_((function(error4){
  79196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79197. return $core.withContext(function($ctx5) {
  79198. //>>excludeEnd("ctx");
  79199. if(($receiver = error4) == null || $receiver.isNil){
  79200. self._finishMessage();
  79201. return $recv(process)._exit();
  79202. } else {
  79203. $7=console;
  79204. $recv($7)._log_("grunt exec error:");
  79205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79206. $ctx5.sendIdx["log:"]=7;
  79207. //>>excludeEnd("ctx");
  79208. $8=$recv($7)._log_(error4);
  79209. $8;
  79210. return $recv(process)._exit_((104));
  79211. };
  79212. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79213. }, function($ctx5) {$ctx5.fillBlock({error4:error4},$ctx4,10)});
  79214. //>>excludeEnd("ctx");
  79215. }));
  79216. } else {
  79217. $5=console;
  79218. $recv($5)._log_("npm install exec error:");
  79219. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79220. $ctx4.sendIdx["log:"]=5;
  79221. //>>excludeEnd("ctx");
  79222. $6=$recv($5)._log_(error3);
  79223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79224. $ctx4.sendIdx["log:"]=6;
  79225. //>>excludeEnd("ctx");
  79226. $6;
  79227. return $recv(process)._exit_((103));
  79228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79229. $ctx4.sendIdx["exit:"]=3;
  79230. //>>excludeEnd("ctx");
  79231. };
  79232. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79233. }, function($ctx4) {$ctx4.fillBlock({error3:error3},$ctx3,7)});
  79234. //>>excludeEnd("ctx");
  79235. }));
  79236. } else {
  79237. $3=console;
  79238. $recv($3)._log_("bower install exec error:");
  79239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79240. $ctx3.sendIdx["log:"]=3;
  79241. //>>excludeEnd("ctx");
  79242. $4=$recv($3)._log_(error2);
  79243. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79244. $ctx3.sendIdx["log:"]=4;
  79245. //>>excludeEnd("ctx");
  79246. $4;
  79247. return $recv(process)._exit_((102));
  79248. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79249. $ctx3.sendIdx["exit:"]=2;
  79250. //>>excludeEnd("ctx");
  79251. };
  79252. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79253. }, function($ctx3) {$ctx3.fillBlock({error2:error2},$ctx2,4)});
  79254. //>>excludeEnd("ctx");
  79255. }));
  79256. } else {
  79257. $1=console;
  79258. $recv($1)._log_("grunt-init exec error:");
  79259. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79260. $ctx2.sendIdx["log:"]=1;
  79261. //>>excludeEnd("ctx");
  79262. $2=$recv($1)._log_(error);
  79263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79264. $ctx2.sendIdx["log:"]=2;
  79265. //>>excludeEnd("ctx");
  79266. $2;
  79267. return $recv(process)._exit_((101));
  79268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79269. $ctx2.sendIdx["exit:"]=1;
  79270. //>>excludeEnd("ctx");
  79271. };
  79272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79273. }, function($ctx2) {$ctx2.fillBlock({error:error},$ctx1,1)});
  79274. //>>excludeEnd("ctx");
  79275. }));
  79276. return self;
  79277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79278. }, function($ctx1) {$ctx1.fill(self,"start",{},$globals.Initer)});
  79279. //>>excludeEnd("ctx");
  79280. },
  79281. //>>excludeStart("ide", pragmas.excludeIdeData);
  79282. args: [],
  79283. source: "start\x0a\x09self gruntInitThenDo: [ :error | error\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt-init exec error:'; log: error.\x0a\x09\x09process exit: 101 ]\x0a\x09ifNil: [\x0a\x0a\x09self bowerInstallThenDo: [ :error2 | error2\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'bower install exec error:'; log: error2.\x0a\x09\x09process exit: 102 ]\x0a\x09ifNil: [\x0a\x0a\x09self npmInstallThenDo: [ :error3 | error3\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'npm install exec error:'; log: error3.\x0a\x09\x09process exit: 103 ]\x0a\x09ifNil: [\x0a\x0a\x09self gruntThenDo: [ :error4 | error4\x0a\x09ifNotNil: [\x0a\x09\x09console log: 'grunt exec error:'; log: error4.\x0a\x09\x09process exit: 104 ]\x0a\x09ifNil: [\x0a\x0a\x09self finishMessage.\x0a\x09process exit ]]]]]]]]",
  79284. referencedClasses: [],
  79285. //>>excludeEnd("ide");
  79286. messageSends: ["gruntInitThenDo:", "ifNotNil:ifNil:", "log:", "exit:", "bowerInstallThenDo:", "npmInstallThenDo:", "gruntThenDo:", "finishMessage", "exit"]
  79287. }),
  79288. $globals.Initer);
  79289. $core.addClass('Repl', $globals.Object, ['readline', 'interface', 'util', 'session', 'resultCount', 'commands'], 'AmberCli');
  79290. //>>excludeStart("ide", pragmas.excludeIdeData);
  79291. $globals.Repl.comment="I am a class representing a REPL (Read Evaluate Print Loop) and provide a command line interface to Amber Smalltalk.\x0aOn the prompt you can type Amber statements which will be evaluated after pressing <Enter>.\x0aThe evaluation is comparable with executing a 'DoIt' in a workspace.\x0a\x0aMy runtime requirement is a functional Node.js executable with working Readline support.";
  79292. //>>excludeEnd("ide");
  79293. $core.addMethod(
  79294. $core.method({
  79295. selector: "addVariableNamed:to:",
  79296. protocol: 'private',
  79297. fn: function (aString,anObject){
  79298. var self=this;
  79299. var newClass,newObject;
  79300. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79301. return $core.withContext(function($ctx1) {
  79302. //>>excludeEnd("ctx");
  79303. var $1;
  79304. newClass=self._subclass_withVariable_($recv(anObject)._class(),aString);
  79305. self._encapsulateVariable_withValue_in_(aString,anObject,newClass);
  79306. newObject=$recv(newClass)._new();
  79307. self._setPreviousVariablesFor_from_(newObject,anObject);
  79308. $1=newObject;
  79309. return $1;
  79310. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79311. }, function($ctx1) {$ctx1.fill(self,"addVariableNamed:to:",{aString:aString,anObject:anObject,newClass:newClass,newObject:newObject},$globals.Repl)});
  79312. //>>excludeEnd("ctx");
  79313. },
  79314. //>>excludeStart("ide", pragmas.excludeIdeData);
  79315. args: ["aString", "anObject"],
  79316. source: "addVariableNamed: aString to: anObject\x0a\x09| newClass newObject |\x0a\x09newClass := self subclass: anObject class withVariable: aString.\x0a\x09self encapsulateVariable: aString withValue: anObject in: newClass.\x0a\x09newObject := newClass new.\x0a\x09self setPreviousVariablesFor: newObject from: anObject.\x0a\x09^ newObject",
  79317. referencedClasses: [],
  79318. //>>excludeEnd("ide");
  79319. messageSends: ["subclass:withVariable:", "class", "encapsulateVariable:withValue:in:", "new", "setPreviousVariablesFor:from:"]
  79320. }),
  79321. $globals.Repl);
  79322. $core.addMethod(
  79323. $core.method({
  79324. selector: "assignNewVariable:do:",
  79325. protocol: 'private',
  79326. fn: function (buffer,aBlock){
  79327. var self=this;
  79328. function $Error(){return $globals.Error||(typeof Error=="undefined"?nil:Error)}
  79329. function $ConsoleErrorHandler(){return $globals.ConsoleErrorHandler||(typeof ConsoleErrorHandler=="undefined"?nil:ConsoleErrorHandler)}
  79330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79331. return $core.withContext(function($ctx1) {
  79332. //>>excludeEnd("ctx");
  79333. var $3,$4,$2,$1,$receiver;
  79334. $1=self._parseAssignment_do_(buffer,(function(name,expr){
  79335. var varName,value;
  79336. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79337. return $core.withContext(function($ctx2) {
  79338. //>>excludeEnd("ctx");
  79339. if(($receiver = name) == null || $receiver.isNil){
  79340. varName=self._nextResultName();
  79341. } else {
  79342. varName=name;
  79343. };
  79344. varName;
  79345. self["@session"]=self._addVariableNamed_to_(varName,self["@session"]);
  79346. self["@session"];
  79347. $recv((function(){
  79348. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79349. return $core.withContext(function($ctx3) {
  79350. //>>excludeEnd("ctx");
  79351. $3=$recv(varName).__comma(" := ");
  79352. if(($receiver = expr) == null || $receiver.isNil){
  79353. $4=buffer;
  79354. } else {
  79355. $4=expr;
  79356. };
  79357. $2=$recv($3).__comma($4);
  79358. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79359. $ctx3.sendIdx[","]=1;
  79360. //>>excludeEnd("ctx");
  79361. value=self._eval_on_($2,self["@session"]);
  79362. return value;
  79363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79364. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,3)});
  79365. //>>excludeEnd("ctx");
  79366. }))._on_do_($Error(),(function(e){
  79367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79368. return $core.withContext(function($ctx3) {
  79369. //>>excludeEnd("ctx");
  79370. $recv($recv($ConsoleErrorHandler())._new())._logError_(e);
  79371. value=nil;
  79372. return value;
  79373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79374. }, function($ctx3) {$ctx3.fillBlock({e:e},$ctx2,5)});
  79375. //>>excludeEnd("ctx");
  79376. }));
  79377. return $recv(aBlock)._value_value_(varName,value);
  79378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79379. }, function($ctx2) {$ctx2.fillBlock({name:name,expr:expr,varName:varName,value:value},$ctx1,1)});
  79380. //>>excludeEnd("ctx");
  79381. }));
  79382. return $1;
  79383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79384. }, function($ctx1) {$ctx1.fill(self,"assignNewVariable:do:",{buffer:buffer,aBlock:aBlock},$globals.Repl)});
  79385. //>>excludeEnd("ctx");
  79386. },
  79387. //>>excludeStart("ide", pragmas.excludeIdeData);
  79388. args: ["buffer", "aBlock"],
  79389. source: "assignNewVariable: buffer do: aBlock\x0a\x09\x22Assigns a new variable and calls the given block with the variable's name and value\x0a\x09 if buffer contains an assignment expression. If it doesn't the block is called with nil for\x0a\x09 both arguments.\x22\x0a\x09^ self parseAssignment: buffer do: [ :name :expr || varName value |\x0a\x09\x09varName := name ifNil: [self nextResultName].\x0a\x09\x09session := self addVariableNamed: varName to: session.\x0a\x09\x09[ value := self eval: varName, ' := ', (expr ifNil: [buffer]) on: session ]\x0a\x09\x09\x09on: Error\x0a\x09\x09\x09do: [ :e | ConsoleErrorHandler new logError: e. value := nil].\x0a\x09\x09aBlock value: varName value: value]",
  79390. referencedClasses: ["Error", "ConsoleErrorHandler"],
  79391. //>>excludeEnd("ide");
  79392. messageSends: ["parseAssignment:do:", "ifNil:", "nextResultName", "addVariableNamed:to:", "on:do:", "eval:on:", ",", "logError:", "new", "value:value:"]
  79393. }),
  79394. $globals.Repl);
  79395. $core.addMethod(
  79396. $core.method({
  79397. selector: "clearScreen",
  79398. protocol: 'actions',
  79399. fn: function (){
  79400. var self=this;
  79401. var esc,cls;
  79402. function $String(){return $globals.String||(typeof String=="undefined"?nil:String)}
  79403. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79404. return $core.withContext(function($ctx1) {
  79405. //>>excludeEnd("ctx");
  79406. var $1;
  79407. esc=$recv($String())._fromCharCode_((27));
  79408. $1=$recv($recv(esc).__comma("[2J")).__comma(esc);
  79409. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79410. $ctx1.sendIdx[","]=2;
  79411. //>>excludeEnd("ctx");
  79412. cls=$recv($1).__comma("[0;0f");
  79413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79414. $ctx1.sendIdx[","]=1;
  79415. //>>excludeEnd("ctx");
  79416. $recv($recv(process)._stdout())._write_(cls);
  79417. $recv(self["@interface"])._prompt();
  79418. return self;
  79419. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79420. }, function($ctx1) {$ctx1.fill(self,"clearScreen",{esc:esc,cls:cls},$globals.Repl)});
  79421. //>>excludeEnd("ctx");
  79422. },
  79423. //>>excludeStart("ide", pragmas.excludeIdeData);
  79424. args: [],
  79425. source: "clearScreen\x0a\x09| esc cls |\x0a\x09esc := String fromCharCode: 27.\x0a\x09cls := esc, '[2J', esc, '[0;0f'.\x0a\x09process stdout write: cls.\x0a\x09interface prompt",
  79426. referencedClasses: ["String"],
  79427. //>>excludeEnd("ide");
  79428. messageSends: ["fromCharCode:", ",", "write:", "stdout", "prompt"]
  79429. }),
  79430. $globals.Repl);
  79431. $core.addMethod(
  79432. $core.method({
  79433. selector: "close",
  79434. protocol: 'actions',
  79435. fn: function (){
  79436. var self=this;
  79437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79438. return $core.withContext(function($ctx1) {
  79439. //>>excludeEnd("ctx");
  79440. $recv($recv(process)._stdin())._destroy();
  79441. return self;
  79442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79443. }, function($ctx1) {$ctx1.fill(self,"close",{},$globals.Repl)});
  79444. //>>excludeEnd("ctx");
  79445. },
  79446. //>>excludeStart("ide", pragmas.excludeIdeData);
  79447. args: [],
  79448. source: "close\x0a\x09process stdin destroy",
  79449. referencedClasses: [],
  79450. //>>excludeEnd("ide");
  79451. messageSends: ["destroy", "stdin"]
  79452. }),
  79453. $globals.Repl);
  79454. $core.addMethod(
  79455. $core.method({
  79456. selector: "commands",
  79457. protocol: 'accessing',
  79458. fn: function (){
  79459. var self=this;
  79460. var $1;
  79461. $1=self["@commands"];
  79462. return $1;
  79463. },
  79464. //>>excludeStart("ide", pragmas.excludeIdeData);
  79465. args: [],
  79466. source: "commands\x0a\x09^ commands",
  79467. referencedClasses: [],
  79468. //>>excludeEnd("ide");
  79469. messageSends: []
  79470. }),
  79471. $globals.Repl);
  79472. $core.addMethod(
  79473. $core.method({
  79474. selector: "createInterface",
  79475. protocol: 'actions',
  79476. fn: function (){
  79477. var self=this;
  79478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79479. return $core.withContext(function($ctx1) {
  79480. //>>excludeEnd("ctx");
  79481. var $1;
  79482. self["@interface"]=$recv(self["@readline"])._createInterface_stdout_($recv(process)._stdin(),$recv(process)._stdout());
  79483. $recv(self["@interface"])._on_do_("line",(function(buffer){
  79484. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79485. return $core.withContext(function($ctx2) {
  79486. //>>excludeEnd("ctx");
  79487. return self._processLine_(buffer);
  79488. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79489. }, function($ctx2) {$ctx2.fillBlock({buffer:buffer},$ctx1,1)});
  79490. //>>excludeEnd("ctx");
  79491. }));
  79492. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79493. $ctx1.sendIdx["on:do:"]=1;
  79494. //>>excludeEnd("ctx");
  79495. $recv(self["@interface"])._on_do_("close",(function(){
  79496. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79497. return $core.withContext(function($ctx2) {
  79498. //>>excludeEnd("ctx");
  79499. return self._close();
  79500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79501. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  79502. //>>excludeEnd("ctx");
  79503. }));
  79504. self._printWelcome();
  79505. self._setupHotkeys();
  79506. $1=self._setPrompt();
  79507. $recv(self["@interface"])._prompt();
  79508. return self;
  79509. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79510. }, function($ctx1) {$ctx1.fill(self,"createInterface",{},$globals.Repl)});
  79511. //>>excludeEnd("ctx");
  79512. },
  79513. //>>excludeStart("ide", pragmas.excludeIdeData);
  79514. args: [],
  79515. source: "createInterface\x0a\x09interface := readline createInterface: process stdin stdout: process stdout.\x0a\x09interface on: 'line' do: [:buffer | self processLine: buffer].\x0a\x09interface on: 'close' do: [self close].\x0a\x09self printWelcome; setupHotkeys; setPrompt.\x0a\x09interface prompt",
  79516. referencedClasses: [],
  79517. //>>excludeEnd("ide");
  79518. messageSends: ["createInterface:stdout:", "stdin", "stdout", "on:do:", "processLine:", "close", "printWelcome", "setupHotkeys", "setPrompt", "prompt"]
  79519. }),
  79520. $globals.Repl);
  79521. $core.addMethod(
  79522. $core.method({
  79523. selector: "encapsulateVariable:withValue:in:",
  79524. protocol: 'private',
  79525. fn: function (aString,anObject,aClass){
  79526. var self=this;
  79527. var compiler;
  79528. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  79529. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79530. return $core.withContext(function($ctx1) {
  79531. //>>excludeEnd("ctx");
  79532. var $1,$4,$3,$2,$5,$6;
  79533. compiler=$recv($Compiler())._new();
  79534. $1=compiler;
  79535. $4=$recv(aString).__comma(": anObject ^ ");
  79536. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79537. $ctx1.sendIdx[","]=3;
  79538. //>>excludeEnd("ctx");
  79539. $3=$recv($4).__comma(aString);
  79540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79541. $ctx1.sendIdx[","]=2;
  79542. //>>excludeEnd("ctx");
  79543. $2=$recv($3).__comma(" := anObject");
  79544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79545. $ctx1.sendIdx[","]=1;
  79546. //>>excludeEnd("ctx");
  79547. $recv($1)._install_forClass_protocol_($2,aClass,"session");
  79548. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79549. $ctx1.sendIdx["install:forClass:protocol:"]=1;
  79550. //>>excludeEnd("ctx");
  79551. $5=compiler;
  79552. $6=$recv($recv(aString).__comma(" ^ ")).__comma(aString);
  79553. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79554. $ctx1.sendIdx[","]=4;
  79555. //>>excludeEnd("ctx");
  79556. $recv($5)._install_forClass_protocol_($6,aClass,"session");
  79557. return self;
  79558. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79559. }, function($ctx1) {$ctx1.fill(self,"encapsulateVariable:withValue:in:",{aString:aString,anObject:anObject,aClass:aClass,compiler:compiler},$globals.Repl)});
  79560. //>>excludeEnd("ctx");
  79561. },
  79562. //>>excludeStart("ide", pragmas.excludeIdeData);
  79563. args: ["aString", "anObject", "aClass"],
  79564. source: "encapsulateVariable: aString withValue: anObject in: aClass\x0a\x09\x22Add getter and setter for given variable to session.\x22\x0a\x09| compiler |\x0a\x09compiler := Compiler new.\x0a\x09compiler install: aString, ': anObject ^ ', aString, ' := anObject' forClass: aClass protocol: 'session'.\x0a\x09compiler install: aString, ' ^ ', aString forClass: aClass protocol: 'session'.",
  79565. referencedClasses: ["Compiler"],
  79566. //>>excludeEnd("ide");
  79567. messageSends: ["new", "install:forClass:protocol:", ","]
  79568. }),
  79569. $globals.Repl);
  79570. $core.addMethod(
  79571. $core.method({
  79572. selector: "eval:",
  79573. protocol: 'actions',
  79574. fn: function (buffer){
  79575. var self=this;
  79576. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  79577. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79578. return $core.withContext(function($ctx1) {
  79579. //>>excludeEnd("ctx");
  79580. var $1;
  79581. $1=self._eval_on_(buffer,$recv($DoIt())._new());
  79582. return $1;
  79583. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79584. }, function($ctx1) {$ctx1.fill(self,"eval:",{buffer:buffer},$globals.Repl)});
  79585. //>>excludeEnd("ctx");
  79586. },
  79587. //>>excludeStart("ide", pragmas.excludeIdeData);
  79588. args: ["buffer"],
  79589. source: "eval: buffer\x0a\x09^ self eval: buffer on: DoIt new.",
  79590. referencedClasses: ["DoIt"],
  79591. //>>excludeEnd("ide");
  79592. messageSends: ["eval:on:", "new"]
  79593. }),
  79594. $globals.Repl);
  79595. $core.addMethod(
  79596. $core.method({
  79597. selector: "eval:on:",
  79598. protocol: 'actions',
  79599. fn: function (buffer,anObject){
  79600. var self=this;
  79601. var result;
  79602. function $Compiler(){return $globals.Compiler||(typeof Compiler=="undefined"?nil:Compiler)}
  79603. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79604. return $core.withContext(function($ctx1) {
  79605. //>>excludeEnd("ctx");
  79606. var $1,$2,$3;
  79607. $1=$recv(buffer)._isEmpty();
  79608. if(!$core.assert($1)){
  79609. $recv((function(){
  79610. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79611. return $core.withContext(function($ctx2) {
  79612. //>>excludeEnd("ctx");
  79613. result=$recv($recv($Compiler())._new())._evaluateExpression_on_(buffer,anObject);
  79614. return result;
  79615. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79616. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  79617. //>>excludeEnd("ctx");
  79618. }))._tryCatch_((function(e){
  79619. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79620. return $core.withContext(function($ctx2) {
  79621. //>>excludeEnd("ctx");
  79622. $2=$recv(e)._isSmalltalkError();
  79623. if($core.assert($2)){
  79624. return $recv(e)._resignal();
  79625. } else {
  79626. return $recv($recv(process)._stdout())._write_($recv(e)._jsStack());
  79627. };
  79628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79629. }, function($ctx2) {$ctx2.fillBlock({e:e},$ctx1,3)});
  79630. //>>excludeEnd("ctx");
  79631. }));
  79632. };
  79633. $3=result;
  79634. return $3;
  79635. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79636. }, function($ctx1) {$ctx1.fill(self,"eval:on:",{buffer:buffer,anObject:anObject,result:result},$globals.Repl)});
  79637. //>>excludeEnd("ctx");
  79638. },
  79639. //>>excludeStart("ide", pragmas.excludeIdeData);
  79640. args: ["buffer", "anObject"],
  79641. source: "eval: buffer on: anObject\x0a\x09| result |\x0a\x09buffer isEmpty ifFalse: [\x0a\x09\x09[result := Compiler new evaluateExpression: buffer on: anObject]\x0a\x09\x09\x09tryCatch: [:e |\x0a\x09\x09\x09\x09e isSmalltalkError\x0a\x09\x09\x09\x09 ifTrue: [ e resignal ]\x0a\x09\x09\x09 \x09 ifFalse: [ process stdout write: e jsStack ]]].\x0a\x09^ result",
  79642. referencedClasses: ["Compiler"],
  79643. //>>excludeEnd("ide");
  79644. messageSends: ["ifFalse:", "isEmpty", "tryCatch:", "evaluateExpression:on:", "new", "ifTrue:ifFalse:", "isSmalltalkError", "resignal", "write:", "stdout", "jsStack"]
  79645. }),
  79646. $globals.Repl);
  79647. $core.addMethod(
  79648. $core.method({
  79649. selector: "executeCommand:",
  79650. protocol: 'private',
  79651. fn: function (aString){
  79652. var self=this;
  79653. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79654. return $core.withContext(function($ctx1) {
  79655. //>>excludeEnd("ctx");
  79656. var $1;
  79657. var $early={};
  79658. try {
  79659. $recv(self._commands())._keysAndValuesDo_((function(names,cmd){
  79660. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79661. return $core.withContext(function($ctx2) {
  79662. //>>excludeEnd("ctx");
  79663. $1=$recv(names)._includes_(aString);
  79664. if($core.assert($1)){
  79665. $recv(cmd)._value();
  79666. throw $early=[true];
  79667. };
  79668. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79669. }, function($ctx2) {$ctx2.fillBlock({names:names,cmd:cmd},$ctx1,1)});
  79670. //>>excludeEnd("ctx");
  79671. }));
  79672. return false;
  79673. }
  79674. catch(e) {if(e===$early)return e[0]; throw e}
  79675. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79676. }, function($ctx1) {$ctx1.fill(self,"executeCommand:",{aString:aString},$globals.Repl)});
  79677. //>>excludeEnd("ctx");
  79678. },
  79679. //>>excludeStart("ide", pragmas.excludeIdeData);
  79680. args: ["aString"],
  79681. source: "executeCommand: aString\x0a\x09\x22Tries to process the given string as a command. Returns true if it was a command, false if not.\x22\x0a\x09self commands keysAndValuesDo: [:names :cmd |\x0a\x09\x09(names includes: aString) ifTrue: [\x0a\x09\x09\x09cmd value.\x0a\x09\x09\x09^ true]].\x0a\x09^ false",
  79682. referencedClasses: [],
  79683. //>>excludeEnd("ide");
  79684. messageSends: ["keysAndValuesDo:", "commands", "ifTrue:", "includes:", "value"]
  79685. }),
  79686. $globals.Repl);
  79687. $core.addMethod(
  79688. $core.method({
  79689. selector: "initialize",
  79690. protocol: 'initialization',
  79691. fn: function (){
  79692. var self=this;
  79693. function $DoIt(){return $globals.DoIt||(typeof DoIt=="undefined"?nil:DoIt)}
  79694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79695. return $core.withContext(function($ctx1) {
  79696. //>>excludeEnd("ctx");
  79697. (
  79698. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79699. $ctx1.supercall = true,
  79700. //>>excludeEnd("ctx");
  79701. $globals.Repl.superclass.fn.prototype._initialize.apply($recv(self), []));
  79702. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79703. $ctx1.supercall = false;
  79704. //>>excludeEnd("ctx");;
  79705. self["@session"]=$recv($DoIt())._new();
  79706. self["@readline"]=$recv(require)._value_("readline");
  79707. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79708. $ctx1.sendIdx["value:"]=1;
  79709. //>>excludeEnd("ctx");
  79710. self["@util"]=$recv(require)._value_("util");
  79711. self._setupCommands();
  79712. return self;
  79713. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79714. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Repl)});
  79715. //>>excludeEnd("ctx");
  79716. },
  79717. //>>excludeStart("ide", pragmas.excludeIdeData);
  79718. args: [],
  79719. source: "initialize\x0a\x09super initialize.\x0a\x09session := DoIt new.\x0a\x09readline := require value: 'readline'.\x0a\x09util := require value: 'util'.\x0a\x09self setupCommands",
  79720. referencedClasses: ["DoIt"],
  79721. //>>excludeEnd("ide");
  79722. messageSends: ["initialize", "new", "value:", "setupCommands"]
  79723. }),
  79724. $globals.Repl);
  79725. $core.addMethod(
  79726. $core.method({
  79727. selector: "instanceVariableNamesFor:",
  79728. protocol: 'private',
  79729. fn: function (aClass){
  79730. var self=this;
  79731. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79732. return $core.withContext(function($ctx1) {
  79733. //>>excludeEnd("ctx");
  79734. var $2,$3,$1,$receiver;
  79735. $2=$recv(aClass)._superclass();
  79736. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79737. $ctx1.sendIdx["superclass"]=1;
  79738. //>>excludeEnd("ctx");
  79739. if(($receiver = $2) == null || $receiver.isNil){
  79740. $1=$recv(aClass)._instanceVariableNames();
  79741. } else {
  79742. $3=$recv(aClass)._instanceVariableNames();
  79743. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79744. $ctx1.sendIdx["instanceVariableNames"]=1;
  79745. //>>excludeEnd("ctx");
  79746. $1=$recv($3)._copyWithAll_(self._instanceVariableNamesFor_($recv(aClass)._superclass()));
  79747. };
  79748. return $1;
  79749. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79750. }, function($ctx1) {$ctx1.fill(self,"instanceVariableNamesFor:",{aClass:aClass},$globals.Repl)});
  79751. //>>excludeEnd("ctx");
  79752. },
  79753. //>>excludeStart("ide", pragmas.excludeIdeData);
  79754. args: ["aClass"],
  79755. source: "instanceVariableNamesFor: aClass\x0a\x09\x22Yields all instance variable names for the given class, including inherited ones.\x22\x0a\x09^ aClass superclass\x0a\x09\x09ifNotNil: [\x0a\x09\x09\x09aClass instanceVariableNames copyWithAll: (self instanceVariableNamesFor: aClass superclass)]\x0a\x09\x09ifNil: [\x0a\x09\x09\x09aClass instanceVariableNames]",
  79756. referencedClasses: [],
  79757. //>>excludeEnd("ide");
  79758. messageSends: ["ifNotNil:ifNil:", "superclass", "copyWithAll:", "instanceVariableNames", "instanceVariableNamesFor:"]
  79759. }),
  79760. $globals.Repl);
  79761. $core.addMethod(
  79762. $core.method({
  79763. selector: "isIdentifier:",
  79764. protocol: 'private',
  79765. fn: function (aString){
  79766. var self=this;
  79767. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79768. return $core.withContext(function($ctx1) {
  79769. //>>excludeEnd("ctx");
  79770. var $1;
  79771. $1=$recv(aString)._match_("^[a-z_]\x5cw*$"._asRegexp());
  79772. return $1;
  79773. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79774. }, function($ctx1) {$ctx1.fill(self,"isIdentifier:",{aString:aString},$globals.Repl)});
  79775. //>>excludeEnd("ctx");
  79776. },
  79777. //>>excludeStart("ide", pragmas.excludeIdeData);
  79778. args: ["aString"],
  79779. source: "isIdentifier: aString\x0a\x09^ aString match: '^[a-z_]\x5cw*$' asRegexp",
  79780. referencedClasses: [],
  79781. //>>excludeEnd("ide");
  79782. messageSends: ["match:", "asRegexp"]
  79783. }),
  79784. $globals.Repl);
  79785. $core.addMethod(
  79786. $core.method({
  79787. selector: "isVariableDefined:",
  79788. protocol: 'private',
  79789. fn: function (aString){
  79790. var self=this;
  79791. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79792. return $core.withContext(function($ctx1) {
  79793. //>>excludeEnd("ctx");
  79794. var $1;
  79795. $1=$recv(self._instanceVariableNamesFor_($recv(self["@session"])._class()))._includes_(aString);
  79796. return $1;
  79797. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79798. }, function($ctx1) {$ctx1.fill(self,"isVariableDefined:",{aString:aString},$globals.Repl)});
  79799. //>>excludeEnd("ctx");
  79800. },
  79801. //>>excludeStart("ide", pragmas.excludeIdeData);
  79802. args: ["aString"],
  79803. source: "isVariableDefined: aString\x0a\x09^ (self instanceVariableNamesFor: session class) includes: aString",
  79804. referencedClasses: [],
  79805. //>>excludeEnd("ide");
  79806. messageSends: ["includes:", "instanceVariableNamesFor:", "class"]
  79807. }),
  79808. $globals.Repl);
  79809. $core.addMethod(
  79810. $core.method({
  79811. selector: "nextResultName",
  79812. protocol: 'private',
  79813. fn: function (){
  79814. var self=this;
  79815. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79816. return $core.withContext(function($ctx1) {
  79817. //>>excludeEnd("ctx");
  79818. var $1,$2,$receiver;
  79819. $1=self["@resultCount"];
  79820. if(($receiver = $1) == null || $receiver.isNil){
  79821. self["@resultCount"]=(1);
  79822. } else {
  79823. self["@resultCount"]=$recv(self["@resultCount"]).__plus((1));
  79824. };
  79825. $2="res".__comma($recv(self["@resultCount"])._asString());
  79826. return $2;
  79827. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79828. }, function($ctx1) {$ctx1.fill(self,"nextResultName",{},$globals.Repl)});
  79829. //>>excludeEnd("ctx");
  79830. },
  79831. //>>excludeStart("ide", pragmas.excludeIdeData);
  79832. args: [],
  79833. source: "nextResultName\x0a\x09resultCount := resultCount\x0a \x09ifNotNil: [resultCount + 1]\x0a \x09ifNil: [1].\x0a ^ 'res', resultCount asString",
  79834. referencedClasses: [],
  79835. //>>excludeEnd("ide");
  79836. messageSends: ["ifNotNil:ifNil:", "+", ",", "asString"]
  79837. }),
  79838. $globals.Repl);
  79839. $core.addMethod(
  79840. $core.method({
  79841. selector: "onKeyPress:",
  79842. protocol: 'private',
  79843. fn: function (key){
  79844. var self=this;
  79845. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79846. return $core.withContext(function($ctx1) {
  79847. //>>excludeEnd("ctx");
  79848. var $1;
  79849. $1=$recv($recv(key)._ctrl())._and_((function(){
  79850. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79851. return $core.withContext(function($ctx2) {
  79852. //>>excludeEnd("ctx");
  79853. return $recv($recv(key)._name()).__eq("l");
  79854. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79855. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  79856. //>>excludeEnd("ctx");
  79857. }));
  79858. if($core.assert($1)){
  79859. self._clearScreen();
  79860. };
  79861. return self;
  79862. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79863. }, function($ctx1) {$ctx1.fill(self,"onKeyPress:",{key:key},$globals.Repl)});
  79864. //>>excludeEnd("ctx");
  79865. },
  79866. //>>excludeStart("ide", pragmas.excludeIdeData);
  79867. args: ["key"],
  79868. source: "onKeyPress: key\x0a\x09(key ctrl and: [key name = 'l'])\x0a\x09\x09ifTrue: [self clearScreen]",
  79869. referencedClasses: [],
  79870. //>>excludeEnd("ide");
  79871. messageSends: ["ifTrue:", "and:", "ctrl", "=", "name", "clearScreen"]
  79872. }),
  79873. $globals.Repl);
  79874. $core.addMethod(
  79875. $core.method({
  79876. selector: "parseAssignment:do:",
  79877. protocol: 'private',
  79878. fn: function (aString,aBlock){
  79879. var self=this;
  79880. var assignment;
  79881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79882. return $core.withContext(function($ctx1) {
  79883. //>>excludeEnd("ctx");
  79884. var $3,$2,$1;
  79885. assignment=$recv($recv(aString)._tokenize_(":="))._collect_((function(s){
  79886. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79887. return $core.withContext(function($ctx2) {
  79888. //>>excludeEnd("ctx");
  79889. return $recv(s)._trimBoth();
  79890. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79891. }, function($ctx2) {$ctx2.fillBlock({s:s},$ctx1,1)});
  79892. //>>excludeEnd("ctx");
  79893. }));
  79894. $2=$recv($recv($recv(assignment)._size()).__eq((2)))._and_((function(){
  79895. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79896. return $core.withContext(function($ctx2) {
  79897. //>>excludeEnd("ctx");
  79898. $3=$recv(assignment)._first();
  79899. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79900. $ctx2.sendIdx["first"]=1;
  79901. //>>excludeEnd("ctx");
  79902. return self._isIdentifier_($3);
  79903. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79904. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  79905. //>>excludeEnd("ctx");
  79906. }));
  79907. if($core.assert($2)){
  79908. $1=$recv(aBlock)._value_value_($recv(assignment)._first(),$recv(assignment)._last());
  79909. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79910. $ctx1.sendIdx["value:value:"]=1;
  79911. //>>excludeEnd("ctx");
  79912. } else {
  79913. $1=$recv(aBlock)._value_value_(nil,nil);
  79914. };
  79915. return $1;
  79916. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79917. }, function($ctx1) {$ctx1.fill(self,"parseAssignment:do:",{aString:aString,aBlock:aBlock,assignment:assignment},$globals.Repl)});
  79918. //>>excludeEnd("ctx");
  79919. },
  79920. //>>excludeStart("ide", pragmas.excludeIdeData);
  79921. args: ["aString", "aBlock"],
  79922. source: "parseAssignment: aString do: aBlock\x0a\x09\x22Assigns a new variable if the given string is an assignment expression. Calls the given block with name and value.\x0a\x09 If the string is not one no variable will be assigned and the block will be called with nil for both arguments.\x22\x0a\x09| assignment |\x0a\x09assignment := (aString tokenize: ':=') collect: [:s | s trimBoth].\x0a\x09^ (assignment size = 2 and: [self isIdentifier: assignment first])\x0a\x09\x09ifTrue: [ aBlock value: assignment first value: assignment last ]\x0a\x09\x09ifFalse: [ aBlock value: nil value: nil ]",
  79923. referencedClasses: [],
  79924. //>>excludeEnd("ide");
  79925. messageSends: ["collect:", "tokenize:", "trimBoth", "ifTrue:ifFalse:", "and:", "=", "size", "isIdentifier:", "first", "value:value:", "last"]
  79926. }),
  79927. $globals.Repl);
  79928. $core.addMethod(
  79929. $core.method({
  79930. selector: "presentResultNamed:withValue:",
  79931. protocol: 'private',
  79932. fn: function (varName,value){
  79933. var self=this;
  79934. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  79935. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79936. return $core.withContext(function($ctx1) {
  79937. //>>excludeEnd("ctx");
  79938. var $3,$2,$1,$4;
  79939. $3=$recv($recv(varName).__comma(": ")).__comma($recv($recv(value)._class())._name());
  79940. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79941. $ctx1.sendIdx[","]=3;
  79942. //>>excludeEnd("ctx");
  79943. $2=$recv($3).__comma(" = ");
  79944. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79945. $ctx1.sendIdx[","]=2;
  79946. //>>excludeEnd("ctx");
  79947. $1=$recv($2).__comma($recv(value)._asString());
  79948. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79949. $ctx1.sendIdx[","]=1;
  79950. //>>excludeEnd("ctx");
  79951. $recv($Transcript())._show_($1);
  79952. $4=$recv($Transcript())._cr();
  79953. $recv(self["@interface"])._prompt();
  79954. return self;
  79955. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79956. }, function($ctx1) {$ctx1.fill(self,"presentResultNamed:withValue:",{varName:varName,value:value},$globals.Repl)});
  79957. //>>excludeEnd("ctx");
  79958. },
  79959. //>>excludeStart("ide", pragmas.excludeIdeData);
  79960. args: ["varName", "value"],
  79961. source: "presentResultNamed: varName withValue: value\x0a\x09Transcript show: varName, ': ', value class name, ' = ', value asString; cr.\x0a\x09interface prompt",
  79962. referencedClasses: ["Transcript"],
  79963. //>>excludeEnd("ide");
  79964. messageSends: ["show:", ",", "name", "class", "asString", "cr", "prompt"]
  79965. }),
  79966. $globals.Repl);
  79967. $core.addMethod(
  79968. $core.method({
  79969. selector: "printWelcome",
  79970. protocol: 'actions',
  79971. fn: function (){
  79972. var self=this;
  79973. function $Transcript(){return $globals.Transcript||(typeof Transcript=="undefined"?nil:Transcript)}
  79974. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79975. return $core.withContext(function($ctx1) {
  79976. //>>excludeEnd("ctx");
  79977. var $1;
  79978. $recv($Transcript())._show_("Type :q to exit.");
  79979. $1=$recv($Transcript())._cr();
  79980. return self;
  79981. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  79982. }, function($ctx1) {$ctx1.fill(self,"printWelcome",{},$globals.Repl)});
  79983. //>>excludeEnd("ctx");
  79984. },
  79985. //>>excludeStart("ide", pragmas.excludeIdeData);
  79986. args: [],
  79987. source: "printWelcome\x0a\x09Transcript show: 'Type :q to exit.'; cr.",
  79988. referencedClasses: ["Transcript"],
  79989. //>>excludeEnd("ide");
  79990. messageSends: ["show:", "cr"]
  79991. }),
  79992. $globals.Repl);
  79993. $core.addMethod(
  79994. $core.method({
  79995. selector: "processLine:",
  79996. protocol: 'private',
  79997. fn: function (buffer){
  79998. var self=this;
  79999. var show;
  80000. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80001. return $core.withContext(function($ctx1) {
  80002. //>>excludeEnd("ctx");
  80003. var $1,$2;
  80004. show=(function(varName,value){
  80005. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80006. return $core.withContext(function($ctx2) {
  80007. //>>excludeEnd("ctx");
  80008. return self._presentResultNamed_withValue_(varName,value);
  80009. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80010. }, function($ctx2) {$ctx2.fillBlock({varName:varName,value:value},$ctx1,1)});
  80011. //>>excludeEnd("ctx");
  80012. });
  80013. $1=self._executeCommand_(buffer);
  80014. if(!$core.assert($1)){
  80015. $2=self._isVariableDefined_(buffer);
  80016. if($core.assert($2)){
  80017. $recv(show)._value_value_(buffer,$recv(self["@session"])._perform_(buffer));
  80018. } else {
  80019. self._assignNewVariable_do_(buffer,show);
  80020. };
  80021. };
  80022. return self;
  80023. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80024. }, function($ctx1) {$ctx1.fill(self,"processLine:",{buffer:buffer,show:show},$globals.Repl)});
  80025. //>>excludeEnd("ctx");
  80026. },
  80027. //>>excludeStart("ide", pragmas.excludeIdeData);
  80028. args: ["buffer"],
  80029. source: "processLine: buffer\x0a\x09\x22Processes lines entered through the readline interface.\x22\x0a\x09| show |\x0a\x09show := [:varName :value | self presentResultNamed: varName withValue: value].\x0a\x09(self executeCommand: buffer) ifFalse: [\x0a\x09\x09(self isVariableDefined: buffer)\x0a\x09\x09\x09ifTrue: [show value: buffer value: (session perform: buffer)]\x0a\x09\x09\x09ifFalse: [self assignNewVariable: buffer do: show]]",
  80030. referencedClasses: [],
  80031. //>>excludeEnd("ide");
  80032. messageSends: ["presentResultNamed:withValue:", "ifFalse:", "executeCommand:", "ifTrue:ifFalse:", "isVariableDefined:", "value:value:", "perform:", "assignNewVariable:do:"]
  80033. }),
  80034. $globals.Repl);
  80035. $core.addMethod(
  80036. $core.method({
  80037. selector: "prompt",
  80038. protocol: 'accessing',
  80039. fn: function (){
  80040. var self=this;
  80041. return "amber >> ";
  80042. },
  80043. //>>excludeStart("ide", pragmas.excludeIdeData);
  80044. args: [],
  80045. source: "prompt\x0a\x09^ 'amber >> '",
  80046. referencedClasses: [],
  80047. //>>excludeEnd("ide");
  80048. messageSends: []
  80049. }),
  80050. $globals.Repl);
  80051. $core.addMethod(
  80052. $core.method({
  80053. selector: "setPreviousVariablesFor:from:",
  80054. protocol: 'private',
  80055. fn: function (newObject,oldObject){
  80056. var self=this;
  80057. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80058. return $core.withContext(function($ctx1) {
  80059. //>>excludeEnd("ctx");
  80060. $recv(self._instanceVariableNamesFor_($recv(oldObject)._class()))._do_((function(each){
  80061. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80062. return $core.withContext(function($ctx2) {
  80063. //>>excludeEnd("ctx");
  80064. return $recv(newObject)._perform_withArguments_($recv(each).__comma(":"),[$recv(oldObject)._perform_(each)]);
  80065. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80066. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  80067. //>>excludeEnd("ctx");
  80068. }));
  80069. return self;
  80070. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80071. }, function($ctx1) {$ctx1.fill(self,"setPreviousVariablesFor:from:",{newObject:newObject,oldObject:oldObject},$globals.Repl)});
  80072. //>>excludeEnd("ctx");
  80073. },
  80074. //>>excludeStart("ide", pragmas.excludeIdeData);
  80075. args: ["newObject", "oldObject"],
  80076. source: "setPreviousVariablesFor: newObject from: oldObject\x0a\x09(self instanceVariableNamesFor: oldObject class) do: [:each |\x0a\x09\x09newObject perform: each, ':' withArguments: {oldObject perform: each}].",
  80077. referencedClasses: [],
  80078. //>>excludeEnd("ide");
  80079. messageSends: ["do:", "instanceVariableNamesFor:", "class", "perform:withArguments:", ",", "perform:"]
  80080. }),
  80081. $globals.Repl);
  80082. $core.addMethod(
  80083. $core.method({
  80084. selector: "setPrompt",
  80085. protocol: 'actions',
  80086. fn: function (){
  80087. var self=this;
  80088. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80089. return $core.withContext(function($ctx1) {
  80090. //>>excludeEnd("ctx");
  80091. $recv(self["@interface"])._setPrompt_(self._prompt());
  80092. return self;
  80093. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80094. }, function($ctx1) {$ctx1.fill(self,"setPrompt",{},$globals.Repl)});
  80095. //>>excludeEnd("ctx");
  80096. },
  80097. //>>excludeStart("ide", pragmas.excludeIdeData);
  80098. args: [],
  80099. source: "setPrompt\x0a\x09interface setPrompt: self prompt",
  80100. referencedClasses: [],
  80101. //>>excludeEnd("ide");
  80102. messageSends: ["setPrompt:", "prompt"]
  80103. }),
  80104. $globals.Repl);
  80105. $core.addMethod(
  80106. $core.method({
  80107. selector: "setupCommands",
  80108. protocol: 'initialization',
  80109. fn: function (){
  80110. var self=this;
  80111. function $Dictionary(){return $globals.Dictionary||(typeof Dictionary=="undefined"?nil:Dictionary)}
  80112. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80113. return $core.withContext(function($ctx1) {
  80114. //>>excludeEnd("ctx");
  80115. var $2,$1;
  80116. $2=$recv([":q"]).__minus_gt((function(){
  80117. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80118. return $core.withContext(function($ctx2) {
  80119. //>>excludeEnd("ctx");
  80120. return $recv(process)._exit();
  80121. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80122. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  80123. //>>excludeEnd("ctx");
  80124. }));
  80125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80126. $ctx1.sendIdx["->"]=1;
  80127. //>>excludeEnd("ctx");
  80128. $1=[$2,$recv([""]).__minus_gt((function(){
  80129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80130. return $core.withContext(function($ctx2) {
  80131. //>>excludeEnd("ctx");
  80132. return $recv(self["@interface"])._prompt();
  80133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80134. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  80135. //>>excludeEnd("ctx");
  80136. }))];
  80137. self["@commands"]=$recv($Dictionary())._from_($1);
  80138. return self;
  80139. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80140. }, function($ctx1) {$ctx1.fill(self,"setupCommands",{},$globals.Repl)});
  80141. //>>excludeEnd("ctx");
  80142. },
  80143. //>>excludeStart("ide", pragmas.excludeIdeData);
  80144. args: [],
  80145. source: "setupCommands\x0a\x09commands := Dictionary from: {\x0a\x09\x09{':q'} -> [process exit].\x0a\x09\x09{''} -> [interface prompt]}",
  80146. referencedClasses: ["Dictionary"],
  80147. //>>excludeEnd("ide");
  80148. messageSends: ["from:", "->", "exit", "prompt"]
  80149. }),
  80150. $globals.Repl);
  80151. $core.addMethod(
  80152. $core.method({
  80153. selector: "setupHotkeys",
  80154. protocol: 'initialization',
  80155. fn: function (){
  80156. var self=this;
  80157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80158. return $core.withContext(function($ctx1) {
  80159. //>>excludeEnd("ctx");
  80160. var $receiver;
  80161. $recv($recv(process)._stdin())._on_do_("keypress",(function(s,key){
  80162. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80163. return $core.withContext(function($ctx2) {
  80164. //>>excludeEnd("ctx");
  80165. if(($receiver = key) == null || $receiver.isNil){
  80166. return key;
  80167. } else {
  80168. return self._onKeyPress_(key);
  80169. };
  80170. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80171. }, function($ctx2) {$ctx2.fillBlock({s:s,key:key},$ctx1,1)});
  80172. //>>excludeEnd("ctx");
  80173. }));
  80174. return self;
  80175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80176. }, function($ctx1) {$ctx1.fill(self,"setupHotkeys",{},$globals.Repl)});
  80177. //>>excludeEnd("ctx");
  80178. },
  80179. //>>excludeStart("ide", pragmas.excludeIdeData);
  80180. args: [],
  80181. source: "setupHotkeys\x0a\x09process stdin on: 'keypress' do: [:s :key | key ifNotNil: [self onKeyPress: key]].",
  80182. referencedClasses: [],
  80183. //>>excludeEnd("ide");
  80184. messageSends: ["on:do:", "stdin", "ifNotNil:", "onKeyPress:"]
  80185. }),
  80186. $globals.Repl);
  80187. $core.addMethod(
  80188. $core.method({
  80189. selector: "subclass:withVariable:",
  80190. protocol: 'private',
  80191. fn: function (aClass,varName){
  80192. var self=this;
  80193. function $ClassBuilder(){return $globals.ClassBuilder||(typeof ClassBuilder=="undefined"?nil:ClassBuilder)}
  80194. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80195. return $core.withContext(function($ctx1) {
  80196. //>>excludeEnd("ctx");
  80197. var $1;
  80198. $1=$recv($recv($ClassBuilder())._new())._addSubclassOf_named_instanceVariableNames_package_(aClass,$recv(self._subclassNameFor_(aClass))._asSymbol(),[varName],"Compiler-Core");
  80199. return $1;
  80200. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80201. }, function($ctx1) {$ctx1.fill(self,"subclass:withVariable:",{aClass:aClass,varName:varName},$globals.Repl)});
  80202. //>>excludeEnd("ctx");
  80203. },
  80204. //>>excludeStart("ide", pragmas.excludeIdeData);
  80205. args: ["aClass", "varName"],
  80206. source: "subclass: aClass withVariable: varName\x0a\x09\x22Create subclass with new variable.\x22\x0a\x09^ ClassBuilder new\x0a\x09\x09addSubclassOf: aClass\x0a\x09\x09named: (self subclassNameFor: aClass) asSymbol\x0a\x09\x09instanceVariableNames: {varName}\x0a\x09\x09package: 'Compiler-Core'",
  80207. referencedClasses: ["ClassBuilder"],
  80208. //>>excludeEnd("ide");
  80209. messageSends: ["addSubclassOf:named:instanceVariableNames:package:", "new", "asSymbol", "subclassNameFor:"]
  80210. }),
  80211. $globals.Repl);
  80212. $core.addMethod(
  80213. $core.method({
  80214. selector: "subclassNameFor:",
  80215. protocol: 'private',
  80216. fn: function (aClass){
  80217. var self=this;
  80218. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80219. return $core.withContext(function($ctx1) {
  80220. //>>excludeEnd("ctx");
  80221. var $3,$2,$7,$6,$5,$4,$8,$1,$receiver;
  80222. $3=$recv(aClass)._name();
  80223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80224. $ctx1.sendIdx["name"]=1;
  80225. //>>excludeEnd("ctx");
  80226. $2=$recv($3)._matchesOf_("\x5cd+$");
  80227. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80228. $ctx1.sendIdx["matchesOf:"]=1;
  80229. //>>excludeEnd("ctx");
  80230. if(($receiver = $2) == null || $receiver.isNil){
  80231. $1=$recv($recv(aClass)._name()).__comma("2");
  80232. } else {
  80233. var counter;
  80234. $7=$recv(aClass)._name();
  80235. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80236. $ctx1.sendIdx["name"]=2;
  80237. //>>excludeEnd("ctx");
  80238. $6=$recv($7)._matchesOf_("\x5cd+$");
  80239. $5=$recv($6)._first();
  80240. $4=$recv($5)._asNumber();
  80241. counter=$recv($4).__plus((1));
  80242. counter;
  80243. $8=$recv(aClass)._name();
  80244. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80245. $ctx1.sendIdx["name"]=3;
  80246. //>>excludeEnd("ctx");
  80247. $1=$recv($8)._replaceRegexp_with_("\x5cd+$"._asRegexp(),$recv(counter)._asString());
  80248. };
  80249. return $1;
  80250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80251. }, function($ctx1) {$ctx1.fill(self,"subclassNameFor:",{aClass:aClass},$globals.Repl)});
  80252. //>>excludeEnd("ctx");
  80253. },
  80254. //>>excludeStart("ide", pragmas.excludeIdeData);
  80255. args: ["aClass"],
  80256. source: "subclassNameFor: aClass\x0a\x09^ (aClass name matchesOf: '\x5cd+$')\x0a\x09\x09ifNotNil: [ | counter |\x0a\x09\x09\x09counter := (aClass name matchesOf: '\x5cd+$') first asNumber + 1.\x0a\x09\x09\x09aClass name replaceRegexp: '\x5cd+$' asRegexp with: counter asString]\x0a\x09\x09ifNil: [\x0a\x09\x09\x09aClass name, '2'].",
  80257. referencedClasses: [],
  80258. //>>excludeEnd("ide");
  80259. messageSends: ["ifNotNil:ifNil:", "matchesOf:", "name", "+", "asNumber", "first", "replaceRegexp:with:", "asRegexp", "asString", ","]
  80260. }),
  80261. $globals.Repl);
  80262. $core.addMethod(
  80263. $core.method({
  80264. selector: "main",
  80265. protocol: 'initialization',
  80266. fn: function (){
  80267. var self=this;
  80268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80269. return $core.withContext(function($ctx1) {
  80270. //>>excludeEnd("ctx");
  80271. $recv(self._new())._createInterface();
  80272. return self;
  80273. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80274. }, function($ctx1) {$ctx1.fill(self,"main",{},$globals.Repl.klass)});
  80275. //>>excludeEnd("ctx");
  80276. },
  80277. //>>excludeStart("ide", pragmas.excludeIdeData);
  80278. args: [],
  80279. source: "main\x0a\x09self new createInterface",
  80280. referencedClasses: [],
  80281. //>>excludeEnd("ide");
  80282. messageSends: ["createInterface", "new"]
  80283. }),
  80284. $globals.Repl.klass);
  80285. });
  80286. define("amber_vm/boot", ["amber/boot"], function (boot) { return boot; });
  80287. define("app", ["amber/boot","amber_vm/smalltalk","amber_vm/globals","amber_vm/nil","amber_vm/_st","amber_core/Kernel-Objects","amber_core/Kernel-Classes","amber_core/Kernel-Methods","amber_core/Kernel-Collections","amber_core/Kernel-Infrastructure","amber_core/Kernel-Exceptions","amber_core/Kernel-Transcript","amber_core/Kernel-Announcements","amber_core/Compiler-Exceptions","amber_core/Compiler-Core","amber_core/Compiler-AST","amber_core/Compiler-IR","amber_core/Compiler-Inlining","amber_core/Compiler-Semantic","amber_core/Compiler-Interpreter","amber/parser","amber_core/SUnit","amber_core/Kernel-ImportExport","amber_core/Kernel-Tests","amber_core/Compiler-Tests","amber_core/SUnit-Tests","amber_cli/AmberCli"], function (boot) {
  80288. boot.api = boot.api || boot.vm; // backward compatibility
  80289. boot.api.initialize();
  80290. var $core = boot.api, $globals = boot.globals;
  80291. $globals.AmberCli._main();
  80292. });
  80293. requirejs(["app"]);